HTML 和 PHP 中的反 CSRF 令牌

Anti-CSRF tokens in HTML and PHP

提问人:Javier Arambarri Calvo 提问时间:11/2/2023 更新时间:11/2/2023 访问量:29

问:

我正在尝试以这种 html 形式实现反 CSRF 令牌,该表单通过 POST 和 Javascript 提交给 PHP API,但在搜索漏洞时,它仍然没有尝试任何事情。

<?php session_start();
$_SESSION['token'] = bin2hex(random_bytes(24));
?>
<!DOCTYPE html>
...
<form name="entry" id="entryForm">
    <label for="EntryName" class="form-label">Nombre:</label>
    <input type="text" class="form-control mb-3" id="EntryName" name="name">
...
    <input type="hidden" name="token" value="<?php echo $_SESSION['token']?>">
    <button type="submit" id="sendButton" class="btn btn-primary">Añadir</button>
</form>

API 如下所示:

<?php
session_start();
$token = $_REQUEST['token'];
if ($token==$_SESSION['token']){
    $nombre = $_REQUEST['name'];
    $fecha_nacimiento = $_REQUEST['dob'];
    $signosolar = $_REQUEST['signosolar'];
    $signolunar = $_REQUEST['signolunar'];
    $retrogrado = $_REQUEST['retrogrado'];
...

}else{
    header($_SERVER['SERVER_PROTOCOL'] . ' 405 Method Not Allowed');
    exit;
}
PHP HTML CSRF 格式

评论

0赞 ADyson 11/2/2023
您是否测试过系统,它是否能够接受/拒绝有/没有正确令牌的请求?
1赞 ADyson 11/2/2023
searching for vulnerabilities...究竟是用什么方法?你得到的确切报告是什么?
0赞 Javier Arambarri Calvo 11/2/2023
我用正确的请求测试了系统,它可以工作。我正在使用 ZAP 来查找漏洞,并说:“缺少反 CSRF 令牌”
0赞 ADyson 11/2/2023
也许它会检查具有特定名称或类似名称的字段。希望这个工具有一些文档,你可以在其中确切地看到它搜索的内容,或者也许有人你可以询问如何使其合规。我们通常不能就 Stackoverflow 上的第三方工具提供建议,除非它们有公开文档。如果您可以将我们链接到任何文档,那也可能会有所帮助(但需要明确的是,我们的工作不是代表您阅读所有内容 - 我们希望直接链接到相关区域,除非这里的其他人已经知道在哪里查找)
1赞 CBroe 11/2/2023
zaproxy.org/docs/alerts/10202 指的是此测试使用的代码的 github.com/zaproxy/zap-extensions/blob/main/addOns/pscanrules/...,在其中您可以看到它扫描了“已知”的反 CSRF 令牌,其名称在第 #106 行确定,List<String> tokenNames = extAntiCSRF.getAntiCsrfTokenNames();

答: 暂无答案