我创建了一个网站(纯粹的爱好)。我基本上所做的就是使用 jquery 在后台调用所有 ajax。是的,它不会受到 SQL 注入(inject)的影响,因此不会造成任何损害,但是我不希望用户检查 firebug/开发人员工具并尝试使用 URI 并在 URL 工具栏中手动输入它并获得结果。我该如何防止这种情况发生?
示例,用户在 URL 框中输入: www.something.com/datapull.php?get=Data&Person=Sean
我有类似的东西:
if(strpos($_SERVER['REQUEST_URI'],'/datapull.php') !== false) { header('Location: /'); }
但是当我这样做时,我的网络就会陷入无限循环。我基本上希望网络始终处于:www.something.com
如何在无需用户手动输入的情况下将其保留在该地址?
最佳答案
要详细说明我的评论,您可以尝试这个..
在 ajax 请求文件中,您可以检查 $_SERVER['HTTP_REFERER']
是否已设置,并包含您自己的域名。
这是一个简单的例子..
index.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Ajax Test</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
</head>
<body>
<div class="ajax_receiver">
</div>
<script>
$('.ajax_receiver').load('data.php');
</script>
</body>
</html>
数据.php
<?php
print_r($_SERVER);
如果按原样运行,您将看到 $_SERVER
的内容,并且应该看到 HTTP_REFERER。
我们现在需要做的就是向 ajax 请求页面(在本例中为 data.php)添加一个条件,如果未设置该条件,或者不是来 self 们的域的请求,则退出。
data.php(已更新)
<?php
if ( ! isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], $_SERVER['SERVER_NAME']) === false)
{
exit;
// or take whatever exit action you want here
}
print_r($_SERVER);
希望您可以使用它来入门。
关于PHP - 重定向 REQUEST_URI - 正确的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16932708/