我有一个网站,人们可以这样投票:
http://mysite.com/vote/25
Run Code Online (Sandbox Code Playgroud)
这将对项目25进行投票.我想只为注册用户提供此选项,并且只有在他们想要这样做时才可以.现在我知道有人在网站上忙碌,有人给他们这样的链接:
http://mysite.com/vote/30
Run Code Online (Sandbox Code Playgroud)
然后投票将是他在项目上的位置,而他不想这样做.
这是CSRF的一个例子,我该如何防止这种情况发生.我能想到的最好的事情就是像哈希一样在链接中添加一些内容.但是,在所有链接的末尾添加一些内容会非常恼人.没有其他方法可以做到这一点.
另一件事可能有人可能会给我一些其他的例子,因为该网站对我来说似乎是相当的神话.
Pas*_*TIN 92
如果符合以下条件,这可能成为CSRF的一个例
<img>例如通过标记):伪造
例如,如果我可以<img>在stackoverflow的HTML源代码中注入此标记(我可以,因为stackoverflow允许<img>在他的帖子中使用标记):
<img src="http://mysite.com/vote/30" />
Run Code Online (Sandbox Code Playgroud)
你只会投票支持该项目;-)
通常使用的解决方案是在URL中放置生命周期有限的令牌,并在获取URL时检查此令牌是否仍然有效.
基本想法是:
http://mysite.com/vote/30?token=AZERTYUHQNWGST这个想法是:
此外,请注意,用户会话离开您的网站后保持活动时间越短,访问不良网站时仍然有效的风险就越小.
但在这里,您必须在安全性和用户友好性之间做出选择......
另一个想法(那不是非常安全,但有助于反对家伙不知道如何强制POST请求),只会在人们投票时接受POST请求:
但请注意,这不是完全安全的:它可能(可能?)可能强制/伪造一个POST请求,有点Javascript.
小智 5
OWASP有一个用于PHP的CSRFGuard,以及我很久以前为XMB写的ESAPI for PHP - > UltimaBB - > GaiaBB.
似乎其他一些人已经清理了该代码并允许更强的令牌:
https://www.owasp.org/index.php/PHP_CSRF_Guard
谢谢,安德鲁
| 归档时间: |
|
| 查看次数: |
77605 次 |
| 最近记录: |