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

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

<form method="post" action="http://www.example.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. может ли кто-нибудь получить мой пароль через инструмент мониторинга сети, такой как wireshark?

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

6 ответов


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

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

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

в частности, функция force 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, однако это довольно распространено, поэтому вы можете найти более недавний учебник с немного Гуглить.

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 в... и оба!--3-->MD5 и SHA1 для are не поддается расшифровке


пройти 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);

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


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

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

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

использовать алгоритм MD5(строка) для шифрования, которое очень безопасно для сайта codeigniter. Для шифрования пароля пользователя этот код при отправке формы.

password=md5 ($this - > input - >post ('пароль'));