【问题标题】:Prevent returns from ajax.php防止从 ajax.php 返回
【发布时间】:2014-03-26 07:37:42
【问题描述】:

在我的 ajax.php 中有:

   if(urlvar(2) == 'uploadphoto'){
       do... echo '<img... />';
   }

但是这个函数只被一个 jquery 调用,返回一个特定的 div。

但是如果我访问URL:[http://localhost/projectname/ajax/uploadphoto],这个页面返回的函数结果有一些错误(因为参数是由jquery发送的)

如果在没有 jquery 的情况下访问文件,我如何防止返回?

*已解决:

在没有jquery方法无法访问的函数中使用该函数。

    function isHttpRequest()
    {
        if( @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
            return true; //acessed by jquery
        }
        exit; // or return false -> from access the file without method
    }

【问题讨论】:

  • 您无法可靠地检测 AJAX 调用。 HTTP_X 标头通常存在,但 AJAX 请求是类似于 ANY OTHER 的 HTTP 请求。如果有人想在他们的请求中伪造该标头,服务器端代码是不可能检测到的。
  • 您还应该考虑返回 404 而不是空响应。

标签: php jquery ajax return


【解决方案1】:

修改您的 ajax.php 以检查请求是否为 ajax 调用。

if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) 
   || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest') {
   // not an ajax request
} else {
    if(urlvar(2) == 'uploadphoto'){
      do... echo '<img... />';
    }
}

或者只检查ajax.php的开头

【讨论】:

  • user3280126,是的!我这样做了: function isHttpRequest() { if( @$_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { return true; //被jquery访问 } exit; // 或返回 false -> 从无方法访问文件 } 谢谢,我希望这对某人有帮助!
  • 很高兴听到它有帮助!
【解决方案2】:

我个人以各种形式创建一个哈希 我检查该哈希是否正确,这也可以防止人们从其他服务器提交表单,这可能对您的情况有所帮助 http://code.tutsplus.com/tutorials/secure-your-forms-with-form-keys--net-4753 如果哈希是错误的,那么它显然不是来自它应该来自的形式

【讨论】:

    【解决方案3】:

    当您通过 jQuery 访问该文件时,您会编写如下内容:

    method: "get"method:"post"(我认为,如果没有指定,默认是 GET)

    所以,在你的 ajax.php 开头 - 放:

    if(!$_GET){
    
         //[...the ajax.php code, here ...]
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-17
      • 2019-06-14
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多