文/玄魂html
目录nginx
前言... web
1.1 点击劫持(clickjacking attacks)... apache
1.2 Frame Bursters. 浏览器
1.3 The X-Frame-Options. 安全
1.3.1 X-Frame-Options. 服务器
1.3.2 Apache配置X-Frame-Options. cookie
1.3.3 Nginx 配置X-Frame-Options. app
1.3.4 IIS配置X-Frame-Options. ide
1.4 浏览器兼容性...
“Clickjacking(点击劫持)是由互联网安全专家罗伯特·汉森和耶利米·格劳斯曼在2008年提出的。
是一种视觉欺骗手段,在web端就是iframe嵌套一个透明不可见的页面,让用户在不知情的状况下,点击攻击者想要欺骗用户点击的位置。”
假设你访问一个web站点并看到以下的页面:
免费的午饭谁都喜欢,当你满怀期待的点击按钮“WIN”的时候,恭喜你,你已经被点击劫持了。你实际点击的连接以下:
这是登陆网上银行以后的一个转帐连接,转移你的所有资产给Kim Dotcom先生。可是你根本你没有看到这个页面,像作梦同样。这只是一个简单的示例,实现上在网上银行转帐不会这么简单,可是却告诉咱们一个道理,访问网页和看魔术表演同样,看到的不必定都是真的。
下面咱们具体讨论下点击劫持的内部机制,和防护措施。
点击劫持的表象通常是用户点击了页面的A元素,可是实际上接收点击事件的倒是另一个元素。
如今改变下页面内个元素的透明度,再来看下刚才的页面。
咱们能够看到,在ipad页面是上部还有个层,其实是一个iframe,如今的透明度为50%,实际的页面中它的透明度为0%,虽然被隐藏不可见,可是随时均可以被激活。
在 Firefox的3D视图下,观察这个页面更明显。
被隐藏的iframe在IPAD页面的上部,同时转款的连接正好在“WIN”的上方,由于设置了透明度,用户只能看到“WIN”,但实际点击的是转款。
攻击者的页面内容多是这样的:
代码就是这么简单,下面咱们观察一下点击“WIN”时实际上点击“转款”连接时的http请求信息。
从图中标记的地方,能够看到请求的实际地址和身份验证的cookie信息。固然这样的攻击能成功,在于用户已经登陆的网上银行。这样的攻击行为和跨站请求伪造很相似。
下面咱们讨论下针对点击劫持的基本防护方法。
这是在页面上经过脚原本防止点击劫持或者iframe恶意请求的方式,本文不作介绍,详见http://seclab.stanford.edu/websec/framebusting/framebust.pdf,乌云有篇相似的中文文章共参考http://drops.wooyun.org/papers/104。
X-Frame-Options HTTP 响应头,能够指示浏览器是否应该加载一个iframe中的页面。网站能够经过设置X-Frame-Options阻止站点内的页面被其余页面嵌入从而防止点击劫持。
X-Frame-Options共有三个值:
DENY
任何页面都不能被嵌入到iframe或者frame中。
SAMEORIGIN
页面只能被本站页面嵌入到iframe或者frame中。
ALLOW-FROM uri
页面自能被指定的Uri嵌入到iframe或frame中。
在站点配置文件httpd.conf中添加以下配置,限制只有站点内的页面才能够嵌入iframe。
配置以后重启apache使其生效。该配置方式对IBM HTTP Server一样适用。
若是同一apache服务器上有多个站点,只想针对一个站点进行配置,能够修改.htaccess文件,添加以下内容:
到 nginx/conf文件夹下,修改nginx.conf ,添加以下内容:
重启Nginx服务。
在web站点的web.config中配置:
桌面浏览器: