1

我正在阅读一些 PHP PDO 数据清理,并看到这篇文章:

PDO 和清理日期/删除 HTML

我确信我的代码使用 PDOStatement bindParam 来防止 SQL 注入,但是我阅读了此评论(释义)

'使用带有令牌的 $_POST 将有助于避免 CSRF'

我很好奇,令牌是什么意思,我如何实现它?

4

1 回答 1

0

令牌可能是一些哈希,您将其存储在会话中并通过表单发送。在验证表单数据之前,您检查是否:

  1. 已发送令牌并且
  2. 令牌存储在会话中

一个简单的实现:


<?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';
    }
  }
?>

于 2012-07-12T22:39:56.257 回答