我读到了一些PHP PDO数据净化的文章,然后看到了这篇文章:
PDO&消毒日期/删除HTML
我相信我的代码使用PDOStatement bindParam来防止SQL注入,但是我读到了的评论(转述)
"将$_POST与代币一起使用将有助于避免CSRF"
我很好奇,代币是什么意思,我该如何实现它?
令牌可能是某种哈希,您可以将其存储在会话中,也可以通过表单发送。在验证表单数据之前,请检查是否:
- 已发送令牌,并且
- 令牌存储在会话中
简单实现:
<?php
session_start();
if(!isset($_SESSION['token']))
{
$_SESSION['token']=uniqid();
}
?>
<form method="post">
<input name="token" type="hidden" value="<?php echo $_SESSION['token'];?>">
<input name="something" value="some data to send">
<input type="submit">
</form>
<?php
if(isset($_POST['something']))
{
if(!isset($_POST['token']) || $_POST['token']!==$_SESSION['token'])
{
echo 'missing a valid token';
}
else
{
echo 'got a valid token, I will use the data';
}
}
?>