Postgres chkpass сравнивает «содержать», а не «равно» - PullRequest
0 голосов
/ 07 июня 2018

Я заметил, что postgres сравнивает зашифрованный текст, используя «содержать», а не «равно».Для репликации используйте это:

create table "user" (uname text, password chkpass);
insert into "user" values ('user1', 'password')
select * from "user" where uname = 'user1' and password = 'password1'

Это серьезная проблема.

Кто-нибудь это заметил?Может кто-нибудь дать мне временное решение, пожалуйста?

1 Ответ

0 голосов
/ 24 августа 2018

Это не ошибка.Это просто ограничение функции crypt (), которая используется для шифрования внутри системы.

Я заметил, что postgres сравнивает зашифрованный текст, используя «содержать», а не «равно».

Он не использует «содержать», а проверяет первые восемь символов сравниваемого текста.Как упомянуто в Документации chkpass

Шифрование использует стандартную функцию Unix crypt (), и поэтому оно страдает от всех обычных ограничений этой функции;Примечательно, что учитываются только первые восемь символов пароля.

Я бы порекомендовал вам использовать другой алгоритм для шифрования вашего пароля (как упомянуто в этом посте ), а затем хранить его.в базе данных вместо использования postgres chkpass.

...