Как включить защиту CSRF во всплывающих формах входа / регистрации в CodeIgniter? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую сценарий CodeIgniter, в котором есть следующее, чтобы уточнить это полный код для формы входа в модуле

    <!-- modal login -->
 <div id="login" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
 <div class="modal-dialog white-content">
 <div class="modal-header">
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 <p id="myModalLabel"><i class="icon icon-user"></i> Login </p>
 </div><!-- modal-header -->
  <div class="modal-body">
   <?php if (isset($login_message)) {
    echo $login_message;
}

 ?>

  <form method="post" action="/users/login" class="form" id="login-form">

    <input type="text" name="uname" placeholder="username" class="form-control" /><br/>
    <input type="password" name="upwd" placeholder="****" class="form-control" /><br/>
    <input type="submit" name="sbLogin" value="<?=_('Login')?>" class="btn btn-black"/>
    <a href="/home/lostpassword" class="btn btn-default">Lost Password</a><br />
    <br /><div class="fb-login-button" data-max-rows="1" data-size="small" data-button-type="login_with" data-show-faces="false" data-auto-logout-link="true" data-use-continue-as="false"></div>
    <br /><br />Don't have an Account? <a href="/?signup=yes">Create one</a>

  </form>
  <br />
  <div id="login_output_div"></div>
  </div>
 <div class="modal-footer">
   <button class="btn btn-default" data-dismiss="modal" aria-hidden="true">Close</button>
 </div>
 </div><!-- .modal dialog -->

Для защиты формы я могу добавить

<input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

и использовать

$csrf = array(
    'name' => $this->security->get_csrf_token_name(),
    'hash' => $this->security->get_csrf_hash()
);

в заголовке страницы после включения CSRF в конфиге?Это испортит мои другие формы, и мне нужно будет добавить это к каждой форме?

 <input type="hidden" name="<?=$csrf['name'];?>" value="<?=$csrf['hash'];?>" />

Спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Что вам нужно сделать, это открыть этот файл:

application/config/config.php

Затем установите CSRF на true

$config['csrf_protection'] = true; 

, затем перейдите к этому файлу application/config/autoload.php

добавьте form к элементу массива с именем helper

$autoload['helper'] = array('form');

Затем вы должны использовать помощник по форме в codeigniter, о котором вы можете прочитать по этой ссылке:

помощник по форме codeigniter

Он добавляет CSRF и проверяет его для вас.

Затем, на ваш взгляд, вы можете просто использовать:

<?php $attributes = array('id' => 'login-form');
echo form_open('/users/login', $attributes); ?>

он автоматически создаст тег <form> и добавит к нему csrf, затем, как только эта форма будет отправлена, csrf будет проверен codeigniter, и если csrf был успешным, код возобновится, в противном случае онпотерпит неудачу и выдаст сообщение об ошибке.

...