我有一个网站,人们可以像这样投票:
http://mysite.com/vote/25
这将对项目25进行投票。我只想让已注册的用户可以使用此功能,并且仅当他们想要这样做时才可以使用。现在我知道有人在网站上忙碌时,有人给他们这样的链接:
http://mysite.com/vote/30
那么投票将成为他不希望这样做的地方。
我已经在OWASP网站上阅读了说明,但是我不太理解
这是CSRF的示例,如何防止这种情况发生?我能想到的最好的事情就是在链接中添加一些内容,例如哈希。但是,在所有链接的末尾放置一些内容将非常令人讨厌。有没有其他方法可以做到这一点。
有人可能会给我另一个例子,因为这个网站对我来说似乎很陌生。
如果满足以下条件,这可能成为CSRF的示例:
<img>
例如,如果我可以将此<img>标签注入stackoverflow的HTML源代码中 (并且我可以,因为允许一个人<img>在他的帖子中使用标签):
<img src="http://mysite.com/vote/30" />
您只需为该项目投票;-)
通常使用的解决方案是将寿命有限的令牌放置在URL中,并在提取URL时检查此令牌是否仍然有效。
基本思想是:
http://mysite.com/vote/30?token=AZERTYUHQNWGST
这里的想法是:
另外,请注意,用户离开您的网站后,其会话保持活动状态的时间越短,访问该不良网站时该会话仍然有效的风险就越小。
但是在这里,您必须在安全性和用户友好性之间进行选择。
另一个想法 (虽然不是很安全,但是对伙计们的帮助不会知道如何强制执行POST请求) 是仅在人们投票时才接受POST请求:
但是请注意,这并不是绝对安全的 :(可能是?) 可以使用一些Javascript强制/伪造POST请求。