У 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
.
- это проблема безопасности?
- может ли кто-нибудь получить мой пароль через инструмент мониторинга сети, такой как
wireshark
?
как избежать этого? Могу ли я зашифровать пароль, прежде чем отправить контролер? Пожалуйста, помогите , заранее спасибо.
6 ответов
Если ваши данные по столба (пароль etc.) был перехвачен, тогда он будет просто виден как открытый текст. Использование SSL / HTTPS обеспечит шифрование отправляемых данных. Я бы не полагался на клиентский JavaScript или что-то подобное для целей аутентификации / входа в систему пользователя. Это, вероятно, даст вашим пользователям больше уверенности, видя, что используется безопасное соединение.
во-первых, я только что прочитал о SSL и HTTPS в целом, а также SSL-сертификатах - Wiki, Google и так все были бы хорошими местами для поиска,там много информации.
для использования SSL / HTTPS с CI я нашел эти полезные:
- http://sajjadhossain.com/2008/10/27/ssl-https-urls-and-codeigniter/
- http://nigel.mcbryde.com.au/2009/03/working-with-ssl-in-codeigniter/
- как я могу иметь CodeIgniter загружать определенные страницы с помощью SSL?
в частности, функция 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 ('пароль'));