2012-09-14 51 views
3

我正在编写后端以响应ajax查询。我正在使用Codeigniter,而我的控制器是由这些功能组成的。Ajax端点应该如何响应非ajax请求?

public function name_change() 
{ 
    if($this->input->is_ajax_request()) 
    { 
     //Grab the Inputs 
     //Do something 
     //Respond 
    } 
    else 
    { 

    }   
} 

我唯一的问题是我该如何处理它不是Ajax请求的情况?没有理由认为这些控制器函数应该被非Ajax请求访问。我能想到的选项是。

  • 发送无响应
  • 抛出了一个错误页面(我想我会用状态码200或403)
+1

首先问自己:“那又怎样?”如果没有安全措施被绕过,资金丢失或数据被写入,那么它可能无关紧要,如果它是一个AJAX连接或没有。 – Blazemonger

+2

注意:CodeIgnitor的is_ajax_request()方法只是检查HTTP头HTTP_X_REQUESTED_WITH是否指示它是通过xmlhttprequest发送的,因此很容易被欺骗......并且在开发期间您可能想要通过(REST?)端点来访问浏览器地址栏只是为了测试。例如要小心在这个“可疑”方法基础上有多少逻辑。 – scunliffe

+1

我自己经常想到这一点 - 我只是渲染一个自定义的404视图,但我想过用Apache来捕捉它,以减少CodeIgniter调用的数量,从而减少内存。我很想看到像这样的解决方案。 –

回答

5

的金科玉律是绝不相信用户的输入

所以不管数据来自ajax请求 - 或仅发送给函数 - 您的控制器应该假定它受到污染并进行全面验证,用户身份验证等。

Ther如果有人在没有ajax请求(有意或无意)的情况下结束了该控制器,那么它真的无关紧要 - 所以如果他们提交的数据是有效的,就让它通过。

如果没有 - 只要向客户发送一条有用的错误信息(特别是如果他们意外到达那里)。

+0

是的我正在验证输入,但我的想法是,如果它不是通过Ajax进来,它不是我的应用程序的预期行为。所以我应该忽略它,不要浪费处理输入的时间和资源。如果我抛出一个错误,我应该返回一个状态码? 200?读取http状态代码403的描述看起来就像是要返回的适当代码。 – gsueagle2008

+0

是的 - 403似乎是正确的 – Laurence