点击劫持
什么是点击劫持
点击劫持 (Clickjacking) 技术又称为界面伪装攻击 (UI redress attack ),是一种视觉上的欺骗手段,通过点击诱骗网站中的其他内容,用户被诱骗实际点击了隐藏的可操作内容。
可能是电子邮件中的链接,引诱用户点击按钮即可赢得奖品或平台点赞。他们被攻击者欺骗,按下了另一个隐藏按钮,这导致他们在另一个网站上支付了一个账户。这是点击劫持攻击的一个示例。这项技术依赖于将包含按钮或隐藏链接完全隐藏起来(完全透明)合并到IFRAME中。IFrame覆盖在用户预期的诱饵网页内容之上。
举例一
<html>
<head>
<title>点击劫持的页面</title>
<style>
button {
position: absolute;
top: 270px;
left: 750px;
width: 90px;
height:40px;
}
</style>
</head>
<body>
<button id="pay">点击付钱</button>
</body>
<script type="text/javascript">
document.getElementById("pay").onclick=function () {
alert("你上当了,谢谢付钱!");
}
</script>
</html>
举例二
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<head>
<title>有机会免费领取苹果手机</title>
<style>
iframe {
width: 1440px;
height: 900px;
position: absolute;
top: -0px;
left: -0px;
z-index: 2;
-moz-opacity: 0;
opacity: 0;
filter: alpha(opacity=0);
}
button {
position: absolute;
top: 270px;
left: 750px;
z-index: 1;
width: 90px;
height:40px;
}
</style>
</head>
<body>
<button>点击领取免费苹果手机</button>
<img src="lingqufuli.jpg">
<iframe src="http://192.168.58.129:8088/clickhijack_war" scrolling="no"></iframe>
</body>
</html>
防范
- 服务端设置X-FRAME-OPTIONS 机制,该机制有两个选项:DENY 和 SAMEORIGIN。DENY表示任何网页都不能使用 iframe 载入该网页,SAMEORIGIN表示符合同源策略的网页可以使用 iframe载入该网页。如果浏览器使用了这个安全机制,在网站发现可疑行为时,会提示用户正在浏览的网页存在安全隐患,并建议用户在新窗口(官方网站)中打开。这样攻击者就无法通过 iframe 隐藏目标的网页。
- 对于重要的接口,多设计验证码,这样能够防止点击一下就进行操作的风险。
点击劫持与CSRF攻击的不同之处
点击劫持,需要用户执行通过点击、拖拽、触屏等实际操作方式,执行事件,而CSRF攻击依赖于在用户不知道或无输入的情况下伪造整个请求。
CDN带来的风险
项目中使用cdn加载静态资源虽然能够提升加载性能,但是这些静态资源也有可能被污染,从而加载并执行了攻击者想让我们执行的内容。
什么是CND
为什么静态资源会使用 CDN
防范
尽量不使用cdn,或者是在使用前,对资源的安全性进行验证。
文件上传漏洞
文件上传漏洞是指攻击者跳过文件格式校验,上传一个可执行的文件到服务器并执行。这里上传的文件可以是木马,病毒,恶意脚本。
防范:
- 前后端:都要严格控制上传文件的类型;
- 后端:在上传时按照一定规则对文件重命名;
- 后端:在服务器上对放置文件的目录设置为不可执行。
代办
- 演示一下如果跳过文件格式上传。
- 了解项目里面目前是怎么上传的,是否有独立的文件服务器。
本地存储信息泄露
平常写代码的时候,我们经常会往localStorage或sessionStorage中存一些内容,如果一些敏感信息被存到这里,比如前端加密公钥、用户密码等关键信息,就很有可能导致信息泄露,给攻击者营造机会。
防范:
敏感信息不要保存到localStorage、sessionStorage中,如果涉及到一些必须保存的内容,请一定要加密处理。
代办
- 项目里有哪些敏感信息,在哪里存着。比如登录页面的密码加密,怎么处理的。
- 列举项目中的加密和解密方法。