繁体   English   中英

Codeigniter Ajax请求控制器 安全问题?

[英]Codeigniter Ajax request to controller | Security Issues?

几个月前,我偶然发现了这篇文章该文章是关于对控制器使用jquery ajax调用而起草的,此后一直使用这种方法来编写本来会很麻烦的案例。

通过进一步的研究,我发现有多种情况,人们说通过这种方式通过视图访问控制器是“非常规的”,并且破坏了MVC模式。 这是真的? 是否建议不要对ajax调用使用此方法?

如果该方法可行(在这一点上我希望是因为我围绕它构建了当前应用程序的很大一部分),那么该怎么做才能保护该应用程序? 我在对文章的评论中注意到有人提到过“利用$ _SERVER变量”吗?

或多或少都在寻找有关处理这种情况的建议。 无论是事实还是观点,我们将不胜感激!

本文中场景的一个示例是对控制器的以下调用(由于未发现与该帖子有关的模型,我省略了该模型):

查看代码

<head>
<script type="text/javascript">
    $("#rfUsername").focusout(function() {
        $username = $("#rfUsername").val();
        if($username != ''){
            $.ajax({
                type: "POST",
                dataType:"json",
                url: BaseURL + "profile/checkUsername",
                data: "username=" + $username,
                success: function(data){
                    usernameValid(data.isGood, data.message);
                }
            });
        } else {
            clearUsernameValidStatus();
        }
    });
</script>
</head>

控制器代码

function checkUsername(){
    $username = $this->input->post('username');

    $this->load->model('user_model');

    if($this->user_model->checkUsernameValidFormat($username) === false){
        $isGood = false;
        $message = 'Username must be at least 5 characters';
    } else {
        if($this->user_model->checkUsernameExists($username)){
            $isGood = false;
            $message = 'Sorry, that username is already taken';
        } else {
            $isGood = true;
            $message = 'Username is acceptable';
        }
    }

    echo json_encode(array('isGood' => $isGood, 'message' => $message));
}

今天早上醒来,对我自己说:“嘿,为什么不使用会话变量来确定用户是否确实在服务器上,然后再执行控制器中的代码?” 我相信这将解决我的问题。 如果我发现此解决方案有问题,将回发。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM