Nginx 设置 Content-Security-Policy (CSP)

要在 Nginx 中设置 Content-Security-Policy (CSP),可以在 Nginx 的配置文件中添加以下代码段:

add_header Content-Security-Policy "directive1; directive2; directive3";

其中,directive1directive2directive3 是 CSP 指令,它们可以是以下任意一种或多种:

  • default-src: 指定默认的来源,如果其他指令没有覆盖,则使用该指令。
  • script-src: 指定可以包含在页面中的脚本的来源。
  • style-src: 指定可以包含在页面中的样式表的来源。
  • img-src: 指定可以包含在页面中的图像的来源。
  • connect-src: 指定可以从页面中进行连接的来源,例如 WebSocket、XHR、Fetch 和 EventSource 。
  • font-src: 指定可以包含在页面中的字体的来源。
  • object-src: 指定可以包含在页面中的插件的来源,例如 Flash、Java 和 Silverlight。
  • media-src: 指定可以包含在页面中的音频和视频的来源。
  • frame-src: 指定可以包含在页面中的框架的来源。
  • sandbox: 指定使用沙盒模式的特定来源。

可以根据需要添加或删除 CSP 指令。例如,以下代码段将只允许加载来自本站和 blog.yangyuhong.com.cn 的脚本和样式表:

add_header Content-Security-Policy "default-src 'self' blog.yangyuhong.com.cn 'unsafe-inline' 'unsafe-eval' blob: data: ;";

其中'unsafe-inline''unsafe-eval'是CSP(Content Security Policy)中的关键词,用于指示浏览器是否允许执行内联脚本和动态脚本。

  • 'unsafe-inline'指示浏览器允许在HTML页面中直接嵌入脚本代码,例如<script>alert('Hello World!');</script>,这种方式被认为是不安全的,因为它容易受到XSS攻击。
  • 'unsafe-eval'指示浏览器允许使用eval()函数或函数构造器(Function())来执行动态脚本,例如eval('alert("Hello World!");'),这种方式也被认为是不安全的,因为它容易受到代码注入攻击。
    为了提高网站的安全性,CSP可以限制哪些脚本可以被执行,包括内联脚本、动态脚本、外部脚本等,从而减少XSS攻击和代码注入攻击的风险。在CSP中,可以使用'unsafe-inline''unsafe-eval'以外的其他关键词,例如'self''strict-dynamic''nonce''hash'等,来指定可信的脚本来源和脚本内容。
    当nginx服务器配置了CSP,并且限制了内联脚本和动态脚本的执行时,如果页面中包含了内联脚本或动态脚本,浏览器就会拒绝执行这些脚本,并在控制台输出类似于Refused to execute inline script because it violates the following Content Security Policy directive的错误信息。此时,可以通过放宽CSP策略,允许执行内联脚本和动态脚本,来解决这个问题,但这也会增加网站的安全风险。
发表回复 0

Your email address will not be published. Required fields are marked *