当前位置: 首页 > 知识库问答 >
问题:

使用CSRF codeigniter和ajax登录

上官琦
2023-03-14

我将使用CSRF codeigniter和ajax进行安全登录。但是我有一个问题,我的语法。

这是我的表格:

<?php echo form_open('admin/info_type_user_log/log_admin',array('id' => 'form-loginx'));?>
        <div class="input-group" style="margin-bottom:10px;">
            <span class="input-group-addon lab"><span class="glyphicon glyphicon-user"></span></span>
            <input type="text" name="username" id="username" class="form-control inp usernamex" placeholder="username" required>
        </div>
        <div class="input-group" style="margin-bottom:10px;">
            <span class="input-group-addon lab"><span class="glyphicon glyphicon-lock"></span></span>
            <input type="password" name="password" id="password" class="form-control inp passwordx" placeholder="password" required>
        </div>
        <button type="submit" name="submit" class="submit_login btn btn-md btn-primary">Login</button>
        <label><input type="checkbox" class="lihat"> lihat password</label>
        <?php echo form_close();?>

这是我的javascript:

$('#form-loginx').submit(function(e){ // Create `click` event function for login
        e.preventDefault();
        var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>',
            csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>';
        var me = $(this);
        $('.submit_login').html('Loading ...'); //Loading button text 

        $.ajax({ // Send the credential values to another checker.php using Ajax in POST menthod
            url  : me.attr('action'),
            type : 'POST',
            data : {csrfName:csrfHash,me.serialize},
            dataType : 'json',
        success: function(response){ // Get the result and asign to each cases
            $('.submit_login').html('Login'); //Loading button text 
            if(response == true){
                $(".alert-sukses").html("Sedang mengarahkan..").slideToggle("fast").delay(3000).slideToggle("fast");
                window.location.href = 'admin/info_type_user_log';
            }else {
                gagal();
            }
        }
        });
    });

和我的控制器:

function log_admin(){       
    $reponse = array('success' => true);
    $user = $this->security->xss_clean($this->input->post('username'));
    $pass = $this->security->xss_clean($this->input->post('password'));

     $reponse = array(
            'csrfName' => $this->security->get_csrf_token_name(),
            'csrfHash' => $this->security->get_csrf_hash()
            );

    $cek = $this->model_admst->valid_log($user, md5($pass));

    if($cek->num_rows() > 0){

        foreach($cek->result() as $data){
            $sess_data['id']            = $data->id;
            $sess_data['nama_depan']    = $data->nama_depan;
            $sess_data['nama_belakang'] = $data->nama_belakang;
            $sess_data['email']         = $data->email;
            $sess_data['username']      = $data->username;
            $sess_data['gb_user']       = $data->gb_user;
            $sess_data['last_login']    = $data->last_login;
            $sess_data['log_access']    = "TRUE_OK_1";

            $this->session->set_userdata($sess_data);
            $this->model_admst->updateLastlogin($data->id);
            log_helper("login", "akses login sukses");
        }

        $reponse['success'] = true;
    }else{
        $reponse['success'] = false;
    }
    echo json_encode($reponse);
 }

我的模型是:

function valid_log($user,$pass){
    $this->db->where('username', $user);
    $this->db->where('password', $pass);
    $this->db->where('status', 'aktif');
    $this->db->where('level', 'admjosslog21');
    $this->db->where('akses', '1');
    return $this->db->get('user');
}

共有3个答案

焦兴为
2023-03-14

Javascript中的PHP是一个丑陋的解决方案,只需将您的脚本列入白名单,如下所示:

$config['csrf_exclude_uris'] = array(
'admin/log_admin', '...', '...',
);
汪翰墨
2023-03-14

在ajax中传递标记名散列键,然后通过post in控制器获取它

  data : {csrfName:csrfName,csrfHash:csrfHash,me.serialize},

内部控制器

 $reponse = array(
        'csrfName' => $this->input->post('csrfName'),
        'csrfHash' => $this->input->post('csrfHash')
        );
董庆
2023-03-14

尝试此代码

$("#state1").change(function () {
            $.ajax({
                url: "<?php echo base_url('admin/get_districtsfromstates'); ?>",
                type: "POST",
                data: {id: $(this).val(),'<?php echo $this->security->get_csrf_token_name(); ?>': '<?php echo $this->security->get_csrf_hash(); ?>'},
                success: function (data)
                {
                    $("#district1").html(data);
                }
            });
        });
 类似资料:
  • 我尝试使用Laravel5.2Auth使用Ajax创建登录表单。 Laravel默认登录功能: /登录返回索引页作为响应。我需要关于错误消息或成功消息的json响应。据说改变Laravel的核心功能是不可取的。那我怎么才能拿到呢?

  • 问题内容: 我正在忙于开发一个网站,该网站的右上角有一个登录框。我希望用户能够在不刷新的情况下登录同一页面。 好的,我已经开始工作了,但是我仍在努力登录后的过程,如下所示: (HTML) (PHP) (我的jQuery) (isLoggedIn.php) (isNotLoggedIn.php) 登录过程可以正常工作,但是注销混乱。当我单击isLoggedIn.php中的Logout链接时,它注销了

  • 您好,我知道这个主题以前就有人提出过,但是没有人像我这样做过AJAX操作标准。我是AJAX和jQuery的新手 我这里的问题是,我不确定js函数“ajaxPostCallManip()”是否达到“login.php”!! 我发了几个警报,但没有出现...请帮帮忙 超文本标记语言代码 js代码 PHP代码

  • 问题内容: 我即将在我的网站中包含一个登录系统,但是我认为使用ajax发送a并从名为login.php的外部php脚本接收确认并以与退出登录相同的方式对安全性不是一个好主意另一个logout.php任何建议 问题答案: 我想不出使用Ajax处理登录和注销的任何安全隐患。在ajax和服务器端层之间来回发送什么内容(只要不从服务器向客户端发送纯文本密码)都没有关系,因为会话将是保持授权状态的会话。 但

  • 我有一个在Java设计的应用程序,我愿意使用用户名和密码登录AWS。我知道如何使用这里定义的默认安全凭据,但它对我的应用程序需求无效。有没有办法使用用户名和密码使用JavaAPI登录我的AWS帐户?

  • 问题内容: 通过ajax提交登录表单时,我只是遇到一些问题,我主要是PHP开发人员,在PHP中我并不经常使用Jquery + Ajax。 目前,如果我在提交表单后检查firebug POST数据,它的确会获取已添加到表单的用户名和密码,但是无论是否添加了错误的用户名和密码,或者是否添加了错误的页面,页面都只会重新加载它们是正确的,并且没有创建会话。 形式如下: 这是Ajax / Jquery: 这