nginx配置内容安全策略csp的代码举例

问题形容

工作中,咱们做好我的项目当前,要公布到服务器上,供用户应用。不过为了我的项目平安,还是须要应用http协定自带的安全策略规定,去进行相应的配置,以避免他人应用一些脚本去攻打咱们的我的项目(跨站脚本攻打Cross-Site Script,即XSS

所以本篇文章举例记录一下nginx中如何配置(如何在申请头中加上csp)

对于Content-Security-Policy

概念咱就不赘述了,详见官网文档:
https://developer.mozilla.org...

业务场景

比方我做的我的项目中,有以下资源须要从内部引入:

我的项目中应用了jquery脚本,从cdn.bootcdn.net拿过去的
我的项目中应用了内部css款式,从cdn.bootcss.com拿过去的
我的项目中应用了内部的图片,好几个网站的都有
我的项目中也应用了内部的媒体资源音频,好几个网站的都有

要求:

  1. 除了这两个网站cdn.bootcdn.net、cdn.bootcss.com的脚本和样式表能拜访,别的一律回绝。只有不是这两个网站的,都拒接拜访,那必定不好攻打咱们的我的项目了呗
  2. 对于图片资源和媒体资源不做限度(因为图片媒体资源并不太好攻打我的项目,js脚本倒是有肯定的危险)

nginx代码配置

http {    include       mime.types;    default_type  application/octet-stream;    sendfile        on;    keepalive_timeout  65;    server {        listen       80;        server_name  localhost;                                           # 全局配置资源拜访规定-除本人外全禁了(前面写的除外)                                      # 容许应用内联资源,内联脚本啥的                                         # data的URIs和blob流文件啥的也都能够拜访的,就是这一块不怎么限度,这个倒是没事的                                   # 这个基本上弃用了,加上吧,不妨        add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://cdn.bootcdn.net https://cdn.bootcss.com 'unsafe-inline' 'unsafe-eval'; connect-src * 'unsafe-inline'; img-src * data: blob: 'unsafe-inline'; media-src * data: blob: 'unsafe-inline'; font-src * data: blob: 'unsafe-inline'; frame-src *; style-src * 'unsafe-inline'; worker-src * data: blob: 'unsafe-inline';";                                                                # 脚本资源拜访规定-只放行本人,外人全禁用(下面这两个网站的脚本容许拜访呢)            # 容许应用eval函数                             # 所有图片资源都放行容许拜访            # 所有媒体资源都放行容许拜访               # 所有字体资源都放行容许拜访                           # 款式文件资源都放行          # 工作的资源都放行,不加就报错!得加上呢!        location / {            try_files $uri $uri/ /index.html;            root C:/nginx-1.18.0/html/personmanage/dist;            index  index.html index.htm;        }        location /api/ {            proxy_pass http://localhost:10000/;        }    }}

留神:

  • 上述代码中add_header Content-Security-Policy外面我写的有正文,大家仔细看下,就晓得什么意思了。
  • 且,上述代码亲测无效的!我本人也是应用的。
  • 而后,上述代码加到我的项目中当前,也通过了公司平安组部门对于上线的我的项目的平安扫描,所以是没什么问题的
  • 大家间接能够复制粘贴,依照本人的我的项目中的理论状况去改一下即可
  • 大家复制粘贴更改应用的时候,肯定要留神,nginx的空格啊、地位啊、分号啊、单引号双引号啊之类的,这些如果有一点点偏差,就会报错(nginx其实挺谨严的)

加上当前,在申请报文的响应头中能够看到csp

未正确配置csp的报错截图

这里搞几个没有正确配置csp的报错截图给大家瞅瞅,不便大家审查本人的代码

应用了内部jquery的js脚本,csp中未放行报错

jquery来自于cdn.bootcdn.net,能够从报错信息中看到,曾经:回绝加载cdn.bootcdn.net的jquery脚本了,所以csp中要放行才行,要加上对应网址

应用了内部的图片,csp中未放行报错

这里引入了内部图片,csp中没有加:img-src * data: blob: 'unsafe-inline'; 没有放行,所以就报错,当然图片也就加载不进去了,所以csp图片放行要加上呢

应用了内部的字体,csp未放行报错

这里引入了内部字体款式,csp中没有加:font-src * data: blob: 'unsafe-inline'; 没有放行,所以就报错... 加加加,走起

worker-src不加也会报错

不加就报错,所以:worker-src * data: blob: 'unsafe-inline';也得加上呢

好忘性不如烂笔头,记录一下呗 ^_^