Ajax请求不对所有人开放

DMi*_*Min 4 ajax codeigniter-2

我使用CodeIgniter创建了一个webapp.有几个地方我在应用程序中使用ajax.

我想知道是否有一种方法可以阻止对ajax控制器的直接访问和查询,并且只允许处理来自页面的合法ajax请求.

谢谢.

Mik*_*rko 5

是的,你可以毫无问题地做到这一点.CodeIgniter输入类有一个名为is_ajax_request()的方法.只需在控制器操作开始时检查这一点.例如:

function ajax_save() {
    if ($this->input->is_ajax_request()) {
        //continue on as per usual
    } else {
        show_error("No direct access allowed");
        //or redirect to wherever you would like
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您有完全为ajax调用指定的控制器,则可以将该if语句放入function __construct()控制器的构造函数中.记得先调用parent :: __ constructor()!

编辑:对于"源自页面",您可能应该在ajax请求上进行身份验证+安全检查(可能通过会话,以便您不会访问数据库).因此,与您的webapp无关的流氓用户无论如何都不能手动发送ajax请求.希望这能回答你的问题.

  • 这只是检查HTTP标头中是否设置了"isjax"标志.任何人都可以为任何请求设置该标志.它仅用于决定返回的最佳数据格式.它不会提供任何安全性. (2认同)