Цель JSLint “запрещает небезопасный в regex” опция

У меня есть строка кода, которая получает следующую ошибку при пробежке 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 может действительно быть рассмотрено безопасное. Даже с самым воздухонепроницаемым regex, все еще возможно разжечь что-то как поджигатель и заменить переменную так или иначе. Реальный контроль ввода должен быть сделан на сервере, и клиентский браузер должен, вероятно, придерживаться проверки, которая обработает злоупотребление Вашим средним пользователем.

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

33
задан Jon Bringhurst 3 March 2010 в 15:42
поделиться

2 ответа

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

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

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

30
ответ дан 27 November 2019 в 18:33
поделиться

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

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

14
ответ дан 27 November 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: