#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-ю строку, он не упомянул знаки препинания. 🙁