3个跟web安全有关的http头部

X-Frames-Option X-Content-Type-Options X-XSS-Protection

X-Frames-Option
这个头用来告诉浏览器,是否同意把页面展示到frames或者iframe里面,这样可以保证页面不会被嵌入到恶意网站里面展示,从而避免点击劫持的攻击。

语法:

1
2
3
X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/

  • deny 表示该页面不允许在frame中展示,即便是在相同域名的页面中嵌套也不允许。
  • sameorigin 表示该页面可以在相同域名页面的frame中展示。
  • allow-from uri 表示该页面可以在指定来源的frame中展示。

这真是个简单好用的手段。

注意:不同其它的http头部,这个头部在meta标签中设置无效!

X-Content-Type-Options
这个头用来告诉浏览器一定要遵循在Content-Type首部中对MIME的设定,而不能对其进行修改。这就禁用了客户端的MIME类型嗅探行为。但是要求网站运维和开发人员必须把各个资源的content-type设置准确。

语法:

1
X-Content-Type-Options: nosniff

  • nosniff 下面两种情况的请求将被阻止:
    • 请求类型是style 但是MIME类型不是text/css
    • 请求类型是script 但是MIME类型不是JavaScriptMIME类型。

注意: nosniff只应用于scriptstyle两种类型。

X-XSS-Protection
这个是Internet Explorer,Chrome和Safari的一个功能,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。这个头在现代浏览器上不是很有必要,因为现代浏览器可以通过CSP来对javascript做非常严格的控制,但是这个头对于不支持CSP旧版浏览器是有保护作用的。

语法:

1
2
3
4
X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>

  • 0 禁止XSS过滤。
  • 1 启用XSS过滤(通常浏览器是默认的)。 如果检测到跨站脚本攻击,浏览器将清除页面(删除不安全的部分)。
  • 1;mode=block 启用XSS过滤。 如果检测到攻击,浏览器将不会清除页面,而是阻止页面加载。
  • 1; report=<reporting-URI> (Chromium only)
    启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri指令的功能发送违规报告。