Регулярное различие между java и javascript для проверки имени пользователя - PullRequest
0 голосов
/ 09 мая 2018

В данный момент мы внедряем Identity Server WSO2, и я проверяю его настройки Моей целью было включить пробелы в именах пользователей. Они не разрешены по умолчанию и защищены некоторыми регулярными выражениями. Я не понимаю, почему есть различия в регулярных выражениях для Frontend и Backend.

Вот фрагмент из repository/conf/user-mgt.xml:

<Property name="UsernameJavaRegEx">[a-zA-Z0-9._\-|//]{3,30}$</Property>
<Property name="UsernameJavaScriptRegEx">^[\S]{3,30}$</Property>
<Property name="PasswordJavaRegEx">^[\S]{5,30}$</Property>
<Property name="PasswordJavaScriptRegEx">^[\S]{5,30}$</Property>
<Property name="RolenameJavaRegEx">[a-zA-Z0-9._\-|//]{3,30}$</Property>
<Property name="RolenameJavaScriptRegEx">^[\S]{3,30}$</Property>

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

Во-вторых, я не уверен, что я разбиваю вещи, просто разрешая пустое пространство как часть этих регулярных выражений (плохая практика?).

[a-zA-Z0-9._\-|//]{3,30}$    ==>    [a-zA-Z0-9 ._\-|//]{3,30}$
^[\S]{3,30}$                 ==>    ^[\S ]{3,30}$

Существуют ли какие-либо рекомендации OWASP для проверки имени пользователя? Пока ничего не нашел ...

Любая помощь или информация приветствуется.

1 Ответ

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

Да, вы правы. Они должны быть идентичными, если вы не хотите тратить время пользователей на заполнение форм, или это не имеет значения, поскольку одно регулярное выражение накладывает ограничение на другое, а иногда люди не удосуживаются проверять заново, пока они уверены в поступающих данных. , Но в вашем случае один из них используется во внешнем интерфейсе, который можно изменить, чтобы тот, который использовался во внутреннем интерфейсе, был точным.

Кажется, что регулярное выражение, используемое в Java, допускает использование специальных символов, таких как pipe | и косая черта / в имени пользователя. Что касается непоследовательного использования регулярных выражений, вы должны подтвердить это как необходимость или требование.

Независимо от того, какой метод используется, только это регулярное выражение [a-zA-Z0-9._\-|//]{3,30}$ позволяет именам пользователей длиной более 30 символов следовать за любым типом символов, поскольку не определено начало привязки строки ^ (которая может вам понадобиться).

Есть ли какая-то лучшая практика OWASP ...

Да, есть. Только не проверяйте странные символы, т.е. \x00

Как примечание: вы ограничиваете пароли определенной длиной , которую вы не должны .

...