有人把这段代码放到了他的网站上:
<iframe name="frame" src="" frameborder="0" width="1" height="1" allowfullscreen style="width:1;height:1;"></iframe>
<form name="form" method="POST" action="http://mysite.com/vote.php" target="frame">
<input type="hidden" name="vote" value="1" />
<input type="hidden" name="id" value="1337" />
</form>
<script type="text/javascript">
document.forms.form.submit();
</script>
用这一小段代码,他欺骗我所有的用户投票给他的帖子(1337)。
我怎样才能阻止这一切?什么好主意吗?
我试过下面的(.htaccess),但它不能阻止它:
# DISABLE IFRAME
Header set X-Frame-Options DENY
Header always append X-Frame-Options SAMEORIGIN
我在这里假设了两件事:
-
您已将
Header
条目放置在<IfModule mod_headers.c>
(或其变体)中。
无论我的假设是否正确,让我们来解决这个问题:
-
确保实际的头被发送到浏览器-你没有在你的问题中任何地方声明你已经测试过这个;
-
试试这个附加头:
Header set X-XSS-Protection "1; mode=block"
; -
删除
<IfModule ...>
部分,看看Apache是否失败(或给出警告)通知模块未加载; -
您不想要使用
Header append ...
,因为这会附加您想要的值(到任何可能存在的条目),谁知道浏览器将如何解释; -
也许可以试试这个:
Header unset X-Frame-Options DENY Header set X-Frame-Options DENY
一个好的方法是在实际表单中添加一个及时更改的验证密钥,并在处理新条目时检查该密钥。
与检查http引用器一起,这几乎是无懈可击的。
简单的解决方案:另一个很好的选择是简单地检查cookies。在表单页面上设置cookie,并在提交页面上检查。
好运