У меня есть строка кода, которая получает следующую ошибку при пробежке 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, все еще возможно разжечь что-то как поджигатель и заменить переменную так или иначе. Реальный контроль ввода должен быть сделан на сервере, и клиентский браузер должен, вероятно, придерживаться проверки, которая обработает злоупотребление Вашим средним пользователем.
Действительно ли безопасно проигнорировать эту ошибку? Я пропускаю угол здесь, где мое приложение будет небезопасно из-за клиентского контроля ввода?
«Небезопасный» в данном контексте означает «неспецифический». Обе точки .
и исключительный диапазон [^…]
четко не определяют, что должно совпадать с регулярным выражением. В целях проверки этот может предложить риск успешного сопоставления того, о чем вы не думали и не хотите (подумайте: белый список или черный список).
В любом случае точка и исключительный диапазон являются допустимыми частями регулярного выражения, и если они делают то, что вам нужно (как в этом случае), я считаю предупреждение чрезмерно осторожным.
Злоумышленник может в любой момент поиграть с логикой вашей страницы; предупреждение больше касается нормальной работы страницы.
Все, что это пытается сказать вам, это то, что обычно лучше указать, что можно вводить, а не что нельзя.
В данном случае ваш regex действительно удаляет плохие символы, поэтому можно игнорировать предупреждение.