web:security-config
Table of Contents
X-XSS-Protection
HTTP X-XSS-Protection 响应头是Internet Explorer,Chrome和Safari的一个功能, 当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。虽然这些保护在现代浏览器中基本上是不必要的, 当网站实施一个强大的Content-Security-Policy来禁用内联的JavaScript ('unsafe-inline')时, 他们仍然可以为尚不支持 CSP 的旧版浏览器的用户提供保护。 语法 X-XSS-Protection: 0 //禁止XSS过滤。 X-XSS-Protection: 1 //启用XSS过滤(通常浏览器是默认的)。 如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。 X-XSS-Protection: 1; mode=block //启用XSS过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。 X-XSS-Protection: 1; report=<reporting-uri> 启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri指令的功能发送违规报告。
F.Y.I.: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-XSS-Protection
X-Frame-Options
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, <iframe> 或者 <object> 中展现的标记。网站可以使用此功能, 来确保自己网站的内容没有被嵌到别人的网站中去, 也从而避免了点击劫持 (clickjacking) 的攻击。 X-Frame-Options 有三个值: DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。 ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。 换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载, 在同域名页面中同样会无法加载。另一方面, 如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。
F.Y.I. https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
X-Content-Type-Options
X-Content-Type-Options 响应首部相当于一个提示标志, 被服务器用来提示客户端一定要遵循在 Content-Type 首部中对 MIME 类型 的设定, 而不能对其进行修改。这就禁用了客户端的 MIME 类型嗅探行为,换句话说, 也就是意味着网站管理员确定自己的设置没有问题。 语法: X-Content-Type-Options: nosniff
F.Y.I. https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Content-Type-Options
Strict-Transport-Security
HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能, 它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式. 开启HSTS只需要当通过HTTPS方式访问你的网站时,返回 Strict-Transport-Security HTTP 头信息: Strict-Transport-Security: max-age=expireTime [; includeSubdomains] expireTime 过期时间,单位秒,浏览器需要记住这个网站只能通过HTTPS访问的时间。 includeSubdomains 可选: 如果这个可选的参数定义了,这条规则对于网站的所有子域同样生效。
F.Y.I. https://developer.mozilla.org/zh-CN/docs/Security/HTTP_Strict_Transport_Security
Content-Security-Policy
有如下指令:
default-src | 实例 | 解释 |
---|---|---|
default-src | 'self' cdn.example.com | 默认策略,也就是说你把这个设置了成 'self' 就让其他没有设置的都遵循这个 'self'策略 |
script-src | 'self' js.example.com | 定义js文件的过滤策略 |
style-src | 'self' css.example.com | 定义css文件的过滤策略 |
img-src | 'self' img.example.com | 定义图片文件的过滤策略 |
connect-src | 'self' https: | 定义请求连接文件的过滤策略 |
font-src | font.example.com | 定义字体文件的过滤策略 |
object-src | 'self' | 定义页面插件的过滤策略,如 <object>, <embed> 或者<applet>等元素 |
media-src | media.example.com | 定义媒体的过滤策略,如 HTML6的 <audio>, <video>等元素 |
frame-src | 'self' | 定义加载子frmae的策略 |
report-uri | /some-report-uri | 设置需要通知时的地址 |
对应的值:
值 | 实例 | 解释 |
---|---|---|
'self' | script-src 'self' | 同源策略,即允许同域名同端口下,同协议下的请求 |
data: | img-src 'self' data: | 允许通过data来请求资源 (比如用Base64 编码过的图片) |
* | img-src * | 允许任意地址的url,但是不包括 blob: filesystem: schemes |
'none' | object-src 'none' | 所有地址的资源都不允许加载 |
domain.example.com | img-src domain.example.com | 允许特定的域名请求资源 |
*.example.com | img-src *.example.com | 允许从 example.com下的任意子域名加载资源 |
https://cdn.com | img-src https://cdn.com | 仅仅允许通过https协议来从指定域名下加载资源 |
https: 或者 http: | img-src https: | 只允许通过https协议加载资源 |
'unsafe-inline' | script-src 'unsafe-inline' | 允许行内代码执行 |
'unsafe-eval' | script-src 'unsafe-eval' | 允许不安全的动态代码执行,比如 JavaScript的 eval()方法 |
行内代码:
比如:<script>console.log("foo");</script> 或者 <div onclick="console.log('click')">Click me!</div>
eval()及相关的
eval("console.log('some output');"); window.setTimeout("alert('Hello World!');", 500); var f = new Function("console.log('foo');");
F.Y.I.
- 前端安全配置之Content-Security-Policy: https://www.cnblogs.com/heyuqing/p/6215761.html
- Content Security Policy 入门教程: http://www.ruanyifeng.com/blog/2016/09/csp.html
web/security-config.txt · Last modified: 2018/07/24 08:13 by 127.0.0.1