我试图阻止用户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';