Comprehensive Content Security Policy header management with extensive directive configuration and built-in security defaults.
Sets the Content-Security-Policy or Content-Security-Policy-Report-Only header to prevent XSS attacks and other code injection vulnerabilities.
/**
* Sets Content-Security-Policy header with configurable directives
* @param options - CSP configuration options
* @returns Express middleware function
*/
function contentSecurityPolicy(
options?: ContentSecurityPolicyOptions
): MiddlewareFunction;
interface ContentSecurityPolicyOptions {
/** Whether to use Helmet's default directives (default: true) */
useDefaults?: boolean;
/** CSP directives configuration */
directives?: Record<string, CSPDirectiveValue>;
/** Use Content-Security-Policy-Report-Only instead of enforcing (default: false) */
reportOnly?: boolean;
}
type CSPDirectiveValue =
| null
| Iterable<string>
| typeof dangerouslyDisableDefaultSrc;Usage Examples:
import { contentSecurityPolicy } from "helmet";
// OR
import helmet from "helmet";
// Use default CSP
app.use(contentSecurityPolicy());
// OR
app.use(helmet.contentSecurityPolicy());
// Custom directives
app.use(contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
styleSrc: ["'self'", "'unsafe-inline'"],
scriptSrc: ["'self'", "https://cdn.example.com"],
imgSrc: ["'self'", "data:", "https:"],
fontSrc: ["'self'", "https://fonts.gstatic.com"]
}
}));
// Report-only mode for testing
app.use(contentSecurityPolicy({
reportOnly: true,
directives: {
defaultSrc: ["'self'"],
reportUri: ["/csp-report"]
}
}));
// Disable defaults and set custom policy
app.use(contentSecurityPolicy({
useDefaults: false,
directives: {
defaultSrc: ["'none'"],
scriptSrc: ["'self'"],
styleSrc: ["'self'"]
}
}));Returns Helmet's default CSP directives for inspection or modification.
/**
* Returns the default CSP directives used by Helmet
* @returns Object containing default CSP directives
*/
function getDefaultDirectives(): CSPDirectives;
interface CSPDirectives {
"default-src": string[];
"base-uri": string[];
"font-src": string[];
"form-action": string[];
"frame-ancestors": string[];
"img-src": string[];
"object-src": string[];
"script-src": string[];
"script-src-attr": string[];
"style-src": string[];
"upgrade-insecure-requests": string[];
}Usage Example:
import helmet from "helmet";
// Get and modify default directives
const defaults = helmet.contentSecurityPolicy.getDefaultDirectives();
const customDirectives = {
...defaults,
"script-src": [...defaults["script-src"], "https://cdn.example.com"],
"style-src": [...defaults["style-src"], "'unsafe-inline'"]
};
app.use(helmet.contentSecurityPolicy({
directives: customDirectives
}));Special symbol for completely disabling the default-src directive (use with extreme caution).
/**
* Symbol used to dangerously disable the default-src directive
* WARNING: This can make your site vulnerable to XSS attacks
*/
const dangerouslyDisableDefaultSrc: unique symbol;Usage Example:
import helmet from "helmet";
// Access via the contentSecurityPolicy function property
const { dangerouslyDisableDefaultSrc } = helmet.contentSecurityPolicy;
// Completely disable default-src (dangerous!)
app.use(helmet.contentSecurityPolicy({
directives: {
"default-src": dangerouslyDisableDefaultSrc,
"script-src": ["'self'"],
"style-src": ["'self'"]
}
}));<object>, <embed>, <applet> sources<base> elementHelmet's default CSP includes these directives:
default-src 'self';
base-uri 'self';
font-src 'self' https: data:;
form-action 'self';
frame-ancestors 'self';
img-src 'self' data:;
object-src 'none';
script-src 'self';
script-src-attr 'none';
style-src 'self' https: 'unsafe-inline';
upgrade-insecure-requests;This provides a secure baseline that works with most applications while preventing common XSS attacks.