CSP----Content-Security-Policy 网页安全政策(防止xss 跨域脚本恶意攻击)
1.资源加载限制:
- 以下属性为限制指定 资源 的属性
default-src: 以上所有资源 都必须符合 条件 才会加载
eg:
const http = require('http'); //用于创建 服务的 http模块
const fs = require('fs'); //用于读写文件的 模块标题
//使用 http 的 createServer 方法 创建 一个 服务 该方法 会返回 一个 新建的 http.Server 实例
http.createServer(function(request,response){ //回调 函数
//一些 请求 的处理 和数据 的返回
console.log('request start',request.url);
if(request.url === '/index'){ //判断 若 请求 url 为 /test 则 进行 列 处理
const html = fs.readFileSync('index.html','utf8'); // 异步读取 文件 并且 编码 为 utf-8
/**此处还可以 进行 一些 其他的 操作 例如请求 限制 返回头 的 设置
* **/
response.writeHead(200,{
'Content-Type':'text/html',
'Content-Security-Policy':`default-src 'self';`
});
response.end(html); //将 数据 发送 给 客户端
}else{
response.writeHead(200,{
'Content-Type':'application/javascript',
});
response.end('console.log("loading script")'); // response.end() 方法 接收一个 字符串 参数
}
}).listen(8000,function(){
console.log('service is on port 8000');
}); //监听8000端口
此处设置了 所有 加载的资源 必须 只能 是 本域 发送的资源 (内嵌js 也不能 执行)
2.属性值:
以上为上述属性可选值。
3.书写格式
'Content-Security-Policy':"限制属性1 '属性值1' '属性值2' ...; 限制属性2 ...... "
- 多次写 同一 限制 属性 只有一个 会奏效
4.script-src 的特殊值
5.注意:
- script-src 和 object-src 是毕设的 除非设置了 default-src。因为攻击者只要能注入脚本,其他限制都可以规避。而object-src必设是因为 Flash 里面可以执行外部脚本。
- script-src 不能使用unsafe-inline关键字(除非伴随一个nonce值),也不能允许设置data:URL。面是两个恶意攻击的例子
<img src="x" onerror="evil()">
<script src="data:text/javascript,evil()"></script>
特别注意 jsonp 的回调函数
<script
src="/path/jsonp?callback=alert(document.domain)//">
</script>