php – 仅接受来自特定页面的AJAX $_GET或$_POST请求
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 仅接受来自特定页面的AJAX $_GET或$_POST请求,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1513字,纯文字阅读大概需要3分钟。
内容图文
![php – 仅接受来自特定页面的AJAX $_GET或$_POST请求](/upload/InfoBanner/zyjiaocheng/736/965a7c5f24724aecae93a6cd14d97a91.jpg)
是否可以检查是否从特定页面提交了$_GET或$_POST值?
例如,page1提交的值中的ajax为page2.php?q = abc,而page2仅在从page1提交时接受q.
如果我直接浏览到page2.php?q = abc页面,除非我从page1提交了值,否则php不会运行.
有可能吗?
编辑1:
因为我可以访问page2并获得结果.不要提及会话,因为我可以验证会话以满足我的需求,提交给php的值是否有效.
我想要的是检查请求是否从特定页面发送.如果为true,则接受值并处理它,否则,重定向到主页或其他内容.
编辑2:
我的问题是,不仅是通过Ajax提交的值,还有直接访问,例如href =“page2.php?q = abc”.我想令牌将是最好的方法,查询部分将再次验证.
解决方法:
在处理AJAX时,您可以执行两项安全检查:
1)检查它是否通过AJAX发送的请求:
if ( !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' )
{
//AJAX Request Detected
}
2)散列令牌:
在持有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);
}
这是使用带有crypt()的blowfish算法来创建散列字符串.
你的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请求全部内容,希望文章能够帮你解决php – 仅接受来自特定页面的AJAX $_GET或$_POST请求所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。