Как я должен хэшировать пароли перед публикацией, а затем использовать BCRYPT? - PullRequest
0 голосов
/ 29 мая 2018

Я делаю систему входа в систему, и при входе в систему пароль в настоящее время отправляется из JavaScript в файл PHP.

В PHP я использую следующий фрагмент кода для хеширования.

$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);

Как мне хэшировать пароль в JavaScript перед отправкой с помощью POST?

Я явно не хочу влиять на безопасность BCRYPT.

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

То, что делается на стороне клиента, на самом деле не контролируется вами.Я имею в виду, что даже если вы хешируете свой пароль, клиент может получить пароль до хеширования / шифрования.

var password = document.getElementById('login').value;
console.log(password); // It is as simple as it
//hash password...

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

Если вы боитесь, что это - Человек посередине (MITM) атака, самое важное - использовать сертификат TLS с правильным алгоритмом (это зависит от версии вашего сервера OpenSSL).
Короче говоря, использование HTTPS - это то, что вы должны сделать, чтобы защитить своих клиентов от атаки MITM..

Так что, по моему мнению, не требуется хешировать / шифровать пароль перед его отправкой.

0 голосов
/ 29 мая 2018

Если вы хотите, вы можете поиграть с некоторой реализацией bcrypt на стороне клиента (поиск "bcrypt js", есть пример реализации ).

НО, это означает, что вы должныиспользуйте одно и то же значение соли между сервером и клиентом. Этот ответ объясняет.

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

НО, что вы имеете в виду?Если вы считаете, что отправлять и сравнивать хеш более безопасно, чем отправлять один раз простой пароль и хэшировать его на стороне сервера, вы ошибаетесь.Человек в середине украл пароль или хэш либо нарушил безопасность.

Правильный ответ был дан в комментарии: Лучше использовать HTTPS для лучшей безопасности.По крайней мере, используйте дайджест-аутентификацию, если вы не можете использовать протокол HTTPS ( Что такое дайджест-аутентификация? )

0 голосов
/ 29 мая 2018

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

...