点击劫持(Clickjacking)是一种利用 iframe 或其他技术来隐藏一个网页或按钮,并诱使用户点击,以触发意外的操作或泄漏敏感信息的攻击方式。点击劫持入侵方式具有欺骗性和隐蔽性,因此预防难度较大。
以下是几种预防点击劫持的方法:
- X-Frame-Options HTTP 响应头
可以使用 X-Frame-Options 响应头,限制特定页面在 iframe 中打开。可以使用以下响应头:
SAMEORIGIN:允许页面在相同域名下的任何 iframe 中打开。
DENY:不允许页面在任何 iframe 中打开。
ALLOW-FROM uri:允许页面在指定来源的 iframe 中打开。
- JavaScript 防御脚本
可以使用 JavaScript 脚本来防止 iframe 的钓鱼攻击。该方法的实现原理是检查当前的页面是否在顶层窗口中运行,或者在特定的 frame 中运行。
- CSP(Content-Security-Policy)
CSP 是一种响应头,通过指定允许在页面中运行的可信源列表来限制页面使用的内容和资源。通过配置CSP,可以防止恶意攻击者插入恶意脚本的能力。不过在实际实现中,需要进行不少工作,包括了解承载应用程序的网络拓扑,掌握应用程序的功能,了解如何针对现有攻击使用 CSP。
- HTML5 中添加 Sandox 属性
在 HTML5 中,可以通过添加Sandox属性来设置同源策略。该属性防止 iframe 中的内容访问父窗口的 Cookies、localStorage 和其他数据,从而防止攻击者访问受害者的会话 ID 以及其他敏感信息。
需要注意的是,以上防御方法可能并不能完全防止点击劫持攻击,故建议在开发 Web 应用时应采取多种防护措施,以保障数据存在的安全性。