我试图阻止用户直接访问我的POST/AJAX
文件。我决定创建一个随机令牌,我称之为“nonce_key”。此密钥是使用SESSION
创建的,然后通过POST
传递。如果SESSION
密钥与POST
相同,则允许访问。问题是有时它不起作用。
这是我的工作流程:
我在index.php上有一个select,当用户更改其值时,它通过ajax调用“change_status.php”。
由于某种原因,index.php上设置的SESSION
键与change_status.php上的SESSION
键的值不同。
我的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';
答案 0 :(得分:0)
检查$ _POST是否有哈希值。你在change_status.php的require_once 'functions.php';
中没有必要。你可以使用===