2013-06-05 40 views
2

我创建了一个网站(纯粹的爱好)。我基本上做的是使用jQuery在后台调用所有ajax。是的,从SQL注入是安全的,所以没有造成任何损害,但我不希望用户检查到firebug/developer工具,并尝试使用URI并在URL工具栏中手动输入它并获取结果。我将如何去防止这种情况发生?PHP - 重定向REQUEST_URI - 正确的方法?

例,用户输入的网址框: www.something.com/datapull.php?get=Data &人=肖恩

我有类似:

if(strpos($_SERVER['REQUEST_URI'],'/datapull.php') !== false) { header('Location: /'); } 

但是当我确实,我的网络陷入了无限循环。我基本上希望网络在任何时候:www.something.com

我该如何去保持它在没有用户手动输入的地址?

+0

我想你应该用绝对路径代替相对 – Fabio

+0

小心解释多一点? – sgkdnay

+0

类似'header('Location:http://www.something.com')' – Fabio

回答

2

要阐述我的意见,你可以试试这个..

在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> 

data.php

<?php 

    print_r($_SERVER); 

如果按原样运行,您将看到$_SERVER的内容,并应该看到HTTP_REFERER。

现在我们需要做的就是向ajax请求页面添加一个条件,在这种情况下是data.php,如果没有设置,或者它不是来自我们域的请求,则退出。

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

希望你可以用它来让你开始。

+0

完美,正是我所需要的。无法想象我能在何处/如何做到这一点。一旦我成功实现了这个或失败的LOL,将回到雅...再次感谢! – sgkdnay

+0

没问题,祝你好运:) – Dale

0

我基本上做的是在后台使用 jquery调用所有ajax。是的,它从SQL注入是安全的,所以没有造成伤害

对不起,如果我说它不能帮助防止SQL注入。

不过,我不希望用户检查到萤火/开发者工具和 尝试使用URI和手动输入的URL工具条中,并得到 结果。

如果Web浏览器无法访问链接,那么您的AJAX也是如此。