Назначение опции JSLint «запретить небезопасное в регулярных выражениях» - PullRequest
33 голосов
/ 03 марта 2010

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

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

Ответы [ 2 ]

30 голосов
/ 03 марта 2010

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

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

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

14 голосов
/ 03 марта 2010

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

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

...