gpt4 book ai didi

php - 只接受来自特定页面的 AJAX $_GET 或 $_POST 请求

转载 作者:可可西里 更新时间:2023-11-01 00:20:59 27 4
gpt4 key购买 nike

是否可以检查 $_GET$_POST 值是从特定页面提交的?

比如page1中有一个ajax提交值给page2.php?q=abc,而page2 只接受从 page1 提交的 q

如果我直接浏览到页面 page2.php?q=abcphp 将不会运行,除非我从 page1 提交值>.

这有可能吗?

编辑 1:

因为我可以访问 page2 并获得结果。不要提及 session,因为我可以验证 session 是否符合我的需要,以及提交给 php 的值是否有效。

我想要的是检查请求是否从特定页面发送。如果为真,则接受值并处理它,否则,重定向到主页或其他内容。

编辑 2:我的问题是,不仅可以通过 Ajax 提交值,还可以直接访问,例如 href="page2.php?q=abc"。我想 token 将是最好的方式,查询部分将再次验证。

最佳答案

在处理 AJAX 时,您可以执行两种安全检查:

1) 检查它是否通过 AJAX 发送的请求:

if ( !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' )
{
//AJAX Request Detected
}

2) 哈希标记:

在持有 AJAX 请求的页面上,创建一个 token :

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);
}

这是使用 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) {}
});

由您决定是要使用 $_GET 还是 $_POST 方法。

然后在接收 AJAX 请求的第二个页面上,您执行:

session_start();
if(crypt($_SESSION['token'], $_POST['action']) == $_POST['action']){
//Hashed string matches. Request has come from page1.
echo $_POST['q'];
}

关于php - 只接受来自特定页面的 AJAX $_GET 或 $_POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23533003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com