Проверка зашифрованных паролей в Grails - PullRequest
1 голос
/ 19 мая 2011

В граалях я могу установить в поле пароля ограничение минимального размера 5 (произвольно). Проблема в том, что я использую Spring Security Service для кодирования моего пароля, а кодированный / зашифрованный пароль намного длиннее 5 символов, почти независимо от того, какое значение я ввел.

В другом ответе на форуме предлагалось выполнить эту проверку в методе сохранения. Кто-нибудь еще занимался этой проблемой и знает, как ее обойти?

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

static constraints = {
    username(blank: false, unique: true)
    password(minSize: 5, blank: false, unique: true,
        validator: { passwd, user ->
            return passwd != user.username
    })
    passwordRepeat(nullable: false,
    validator: { passwd2, user ->
        return passwd2 == user.password 
    })
}

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

Мои извинения за нечитаемый комментарий.

Спасибо, -Asaf

Edit: я думаю, что простое исправление, как упомянуто выше, выполняет проверку в методе сохранения (до шифрования), но я просто чувствую, что кто-то где-то должен был иметь дело с этой проблемой раньше. Я имею в виду, что существует очень много веб-сайтов, которым требуются пароли, и которые кричат ​​на вас, если он слишком короткий, если он не содержит строчных и прописных букв, если у него нет символа ... Как все они делают различные методы проверки, которые они используют?

1 Ответ

1 голос
/ 20 мая 2011

Вы не можете декодировать то, что кодирует Spring Security ... Это md5 или sha-256 !!!Именно в этом и заключается цель процесса шифрования.Тогда вы не сможете узнать, какой пароль, даже если файлы баз данных украдены

. Чтобы проверить пароли, вам нужно запросить у пользователя чистый пароль (передайте в https, пожалуйста), а затем закодировать его с помощьютот же алгоритм.Затем вы должны сравнить его с зашифрованным паролем, который вы сохранили

. Используйте класс DigestUtils , чтобы закодировать полученный пароль с помощью того же алгоритма, который использовался в первый раз.Это Spring Security Config grails.plugins.springsecurity.password.algorithm

И да, вы должны проверить перед сохранением ... Для этого мы добавили метакласс в Bootstrap

String.metaClass.validateAsPassword

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

...