Codeigniter: как я могу зашифровать пароль перед отправкой формы на контроллер?

Привет, у меня простая форма входа в html

 <form method="post" action="http://www.mysite.com/login"> <input type="text" name="text_box" /> <input type="password" name="pass_word" /> <input type="submit" name="submit"> </form> 

когда я отправлю форму

и в контроллере

 public function login(){ $pass_word = $this->input->post('pass_word'); die($pass_word); } 

проблема здесь, он показывает простой пароль. если я нахожу 123456 в контроллере, я получаю 123456 .

  1. это проблема безопасности
  2. может ли кто-нибудь получить мой пароль через инструмент сетевого мониторинга, например wirehark.

как этого избежать. я могу зашифровать пароль, прежде чем отправлять его на контроллер, пожалуйста, помогите, спасибо заранее.

Если ваши данные для сообщений (пароль и т. Д.) Были перехвачены, тогда это будет просто видно как открытый текст. Использование SSL / HTTPS обеспечит шифрование данных, которые вы отправляете. Я бы не стал полагаться на клиентский JavaScript или что-то подобное для целей аутентификации / регистрации пользователя. Это, скорее всего, также даст вашим пользователям больше уверенности в том, что используется безопасное соединение.

Во-первых, я только что прочитал о SSL и HTTPS в целом, а также сертификаты SSL – Wiki, Google и SO – все это будет хорошим местом для поиска, там много информации.

Для использования SSL / HTTPS с CI я нашел это полезным:

В частности, силовая функция ssl от должности Найджела :

Создайте файл в приложении / помощнике ssl_helper.php

 if (!function_exists('force_ssl')) { function force_ssl() { $CI =& get_instance(); $CI->config->config['base_url'] = str_replace('http://', 'https://', $CI->config->config['base_url']); if ($_SERVER['SERVER_PORT'] != 443) { redirect($CI->uri->uri_string()); } } } function remove_ssl() { $CI =& get_instance(); $CI->config->config['base_url'] = str_replace('https://', 'http://', $CI->config->config['base_url']); if ($_SERVER['SERVER_PORT'] != 80) { redirect($CI->uri->uri_string()); } } 

Загрузите помощника, затем в конструктор для любого контроллера, который требует ssl, просто вставьте:

force_ssl();

В каждом контроллере, который вы не хотите использовать ssl:

if (function_exists('force_ssl')) remove_ssl();

Это программный подход, другим способом было бы использовать .htaccess (если вы используете Apache).

Да, это определенно проблема безопасности. Как вы говорите, любой, у кого есть Wireshark (или аналогичный), может перехватить его.

Вероятно, это не то, на что вы хотите положиться на JavaScript. Как правило, вы используете что-то вроде SSL / HTTPS, есть сообщение в блоге (немного старое), в котором подробно описывается, как это сделать с помощью CodeIgniter, однако это довольно распространено, поэтому вы можете найти более недавний учебник с небольшим количеством Googling.

http://sajjadhossain.com/2008/10/27/ssl-https-urls-and-codeigniter/ http://nigel.mcbryde.com.au/2009/03/working-with-ssl-in-codeigniter/ ,

ОБНОВЛЕНИЕ: ответ Лефтера дает более подробную информацию и является правильным, пожалуйста, просмотрите его, а также / вместо этого

 $password = sha1($this->input->post('password')); or $hash= $this->input->post('password'); $password= $this->encrypt->sha1($hash); 

вы можете использовать md5 вместо sha1, но sha1 более безопасен, чем md5 … и оба md5 и sha1 не декодируются

Перейдите по http://codeigniter.com/user_guide/libraries/encryption.html . Здесь описано все о шифровании и расшифровке.

Выполняет шифрование данных и возвращает его как строку. Пример:

 $pass_word = $this->encrypt->encode(input->post('pass_word')); 

Расшифровывает закодированную строку. Пример:

 $encrypted_pass_word = 'APANtByIGI1BpVXZTJgcsAG8GZl8pdwwa84'; $plaintext_pass_word = $this->encrypt->decode($encrypted_pass_word); 

Вы можете дополнительно передать свой ключ шифрования по второму параметру, если вы не хотите использовать его в своем конфигурационном файле. Перейдите по ссылке, чтобы прочитать подробное объяснение.

Существует более простой способ для пользователя https.

Я помещаю следующие строки в файл ./application/config/config.php, и он отлично работает:

 $protocol = ( isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on' ) ? 'https' : 'http'; $config['base_url'] = $protocol.'://www.yoursite.com';