blob: 87bda1bf502d25f20f8245bd4c89fa1bdedf8803 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Embedded Enforcement: Sec-Required-CSP header.</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/testharness-helper.sub.js"></script>
</head>
<body>
<script>
var tests = [
// CRLF characters
{ "name": "\\r\\n character after directive name",
"csp": "script-src\r\n'unsafe-inline'",
"expected": null },
{ "name": "\\r\\n character in directive value",
"csp": "script-src 'unsafe-inline'\r\n'unsafe-eval'",
"expected": null },
{ "name": "\\n character after directive name",
"csp": "script-src\n'unsafe-inline'",
"expected": null },
{ "name": "\\n character in directive value",
"csp": "script-src 'unsafe-inline'\n'unsafe-eval'",
"expected": null },
{ "name": "\\r character after directive name",
"csp": "script-src\r'unsafe-inline'",
"expected": null },
{ "name": "\\r character in directive value",
"csp": "script-src 'unsafe-inline'\r'unsafe-eval'",
"expected": null },
// HTML encoded CRLF characters
{ "name": "%0D%0A character after directive name",
"csp": "script-src%0D%0A'unsafe-inline'",
"expected": null },
{ "name": "%0D%0A character in directive value",
"csp": "script-src 'unsafe-inline'%0D%0A'unsafe-eval'",
"expected": null },
{ "name": "%0A character after directive name",
"csp": "script-src%0A'unsafe-inline'",
"expected": null },
{ "name": "%0A character in directive value",
"csp": "script-src 'unsafe-inline'%0A'unsafe-eval'",
"expected": null },
{ "name": "%0D character after directive name",
"csp": "script-src%0D'unsafe-inline'",
"expected": null },
{ "name": "%0D character in directive value",
"csp": "script-src 'unsafe-inline'%0D'unsafe-eval'",
"expected": null },
// Attempt HTTP Header injection
{ "name": "Attempt injecting after directive name using \\r\\n",
"csp": "script-src\r\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive name using \\r",
"csp": "script-src\rTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive name using \\n",
"csp": "script-src\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive value using \\r\\n",
"csp": "script-src example.com\r\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive value using \\r",
"csp": "script-src example.com\rTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive value using \\n",
"csp": "script-src example.com\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after semicolon using \\r\\n",
"csp": "script-src example.com;\r\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after semicolon using \\r",
"csp": "script-src example.com;\rTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after semicolon using \\n",
"csp": "script-src example.com;\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after space between name and value using \\r\\n",
"csp": "script-src \r\nTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after space between name and value using \\r",
"csp": "script-src \rTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after space between name and value using \\n",
"csp": "script-src \nTest-Header-Injection: dummy",
"expected": null },
// Attempt HTTP Header injection using URL encoded characters
{ "name": "Attempt injecting after directive name using %0D%0A",
"csp": "script-src%0D%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive name using %0D",
"csp": "script-src%0DTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive name using %0A",
"csp": "script-src%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive value using %0D%0A",
"csp": "script-src example.com%0D%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive value using %0D",
"csp": "script-src example.com%0DTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after directive value using %0A",
"csp": "script-src example.com%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after semicolon using %0D%0A",
"csp": "script-src example.com;%0D%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after semicolon using %0D",
"csp": "script-src example.com;%0DTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after semicolon using %0A",
"csp": "script-src example.com;%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after space between name and value using %0D%0A",
"csp": "script-src %0D%0ATest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after space between name and value using %0D",
"csp": "script-src %0DTest-Header-Injection: dummy",
"expected": null },
{ "name": "Attempt injecting after space between name and value using %0A",
"csp": "script-src %0ATest-Header-Injection: dummy",
"expected": null },
];
tests.forEach(test => {
async_test(t => {
var url = generateURLString(Host.SAME_ORIGIN, PolicyHeader.REQUIRED_CSP);
assert_required_csp(t, url, test.csp, [test.expected]);
}, "Test CRLF: " + test.name);
});
</script>
</body>
</html>