CSRF令牌生成 - PHP

时间:2014-01-03 13:06:01

标签: php forms

好的,所以我试图通过在表单中​​添加CSRF令牌来保护我的应用程序免受CRSF攻击......我想知道我的实现是否会被认为是安全的。

当用户进行身份验证(登录)时,会在其会话中添加CSRF令牌,

function setCSRF(){
  $randomValue = getRandom(); //Generated with dev/urandom/
  $_SESSION['CSRFtoken'] = $randomValue;
}

然后将此值作为隐藏字段添加到会话表单中,在提交表单时,表单将使用会话值检查表单值。如果它们相同然后允许处理表单,则表单还会重新生成一个新的唯一CSRFToken,以便通过调用setCSRF

来不使用相同的CSRFToken

这会安全吗?

1 个答案:

答案 0 :(得分:2)

,这应该可行,因为攻击者无法猜测随机值将其置于伪造形式。

但是认为csrf攻击的受害者是登录用户,当然$_SESSION['CSRFtoken']是为他设置的,如果攻击者可以访问登录用户的真实形式并获得令牌(假设场景),用户将受到轻松攻击,因为只要用户登录,令牌就会相同(这可能是很长时间)。

您最好在用户将提交的每个表单中生成一个随机字符串,并将其设置为会话并将其放入隐藏的输入值。并检查提交的值是否与session匹配。依此类推。

您可以阅读这些作为参考:

Cross-Site Request Forgery (CSRF)

Preventing CSRF and XSRF Attacks

what are csrf attacks