好的,所以我试图通过在表单中添加CSRF令牌来保护我的应用程序免受CRSF攻击......我想知道我的实现是否会被认为是安全的。
当用户进行身份验证(登录)时,会在其会话中添加CSRF令牌,
function setCSRF(){
$randomValue = getRandom(); //Generated with dev/urandom/
$_SESSION['CSRFtoken'] = $randomValue;
}
然后将此值作为隐藏字段添加到会话表单中,在提交表单时,表单将使用会话值检查表单值。如果它们相同然后允许处理表单,则表单还会重新生成一个新的唯一CSRFToken,以便通过调用setCSRF
这会安全吗?
答案 0 :(得分:2)
是,这应该可行,因为攻击者无法猜测随机值将其置于伪造形式。
但是认为csrf
攻击的受害者是登录用户,当然$_SESSION['CSRFtoken']
是为他设置的,如果攻击者可以访问登录用户的真实形式并获得令牌(假设场景),用户将受到轻松攻击,因为只要用户登录,令牌就会相同(这可能是很长时间)。
您最好在用户将提交的每个表单中生成一个随机字符串,并将其设置为会话并将其放入隐藏的输入值。并检查提交的值是否与session匹配。依此类推。
您可以阅读这些作为参考:
Cross-Site Request Forgery (CSRF)