A tool designed to analyze HTML and identify potential breaches of Content Security Policy (CSP) rules. The goal is to prevent CSP violations from infiltrating your codebase during the build process.
By default it throws errors if it finds any usage of:
- inline Styles
<div style="color:blue;"></div>
- inline javascript similar to:
javascript:void(0)
onclick="doSomething()"
- Style tags without a nonce attribute
<style></style>
- Script tags without a nonce attribute
<script></script>
Using npm:
npm install csp-html-linter --save-dev
Import the plugin and call csp-html-linter passing it an include argument containing a glob to tell it where to find the html files. You can also pass any of the other options.
{
"scripts" : {
"lint" : "csp-html-linter --include \"src/**/*.html\" --allowInlineStyles --verbose"
},
}
Import the plugin and call parse() passing the code
const cspHtmlLinter = require('csp-html-linter');
const violations = cspHtmlLinter.parse(code);
Returns an array of violation messages in the form :
['violation message 1', 'violations message 2']
Import the plugin and call parse() passing the code and the options.
By default all options are defaulted to false.
const cspHtmlLinter = require('csp-html-linter');
const options = {
allowInlineStyles: true,
allowInlineJs: true,
allowStyleTagWithoutNonce: true,
allowScriptTagWithoutNonce: true,
includeLocationInfo: true
};
const violations = cspHtmlLinter.parse(code, options);
if includeLocationInfo is set, returns an object in the form :
{
message:'',
location: {
startLine,
startCol,
startOffset,
endLine,
endCol,
endOffset
}
}
The configuration above will allow the following:
<style>
.color{
color:red;
}
</style>
<script></script>
<div onclick="doSomething()"></div>
<div style="color:black;"></div>
<a href="javascript:void(0)">click here</a>
Type: Boolean : Optional
Indicates if inline styles should be allowed. Defaults to false.
Type: Boolean : Optional
Indicates if inline JavaScript should be allowed. Defaults to false.
Type: Boolean : Optional
Indicates if style tags should require a nonce. Defaults to false.
Type: Boolean : Optional
Indicates if script tags should require a nonce. Defaults to false.
Type Boolean : optional
Indicates if location info should be returned. When set, the returned object is no longer an array of messages but a format similar to the following:
{
message: 'You must not use the inline Javascript event: onclick',
location: {
startLine,
startCol,
startOffset,
endLine,
endCol,
endOffset,
}
}