二、开启方式 一种是:通过 HTTP 头信息的Content-Security-Policy的字段。 一种是:在网页中设置<meta>标签,如:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
三、栗子
1、阻止加载不符合CSP的外部资源。
加载资源:
<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
不开启CSP时候可以正常加载js:
开启之后:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
2、script-src 的特殊值
'unsafe-inline':允许执行页面内嵌的<script>标签和事件监听函数
'unsafe-eval':允许将字符串当作代码执行,比如使用eval、setTimeout、setInterval等函数。
'nonce'值:每次HTTP回应给出一个授权token,页面内嵌脚本必须有这个token,才会执行
'hash'值:列出允许执行的脚本代码的Hash值,页面内嵌脚本的哈希值只有吻合的情况下,才能执行
如:设置 'unsafe-inline' 'unsafe-eval'; 之后,可以执行如下
<img src="?" onerror="alert(1)">
<script type="text/javascript">
eval('setTimeout(function(){console.log(1);},1000)');
</script>
学习链接: