我已经阅读了很多关于此的内容,但我仍然不明白。假设我有一个域,其表单仅供经过身份验证的用户对某种内容发表评论:
my_form.php
<form action="post_comment.php" method="post">
<textarea name="comment"></textarea>
<input type="hidden" name="csrf_token" value="<?php print $csrf_token; ?>" />
<input type="submit" value="Post" />
</form>
post_comment.php
<?php
if(!isset($_POST['csrf_token']) || !CSRFToken::validate($_POST['csrf_token'])){
print "Invalid CSRF-Token!";
exit;
}
[...]
?>
如果“csrf_token”令牌值未发送或无效,post_comment.php 将拒绝任何请求。因此,我们正在阻止攻击者使用我们的 post_comment.php。
但是如何防止攻击者获取 /my_form.php,从表单中读取 csrf_token 值并使用它 POST 到 post_comment.php?我错过了什么?