Подтвердить что ты не робот

Назначение опции JSLint "запретить небезопасность в регулярном выражении"

У меня есть строка кода, которая получает следующую ошибку при запуске через JSLint:

Lint at line 604 character 48: Insecure '^'.
numExp = parseInt(val[1].replace(/[^\-+\d]/g, ""), 10);

Эта ошибка, похоже, относится к следующему описанию на странице параметров JSLint:

"true if . and [^...]  should not be allowed in RegExp literals.
These forms should not be used when validating in secure applications."

Я не совсем понимаю, как приложение javascript на стороне клиента действительно может считаться безопасным. Даже с самым воздухонепроницаемым регулярным выражением, все равно можно запустить что-то вроде firebug и изменить переменную в любом случае. Действительная проверка ввода должна выполняться на сервере, и браузер клиента должен, вероятно, придерживаться проверки, которая будет обрабатывать злоупотребление вашего обычного пользователя.

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

4b9b3361

Ответ 1

"Небезопасный" означает "неспецифический" в этом контексте. Как точка ., так и эксклюзивный диапазон [^…] не имеют четкого определения того, что должно соответствовать регулярному выражению. Для целей проверки это может предложить риск успешного соответствия материалам, о которых вы не думали и не хотите (подумайте: белый список или черный список).

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

Злоумышленник может в любое время возиться с вашей логикой страницы; предупреждение больше связано с регулярной работой страницы.

Ответ 2

Все, что он пытается сказать вам, состоит в том, что обычно лучше указать, что можно ввести вместо того, что не может.

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