一尘不染

Ajax请求未向所有人开放

ajax

我已经使用CodeIgniter创建了一个webapp。我在应用程序中的几个地方都使用了ajax。

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

谢谢。


阅读 223

收藏
2020-07-26

共1个答案

一尘不染

是的,您可以毫无问题地做到这一点。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
    }
}

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

编辑:至于“从页面开始”,您可能应该对ajax请求进行身份验证+安全检查(可能通过会话进行操作,这样您就不会访问数据库了)。因此,与您的Web应用程序无关的流氓用户无论如何都不应该手动发送ajax请求。希望这能回答您的问题。

2020-07-26