Comprehensive Express.js security middleware library that automatically sets multiple HTTP response headers to protect web applications against common security vulnerabilities.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
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.