CSP Real-Time Monitoring
Requirements
Step-by-Step Setup
3
Implement CSP on your server
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
const SECRET_KEY = 'your-firstoken-secret-key'; // From Step 1
const MONITOR_URL = 'https://monitor.firstoken.co/v1/pages/8BD7A644AC'; // From Step 2
// Function to generate JWT token
function generateToken() {
return jwt.sign(
{ jwtPayload: {} },
SECRET_KEY,
{ expiresIn: '15m' }
);
}
// CSP middleware for payment pages
app.use('/checkout', (req, res, next) => {
const token = generateToken();
res.setHeader('Content-Security-Policy',
`default-src 'self'; ` +
`script-src 'self' https://captures.firstoken.co https://api.firstoken.co; ` +
`style-src 'self' https://fonts.googleapis.com; ` +
`img-src 'self' data: https://fonts.googleapis.com; ` +
`connect-src 'self' https://api.firstoken.co; ` +
`font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; ` +
`object-src 'none'; ` +
`base-uri 'self'; ` +
`form-action 'self'; ` +
`frame-ancestors 'self'; ` +
`frame-src https://captures.firstoken.co; ` +
`child-src 'self'; ` +
`worker-src 'none'; ` +
`report-uri ${MONITOR_URL}?t=${token}`
);
next();
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-firstoken-secret-key';
const MONITOR_URL = 'https://monitor.firstoken.co/v1/pages/8BD7A644AC';
function generateToken() {
return jwt.sign({ jwtPayload: {} }, SECRET_KEY, { expiresIn: '5d' });
}
function addCSPHeader(req, res, next) {
const token = generateToken();
res.setHeader('Content-Security-Policy',
`default-src 'self'; script-src 'self'; style-src 'self'; ` +
`img-src 'self'; font-src 'self'; connect-src 'self'; ` +
`frame-ancestors 'self'; frame-src 'self'; child-src 'self'; ` +
`worker-src 'none'; report-uri ${MONITOR_URL}?t=${token}`
);
next();
}
// Use on your payment routes
app.use('/checkout', addCSPHeader);
app.use('/payment', addCSPHeader);CSP Configuration for different scenarios
For sites with external JavaScript:
function generateCSPForPaymentProviders() {
const token = generateToken();
return `default-src 'self'; ` +
`script-src 'self' https://captures.firstoken.co https://api.firstoken.co https://www.googletagmanager.com; ` +
`connect-src 'self' https://api.firstoken.co https://www.google-analytics.com; ` +
`frame-src https://captures.firstoken.co https://api.firstoken.co/proxy; ` +
`style-src 'self' https://fonts.googleapis.com; ` +
`font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; ` +
`img-src 'self' data: https://www.google-analytics.com; ` +
`report-uri https://monitor.firstoken.co/v1/pages/8BD7A644AC?t=${token}`;
}For sites with CDN:
function generateCSPForCDN() {
const token = generateToken();
return `default-src 'self'; ` +
`script-src 'self' https://cdn.firstoken.co https://captures.firstoken.co; ` +
`style-src 'self' https://cdn.firstoken.co https://fonts.googleapis.com; ` +
`font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; ` +
`img-src 'self' data: https://cdn.firstoken.co; ` +
`frame-src https://captures.firstoken.co; ` +
`frame-ancestors 'self' https://captures.firstoken.co; ` +
`report-uri https://monitor.firstoken.co/v1/pages/8BD7A644AC?t=${token}`;
}Pattern Types Reference
Pattern Type
Symbol
Example
Description
Pattern
Description & Usage
Pattern
Description & Usage
Pattern
Description & Usage
Quick Reference
Rate Limiting for CSP Performance
Comparison with Other Monitor Features
Feature
Purpose
Implementation Required
Scanning Frequency
Last updated