除非刷新,否则无法识别PHP会话变量

时间:2016-01-09 00:11:31

标签: php forms

我是PHP的新手,如果这是一个业余的错误,请道歉。我正在尝试为基本联系表单添加简单的CSRF检查。

我按照本网页上的8个跨网站请求伪造的说明进行操作:http://www.phpfreaks.com/tutorial/php-security

它在刷新html页面时传递安全性,但第一次没有。它第一次提供的错误是:“Undefined index:token”。所以我想这不是第一次不会将令牌写入Session?

非常感谢您提供的任何帮助。谢谢。

PHP设置在HTML页面的HEAD中调用的令牌,包括:

<?php
function generateFormToken() {
    session_start();
    $_SESSION['token'] = uniqid(md5(microtime()), true);
}
?>

表格(简化):

<?php generateFormToken(); ?>  
<form method="post" action="php/formsubmit.php">
   <fieldset>
      <!-- fields -->
      <input type="hidden" name="token" value="<?php echo $_SESSION['token'] ?>">
   </fieldset>
   <input type="submit" value="Submit" >
</form>

formsubmit.php:

<?php 
session_start();
$isToken = $_SESSION['token'];

if ($_POST['token'] !== $isToken) {
    die('Security failed');
} else {

... run validation etc.

0 个答案:

没有答案