0

点击劫持是指人们诱骗用户点击他们不应该点击的按钮,从而使他们执行恶意操作。

我正在开发一种产品,作为商家的一种选择,它提供了一个 iFrame 组件,可以嵌入到网站中进行支付。已登录的用户将在 iframe 中看到一个按钮,他们可以单击该按钮来执行重要操作。仅当点击真正属于他们时才应调用此操作。

我使用此代码来防止点击劫持:

if (top == self ||  parent != top ||  document.location.hostname != document.domain) {  top.location.replace("https:\/\/www.mysite.com\/?404");}

有人可以闯入我的代码吗?

注意:我不想使用 x-frame-option

谢谢

4

1 回答 1

0

在 iframe 中,您无法真正控制来自父级的点击,如果他们在 iframe 内单击但另一个事件正在观看它,则您无法真正阻止它来自不同的域。

但一切都没有丢失,iframe 本身无法阻止它,但它可以用这样的东西包裹起来。这是假设 jquery,可能最好为您的应用程序转换为本机版本,以便展示我将使用 jQuery 的示例。

<div id="i_wrap"><iframe src="SRC"></iframe></div>
<script>
$('#i_wrap').on('click',function(event){
event.stopPropagation();
});
</script>

当然这不是万灵药,还是有办法解决的。您还可以使用此处阅读的新 HTML 5 跨文档消息传递的一部分来进行一些验证,并可能在不安全的站点上警告用户(如果您的 iframe 没有收到消息,那么您将不显示任何按钮)。

尽管我在跨文档消息传递方法方面没有经验,而且我确信它们可能不允许不同的域(尽管在一定程度上可能有解决方法)。

尽管这个问题并不完全清楚,而且我可能无法完全理解它,但如果您用更多细节更新您的问题,我将更新我的答案以适应。

于 2013-08-12T21:39:15.787 回答