目录php
X-XSS-Protectionnode
X-Content-Type-Optionspython
X-Content-Security-Policychrome
一些大公司使用这些安全响应头示例 json
X-Frame-Options 响应头是用来给浏览器指示是否容许一个页面在<frame>, <iframe> 或者 <object> 中展示。网站可使用此功能,来确保本身网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。浏览器
X-Frame-Options 响应头有三个可选的值:
在服务端设置的方式以下:
Java代码:
response.addHeader("x-frame-options","SAMEORIGIN");
Nginx配置:
add_header X-Frame-Options SAMEORIGIN
Apache配置:
Header always append X-Frame-Options SAMEORIGIN
好比若是咱们使用phpstudy搭建的环境,咱们能够 其余选项菜单—> php扩展及设置—>Apache模块,勾选 headers_module 模块,而后在Apache的配置文件 httpd.conf 中的空白行加入 Header always append X-Frame-Options SAMEORIGIN 便可!
加以前
加以后
测试网站是否设置了X-Frame-Options
将以下的代码中iframe中的连接换成待测网站的,保存为.html文件,本地打开。若是打开的页面中显示了待测网站,则说明没有设置,反之设置了。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8" > <title>点击劫持测试</title> </head> <body> <iframe src="http://www.xxx.com/" width="500" height="500" frameborder="10"> </iframe> </body> </html>
点击劫持危害
以下的网页咱们经过opacity控制iframe框的透明度
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>CLICK JACK!!</title> <style> iframe{ width:900px; height:250px; position: absolute; top:-195px; left:-740px; z-index:2; -moz-opacity:0.5; opacity: 0.5; #经过该参数控制iframe框的透明度,设置为0时看不见 filter:alpha(opacity=0.5); } button{ position: absolute; top:10px; left:10px; z-index: 1; width: 120px; } </style> </head> <body> <iframe src="http://www.qidian.com" frameborder="0" scrolling="no"></iframe> <button>CLICK HERE!</button> </body> </html>
当咱们把opacity参数设置为0.000001(设置为0时,虽然也不可见,可是不能点击到iframe框里的内容 )时,用户就看不到iframe框了,可是当他点击CLICK HERE按钮时,其实是点击到iframe上的内容。
点击劫持和CSRF有殊途同归之妙,都是在用户不知情的状况下诱使用户点击完成一些动做。可是在CSRF攻击的过程当中,若是出现用户交互的页面,则攻击可能会没法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面。
若是会话的Cookie中不含有Http Only属性,那么注入站点的恶意脚本可能访问此 cookie,并窃取它的值。任何存储在会话令牌中的信息均可能被窃取,并在稍后用于身份盗窃或用户假装,从而使黑客可以以该用户身份访问服务器。若是在Cookie中设置HttpOnly属性为true,兼容浏览器接收到HttpOnly cookie,那么客户端经过程序(JS脚本、Applet等)将没法读取到Cookie信息,这将有助于缓解跨站点脚本威胁。
//java示例 HttpServletResponse response2 = (HttpServletResponse)response; response2.setHeader( "Set-Cookie", "name=value; HttpOnly");
Web服务器(以IIS为例)在没有任何设置时(即默认条件下),使用OPTIONS命令,能够返回全部可以响应的HTTP方法,如OPTIONS, TRACE, GET, HEAD, COPY, PROPFIND, SEARCH, LOCK, UNLOCK。
发送OPTIONS请求:
服务器响应可使用的HTTP方法,见Allow部分。
检查原始测试响应的“Allow”头,并验证是否包含下列一个或多个不须要的选项:DELTE,SEARCE,COPY,MOVE,PROPFIND,PROPPATCH,MKCOL,LOCK,UNLOCK,PUT。
响应头信息以下:
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS Content-Length: 0 Date: Mon, 25 Jul 2016 10:12:23 GMT
咱们首先了解一下这几个方法的由来:HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法;HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
WebDAV彻底采用了HTTP1.1的方法,而且扩展了一些其余方法:
很显然上述操做明细能够对web服务器进行上传、修改、删除等操做,对服务形成威胁。虽然WebDAV有权限控制可是网上一搜仍是一大堆的攻击方法,因此若是不须要这些方法仍是建议直接屏蔽就行了。
因此,在不须要的状况下,建议关闭WebDAV。
顾名思义,这个响应头是用来防范XSS的。如今主流浏览器都支持,而且默认都开启了XSS保护,用这个header能够关闭它。它有几种配置:
浏览器提供的XSS保护机制并不完美,可是开启后仍然能够提高攻击难度,总之没有特别的理由,不要关闭它
互联网上的资源有各类类型,一般浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:"text/html"表明html文档,"image/png"是PNG图片,"text/css"是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用 MIME-sniffing 来猜想该资源的类型,解析内容并执行。
例如,咱们即便给一个html文档指定Content-Type为"text/plain",在IE8-中这个文档依然会被当作html来解析。利用浏览器的这个特性,攻击者甚至可让本来应该解析为图片的请求被解析为JavaScript。经过下面这个响应头能够禁用浏览器的类型猜想行为:
X-Content-Type-Options: nosniff
这个响应头的值只能是nosniff,可用于IE8+和Chrome
HTTP Strice Transport Security,简称为HSTS。它容许一个HTTPS网站,要求浏览器老是经过HTTPS来访问它。现阶段,除了Chrome浏览器,Firefox4+,以及Firefox的NoScript扩展都支持这个响应头。
咱们知道HTTPS相对于HTTP有更好的安全性,而不少HTTPS网站,也能够经过HTTP来访问。开发人员的失误或者用户主动输入地址,都有可能致使用户以HTTP访问网站,下降了安全性。通常,咱们会经过Web Server发送301/302重定向来解决这个问题。如今有了HSTS,可让浏览器帮你作这个跳转,省一次HTTP请求。另外,浏览器本地替换能够保证只会发送HTTPS请求,避免被劫持。
要使用HSTS,只须要在你的HTTPS网站响应头中,加入下面这行:
strict-transport-security: max-age=16070400; includeSubDomains
includeSubDomains是可选的,用来指定是否做用于子域名。支持HSTS的浏览器遇到这个响应头,会把当前网站加入HSTS列表,而后在max-age指定的秒数内,当前网站全部请求都会被重定向为https。即便用户主动输入http://
或者不输入协议部分,都将重定向到https://
地址。
Chrome内置了一个HSTS列表,默认包含Google、Paypal、Twitter、Linode等等服务。咱们也能够在Chrome输入chrome://net-internals/#hsts,进入HSTS管理界面。在这个页面,你能够增长/删除/查询HSTS记录。例如,你想一直以https访问某网址,经过“add Domain”加上去就行了。
Content-Security-Policy,简称 CSP。顾名思义,这个规范与内容安全有关,主要是用来定义页面能够加载哪些资源,减小 XSS 的发生。
Chrome 扩展已经引入了 CSP,经过 manifest.json 中的 content_security_policy
字段来定义。一些现代浏览器也支持经过响应头来定义 CSP
要使用 CSP,只须要服务端加入相似这样的响应头就好了:
Content-Security-Policy: default-src 'self'
default-src
是 CSP 指令,多个指令之间用英文分号分割;'self'
是指令值,多个指令值用英文空格分割。
Google+,使用了这几个本文提到的响应头
x-content-type-options: nosniff x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block
Twitter使用了这些:
strict-transport-security: max-age=631138519 x-frame-options: SAMEORIGIN x-xss-protection: 1; mode=block
PayPal的:
X-Frame-Options: SAMEORIGIN Strict-Transport-Security: max-age=14400
Facebook则使用了这些(配置了详细的CSP,关闭了XSS保护):
strict-transport-security: max-age=60 x-content-type-options: nosniff x-frame-options: DENY x-xss-protection: 0 content-security-policy: default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net https://fb.scanandcleanlocal.com:*;
参考文章:一些安全相关的HTTP响应头