关于在Nginx中配置HTTP安全响应头可能会导致的一些问题
最近在实际开发过程中需要对项目的http响应头做一些配置,以防止各类XSS攻击、点击劫持等。在实际配置过程中,发现部分配置加上之后会导致页面部分资源比如图片image,表单样式css等无法正常加载,现记录如下。
1.Content-Security-Policy(CSP)
CSP
是一个计算机的安全标志,主要用来防止 XSS
、点击劫持、SQL
注入等攻击;CSP
通过定义运行加载脚本的位置和内容防止恶意代码的加载。这个配置往往用于定义页面可以加载哪些资源,减少和上报 XSS 的攻击,防止数据包嗅探攻击。
实际配置过程中发现如果简单的将属性配置为default-src 'self‘'
,可能会导致部分css表单样式无法加载,使得页面布局乱掉。
推荐配置方法:
add_header Content-Security-Policy "default-src 'self' example.com(按实际需求修改) 'unsafe-inline' 'unsafe-eval' blob: data: ;";
5.X-Content-Type-Options
X-Content-Type-Options
HTTP 消息头相当于一个提示标志,被服务器用来提示客户端一定要遵循在 Content-Type
首部中对 MIME 类型 的设定,而不能对其进行修改。这就禁用了客户端的 MIME
类型嗅探行为。
作用:禁用浏览器的 Content-Type
猜测行为。
使用方法:
# add_header X-Content-Type-Options "nosniff";
这个配置在使用过程中碰到的问题是最多的,该配置可能会带来以下问题:
1.将X-Content-Type-Options
设置为nosniff
时,您还必须在NGINX
中设置允许的MIME
资源类型,需要在nginx.conf
配置文件(或者在http
配置模块,server
配置模块)中加上如下两行配置
include /etc/nginx/mime.types;
default_type application/octet-stream;
2.后台返回的资源类型必须与页面中定义的资源类型严格保持一致,否则也会导致资源无法加载。
比如我在配置时发现,后台返回一张图片image
格式为.jpeg
格式,而页面中引用时如果图片标签为<img src="image.png" />
,那么这个配置会检测到响应的MIME
类型与请求的类型不符。
3.一个特殊的例子
在X-Content-Type-Options
配置为nosniff
的情况下,css样式中引用了.gif格式的图片也会无法正常加载,改为.png格式后就可以正常加载出来。