JSLint сообщает “о Небезопасном ^\” для моего regex — что это означает?

Я пытаюсь получить свой код JavaScript 100%-й чистый JSLint.

У меня есть регулярное выражение:

 linkRgx = /https?:\/\/[^\s;|\\*'"!,()<>]+/g;

JSLint сообщает:

 Insecure '^'

Что делает использование из отрицания набора символов "небезопасным"?

9
задан Zhami 14 June 2010 в 18:45
поделиться

2 ответа

[^ \ s; | \\ * '"!, ( ) <>] соответствует любому символу ASCII, кроме перечисленных, и любому символу, отличному от ASCII. Поскольку строки JavaScript поддерживают Юникод, это означает, что каждый символ, известный в Юникоде. Я вижу большой потенциал для вреда .

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

/\bhttps?:\/\/[-\w+&@#/%?=~|$!:,.;]*[\w+&@#/%=~|$]/g
8
ответ дан 4 December 2019 в 15:11
поделиться

(отвечая на свой вопрос) Я немного покопался ... В документации JSLint говорится:

Disallow insecure. и [^ ...]. в / RegExp / regexp: истина, если. и [^ ...] не должны использоваться в литералах RegExp. Эти формы не следует использовать при проверке в защищенных приложениях.

Что я сделал, так это отключил ошибку JSLint для нарушающей строки (поскольку я не имею дело с необходимостью защиты от потенциально злонамеренного ввода пользователя:

/*jslint regexp: false*/
.... Javascript statement(s) ....
/*jslint regexp: true*/
5
ответ дан 4 December 2019 в 15:11
поделиться
Другие вопросы по тегам:

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