PHP:如何检测外部访问者的直接请求?
我想检测/阻止/转发外部访客的直接请求。某些脚本只应显示在jQuery对话框中 我当前的代码:PHP:如何检测外部访问者的直接请求?,php,jquery,dialog,http-referer,Php,Jquery,Dialog,Http Referer,我想检测/阻止/转发外部访客的直接请求。某些脚本只应显示在jQuery对话框中 我当前的代码: <script> $(".dialog").click(function() { // some code for validation // ... $("#dialog").load(this.href).dialog(); }); </script> <a href="http://domain.de/path/to/form/"
<script>
$(".dialog").click(function() {
// some code for validation
// ...
$("#dialog").load(this.href).dialog();
});
</script>
<a href="http://domain.de/path/to/form/" class="dialog">Open me in a dialog</a>
如何检测$requester和$server?我不想阻止每个脚本或整个目录
提前谢谢 是的,您可以使用$\u SERVER['remote\u ADDR']检查请求发送方的IP地址的远程地址。这样做:
if($_SERVER['HTTP_REFERER']!=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"])
{
header ("Location: index.php");
}
if( $_SERVER['REMOTE_ADDR'] == $your_Server_IP_Address)
echo 'From same server';
else
echo 'from different server';
另一个可能的解决方案是使用:
- 显示表单时,在其中放置一个隐藏的输入字段,其中包含 随机值
- 同时,将该随机值存储到 与用户对应
- 提交表单时,检查隐藏字段是否具有相同的属性 值作为存储在会话中的值
注意:这个想法经常被用来帮助对抗CSRF——并集成到一些框架(例如Zend框架)的“表单”组件中。添加到@Dharman建议的内容中 jQuery在其所有ajax请求中添加一个名为
HTTP\u X\u REQUESTED\u的头,使用
,您只需在$\u服务器
全局数组中检查该头即可
例如:
if($_SERVER['HTTP_REFERER']!=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"])
{
// check if the request is ajax
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ){
// ajax content loading
}
header ("Location: index.php");
}
我根据外部要求提供了这些价值观: [HTTP_HOST]=>104.219.42.237 [HTTP\u REFERER]=>HTTP://someurl.com 因此,我的解决方案是:
if (strpos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) !== FALSE) {
echo 'same origin/request';
} else {
echo 'different origin/request';
}
以前的解决方案不起作用的原因
就我而言:
$\u服务器['HTTP\u REFERER']='HTTP://someurl.com'
当
$\u服务器[“HTTP\U主机”]不包含“HTTP”或“https”
所以
不匹配
另一个答案
if( $_SERVER['REMOTE_ADDR'] == $your_Server_IP_Address)
在localhost上不起作用用户的浏览器在两种情况下都请求表单,比较IP地址是无用的。REMOTE_ADDR表示请求发出的地址,如果站点用户与服务器不在同一本地主机上,则该地址将不同。因此,当用户的浏览器请求php文件时,他可以执行检查仪式。如果通过get request发布表单,则此操作将不起作用method@shawndreck: 谢谢你的通知!但这只是为了避免用户得到未设置样式的表单。
if($_SERVER['HTTP_REFERER']!=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"])
if( $_SERVER['REMOTE_ADDR'] == $your_Server_IP_Address)