是否可以检查是否从特定页面提交了这些$_GET或者$_POST值?
例如,有一个ajax在page1提交的价值page2.php?q=abc,而page2只接受q当它从提交page1.
如果我直接浏览到该页面page2.php?q=abc,php除非我提交了值,否则不会运行page1.
有可能吗?
编辑1:
因为我可以访问page2并获得结果.不要提及session,因为我可以验证session匹配我的需求,提交给php的值是否有效.
我想要的是检查请求是否从特定页面发送.如果为true,则接受值并处理它,否则,重定向到主页或其他内容.
编辑2:我的问题是,不仅是通过Ajax提交的值,还有直接访问,例如href="page2.php?q=abc".我想令牌将是最好的方法,查询部分将再次验证.
在处理AJAX时,您可以执行两项安全检查:
if ( !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' )
{
//AJAX Request Detected
}
Run Code Online (Sandbox Code Playgroud)
在持有AJAX请求的页面上,创建一个令牌:
session_start();
$hashed='';
$_SESSION['token'] = microtime();
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
$salt = '$2y$11$' . substr(md5(uniqid(mt_rand(), true)), 0, 22);
$hashed = crypt($_SESSION['token'], $salt);
}
Run Code Online (Sandbox Code Playgroud)
这是使用blowfish带有crypt()的算法来创建散列字符串.
你的AJAX函数就像:
$.ajax({
type: "POST",
url: 'page2.php',
data: {
action: '<?php echo $hashed;?>', //pasted the hashed string created in PHP
q: 'test'
},
success: function (data) {}
});
Run Code Online (Sandbox Code Playgroud)
无论您是想使用$_GET还是$_POST方法,都可以使用.
然后在接收AJAX请求的第二页上,您执行以下操作:
session_start();
if(crypt($_SESSION['token'], $_POST['action']) == $_POST['action']){
//Hashed string matches. Request has come from page1.
echo $_POST['q'];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3834 次 |
| 最近记录: |