1

我试图阻止用户POST/AJAX直接访问我的文件。我决定创建一个随机令牌,我称之为“nonce_key”。此密钥是使用 a 创建的SESSION,然后我通过POST. 如果SESSION密钥与 相同,POST则我允许访问。问题是有时它不起作用。

这是我的工作流程:
我在 index.php 上有一个选择,当用户更改其值时,它通过 ajax 调用“change_status.php”。

由于某种原因SESSION,index.php 上设置的SESSION键值与 change_status.php 上的键值不同。

我的functions.php文件中有以下代码

function nonce_key()
{
    return hash('crc32b', time());
}

然后在我的索引中

session_start();
require_once 'functions.php';

$_SESSION['nonce_key'] = nonce_key();

echo '
<script  type="text/javascript"> 
$"#change_status").bind("change",function() {
var form_data = {
nonce: "'.$_SESSION['nonce_key'].'",
id: $("#id").val(),
};

$.ajax({

type: "POST",
url: "change_status.php",
data: form_data,
success: function(result) {
  $("#message").slideDown("slow").html(result);
  }
 });
});
</script>'
;

最后在我的 change_status.php 文件中

session_start();
require_once 'functions.php';
if(isset($_SESSION['nonce_key']) && isset($_POST['nonce']))
{
   if($_SESSION['nonce_key'] == $_POST['nonce'])
   {
     change_app_status($_POST['id']);
   } else echo 'Nonce Invalid';
} else echo 'Not Allowed';
4

1 回答 1

0

检查 $_POST 是否有哈希。而且你不需要require_once 'functions.php';在change_status.php中。如果少的话,你可以使用 ===

于 2012-12-19T21:58:49.770 回答