【发布时间】:2017-09-03 06:22:06
【问题描述】:
只是想知道是否需要将散列的 PHPSESSID 发送到所有表单或操作脚本就足以保护 CSRF?我知道如果用户在同一个物理网络(firesheep)上,就可以获得这一点。示例:
http://site.com/deleteMessage.php?mid=22&token=MD5ed_PHPSESSID
忽略相同的网络问题 PHPSESSID:
1) Is known only to the user doing the action
2) Can not be guessed by an attacker crafting a malicious img or request (<img src="http://site.com/deleteMessage.php?mid=22&token=I_DONT_KNOW_IT_:( )
3) Can not be pulled on the same site assuming no XSS vulnerabilities exist.
4) Can easily be pulled by the legitimate user (Javascript fills the form or GET var in the link)
数字 3 让我担心,虽然我没有任何我知道的 XSS 漏洞,因为我 htmlentities($string,ENT_QUOTES)ed 一切,我不喜欢依赖假设。这是足够的 CSRF 保护还是有更好的方法?
【问题讨论】:
-
为了避免像 Firesheep 这样的攻击,你应该对任何你想要验证会话的东西强制使用 HTTPS。
-
@Lèse majesté 没错,但这与他的问题无关。也许您应该与 stackoverflow 谈谈他们对 https 的使用(或缺少)。
-
@Rook:这不是问题的答案(因此我发表了评论),但他确实特别提到了如果在不安全的网络上使用 Firesheep 捕获他的 CSRF 令牌的潜力。