是否有任何选项可以检测我的页面是否是从点击劫持页面加载的?
我的意思是,如果页面是点击劫持的来源(我已经设置了 X-FRAME-OPTIONS 标题)并不重要,问题是用户是否从点击劫持页面浏览到我的页面。
我找到的第一个解决方案是控制 HTTP-REFERER,但这是一项艰苦的工作,因为我无法控制所有流量。
对不起我的英语不好。
是否有任何选项可以检测我的页面是否是从点击劫持页面加载的?
我的意思是,如果页面是点击劫持的来源(我已经设置了 X-FRAME-OPTIONS 标题)并不重要,问题是用户是否从点击劫持页面浏览到我的页面。
我找到的第一个解决方案是控制 HTTP-REFERER,但这是一项艰苦的工作,因为我无法控制所有流量。
对不起我的英语不好。
除非您打算让外部站点能够 POST 到您的站点,否则如果您有来自另一台服务器的 POST 请求,则可能是点击劫持:
if($_SERVER['REQUEST_METHOD'] == 'POST' && !strstr($_SERVER['HTTP_REFERER'], 'mydomain.com') {
//probably clickjacking
}
如果您有使用 GET 的页面容易受到点击劫持,您可以在每页的基础上添加对 HTTP_REFERER 的检查,或者将页面更改为使用 POST(这通常最适合进行更新的内容)。
您的选择之一是将您的网站标题:“X-Frames-Options”设置为“SAMEORIGIN”
除非原始页面在您的域中,否则这应该可以防止您的网站被加载到 iframe 和框架中。请注意,这仅适用于某些浏览器,例如,我认为这不适用于 IE7 及以下版本,我认为它不适用于 chrome。这至少会稍微减少你的攻击面。
阿帕奇:
标头始终附加 X-Frame-Options SAMEORIGIN
编辑:现在我理解得更好了......
也许你可以使用类似这样的代码:
if (window.top !== window.self) {
// do something here
}
这是检测页面是否加载到 iframe 中的一种方法。您可以在此处设置 cookie,在此处调用 WebService,或使用 window.location.href 进行导航。
这是点击劫持的“框架破坏”防御示例: Clickjacking Defense
-KB