【每天5分钟,了解一个知识点】
今天咱们来聊聊一种网络安全隐患——点击劫持攻击。
一、什么是点击劫持攻击?
想象一下,你正在网上愉快地浏览着某个网站,突然出现一个看似是这个网站的按钮或者链接,但实际上这是攻击者精心设置的陷阱。攻击者利用一种叫做透明或半透明 iframe 的技术,把目标网站嵌套在自己的网页当中。就好像在你的面前放了一块有部分透明的玻璃,玻璃后面是你本来要访问的网站,而玻璃上有一个假的按钮,让你误以为是原网站的操作按钮。一旦你点击了这个假按钮,就会触发原网站的一些操作,这时候攻击者就有可能盗取你的信息或者执行一些恶意的行为。
二、如何防止点击劫持攻击?
设置 X-Frame-Options 头
DENY:表示禁止所有的嵌套,就像在你的网站周围筑起了一堵高高的墙,谁也别想把你的网站嵌套进去。
SAMEORIGIN:只允许同域名的嵌套,也就是说只有和你的网站来自同一个“家族”的才能嵌套进来。
ALLOW-FROM uri:允许某个特定的网址嵌套,就像是给特定的“朋友”发放了通行证。
这就像是给你的网站设置了一个“防护盾”。通过设置 HTTP 响应头 X-Frame-Options,可以告诉浏览器是否允许在 iframe 中嵌套网页。这个头有三个可选值:
不过要注意哦,不是所有的浏览器都支持这个方法,所以我们还需要其他的办法来进行兼容。
JavaScript 防御
我们可以利用 JavaScript 来当一个“侦探”。通过检查 window.top 和 window.self 的地址,如果这两个地址不一致,那就说明当前网页被嵌套了。这时候我们可以把网页重定向到其他安全的地址,让攻击者的阴谋无法得逞。
CSP 头
Content-Security-Policy(CSP)头就像是一个严格的“保安”,能够限制网页内容是如何加载的,从而防止点击劫持攻击。具体来说,可以通过为 CSP 头添加 frame-ancestors 指令,来规定在哪些网址中允许自己的网页被嵌套。
尽量避免使用 iframe
iframe 就像是一个容易被攻击的“漏洞”,所以我们尽量不要使用它。如果实在必须要用,那我们可以对 iframe 的样式进行调整,比如设置背景颜色、透明度等,让 iframe 不那么透明,这样用户就能更容易地识别出这不是原网站的内容,从而减小被攻击的风险。
【关联阅读】
关注公众号,回复【Java面试】,获取更多面试资料




