CSRF разрешает броски 403 (запрещено) в CodeIgniter - PullRequest
0 голосов
/ 29 апреля 2020

Итак, я планировал внедрить CSRF на своем веб-сайте и установить то, что нужно, что, я думаю, я установил правильно, но все еще возникают проблемы с ajax отправкой формы.

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = FALSE;
$config['csrf_exclude_uris'] = array();

Это то, что у меня есть в моей конфигурации , где я установил $config['csrf_regenerate'] = FALSE;, чтобы предотвратить регенерацию при каждом представлении (на основе этого обсуждения Ajax CSRF 403 запрещенный кодигенитель ).

И моя форма, вместо использования html тег формы, я использую form_open() и form_close().

Ajax отправить форму:

$('#formData').on('submit', function(e){
    e.preventDefault();
    var formData = new FormData($(this)[0]);

    $.ajax({
        type: 'post',
        cache : false,
        processData: false,
        dataType: 'json',
        url: 'example.com.sg/login/verify',
        data: formData,
        success: function (res) {
            if(res.status == true){
                window.location.href = res.redirect;
            }
        },
        error: function(err){
            console.log(err.responseText)
        }
    });
})

PHP функция

public function verify(){
    $this->form_validation
        ->set_rules('email', 'Email', 'trim|required|valid_email')
        ->set_rules('password', 'Password', 'trim|required');

    if($this->form_validation->run() == true){
        // do email and password verification
        echo json_encode([ 'status' => true, 'redirect' => base_url('dashboard') ]);
    } else {
        $this->returnFormError($this->form_validation->error_array());
    }
}

Если я изменю ajax введите get, это работает, но не post. Если вы просматриваете код из консоли, моя форма имеет этот токен csrf, включенный в скрытый ввод.

1 Ответ

0 голосов
/ 29 апреля 2020

// в конфигурации. php $ config ['encryption_key'] = 'некоторый ключ'; обновите это сначала

...