首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP CSRF攻击

PHP CSRF攻击
EN

Stack Overflow用户
提问于 2013-05-12 05:42:01
回答 2查看 1.2K关注 0票数 2

我想知道这段代码是否足够强大,可以防止对PHP表单的CSRF攻击?

代码语言:javascript
复制
<?php
session_start();
session_regenerate_id(true);

if (isset($_POST['submit'])) {
if (isset($_SESSION['token']) && ($_POST['token'] == $_SESSION['token'])) {
}
}
$token = hash('sha256', uniqid(mt_rand(), true));
$_SESSION['token'] = $token;
?>

//FORM

<form method="POST" action="page.php">
<input type="hidden" name="token" value="<?php echo $token; ?>">
<input type="submit" name="submit">
</form>

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-12 08:05:23

如果受害者尚未查看您网站上的任何表单,则他的会话中还没有存储令牌。

如果攻击者向受害者呈现一个没有任何令牌字段的表单,则受害者发出的POST请求将通过CSRF检查,因为$_POST['token']$_SESSION['token']都将为空。(或者两者都是空字符串,这取决于PHP初始化未知变量的方式。)

在检查相等之前,还必须检查会话中是否存在令牌,如果这两个测试之一失败,则中止。

根据你的网站,用户没有看过表单的可能性很大,也可能是极端的边缘情况。通过首先检查令牌的存在,无论您的网站上有多少表单,都不会有CSRF攻击的可能性。

除了这个小问题,我看不到它有任何CSRF漏洞。这段代码看起来可以完成这项工作。

票数 2
EN

Stack Overflow用户

发布于 2013-05-12 05:49:16

对于我支持的产品,我会说“不”。您的随机数生成器基于rand(),这是可预测的。此外,随机数看起来非常短-它需要足够长,以便在会话有效期间不能被暴力强制-也不能破解许多活动会话的任何CSRF令牌。

看看OWASP page on CSRF,他们会给你很好的指导。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16501984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档