将$ _POST变量与令牌一起使用是什么意思?

时间:2012-07-12 22:31:42

标签: php xss

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

PDO & Sanitize Date/Remove HTML

我确信我的代码使用PDOStatement bindParam来阻止SQL注入,但我读了这篇评论(转述)

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

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

1 个答案:

答案 0 :(得分:0)

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

  1. 已发出令牌
  2. 令牌存储在会话中
  3. 简单实施:


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