1

ユーザーが自分のPOST/AJAXファイルに直接アクセスできないようにしようとしています。「nonce_key」と呼ぶランダムトークンを作成することにしました。このキーはを使用して作成され、をSESSION介して渡しPOSTます。SESSIONキーがと同じである場合、POST私はアクセスを許可します。問題は、それが機能しない場合があることです。

これが私のワークフローです。
ユーザーが値を変更すると、ajaxを介して「change_status.php」を呼び出すindex.phpを1つ選択します。

何らかの理由で、index.phpのキーセットはchange_status.phpSESSIONのキーと同じ値ではありません。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';
4

1 に答える 1

0

$_POSTにハッシュがあることを確認してください。require_once 'functions.php';そして、change_status.phpに必要はありません。そして、===を使用して、少ない場合は1つ作成できます。

于 2012-12-19T21:58:49.770 に答える