Регулярное выражение пароля, разрешающее символ © в конце слова

#regex #coldfusion #railo

#регулярное выражение #coldfusion #railo

Вопрос:

Я использую следующее регулярное выражение, чтобы гарантировать, что пароль содержит только буквенные и цифровые символы.

 if(! reFind("^[[:alnum:][:punct:]]", this.password)) {
                this.addError(property="Password", message="Password must contain only letters, numbers, or punctuation marks.");
            }
  

Если я добавлю символ авторского права © в начало слова, повторный поиск заблокирует его; если я добавлю его в конец слова, он пройдет. Так что ©abcd не проходит, пока abcd© проходит.

Я хочу убедиться, что в моих паролях разрешены только буквенно-цифровые символы и знаки препинания.

Комментарии:

1. «Я хочу убедиться, что в моих паролях разрешены только буквенно-цифровые символы и знаки препинания». — почему!? Для этого нет веской причины. Пароли шифруются, поэтому тип и количество символов, которые они содержат, не имеет значения.

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

3. Последствий нет — вы используете один и тот же алгоритм для шифрования пароля при регистрации и при аутентификации, поэтому не имеет значения, какие символы или наборы символов задействованы — это просто строка данных для алгоритма шифрования. Нет причин блокировать их.

4. @Peter, достаточно справедливо, поэтому, если я вас правильно понимаю, здесь нет необходимости в регулярном выражении (если только я не хочу заставить своих пользователей использовать определенную комбинацию символов для дополнительной безопасности)! И что база данных будет работать без каких-либо проблем… Спасибо!

5. Да. Большинство алгоритмов шифрования выводят шестнадцатеричные цифры, поэтому вам просто нужно знать соответствующую длину, и все. И да, единственное регулярное выражение, которое вам понадобится, — это обеспечить определенную сложность — хотя и здесь будьте осторожны, поскольку чрезмерно сложные правила могут побудить людей использовать один и тот же пароль для всего (очень плохой), и разрешение словосочетания потенциально может быть более безопасным (и его легче запомнить), чем что-то вроде «P45 $ Word».

Ответ №1:

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

 if(reFind("[^[:alnum:][:punct:]]", this.password))

if(! reFind("^[[:alnum:][:punct:]]*$", this.password))
  

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

Ответ №2:

Попробуйте это:

 if(!reFind("^[[:alnum:][:punct:]] $", this.password))
  

Комментарии:

1. Это не позволит выполнить следующее: abc123

2. w включает знаки препинания? Это какая-то особая вещь ColdFusion?

3. w не допускает символы Юникода, что является одним из моих требований.

Ответ №3:

почему вы не можете написать что-то вроде:

 ^[0-9a-zA-Z] $
  

Комментарии:

1. «Я хочу убедиться, что в моих паролях разрешены только буквенно-цифровые и пунктуационные символы».

2. @Kent, это также не разрешает акценты в символах юникода.

3. да, я только что прочитал 1-ю строку, он не упомянул знаки препинания. 🙁