точное значение регулярного выражения для фильтрации тегов

#regex

#регулярное выражение

Вопрос:

следующее регулярное выражение фильтрует некоторые атрибуты стиля / src html-тегов.

 [(?i:s\*c\*r\*i\*p\*t)]
[(?i:e\*x\*p\*r\*e\*s\*s\*i\*o\*n)]
  

Помимо «диапазона модификатора»,

что такое «\*»?
Означает ли это s * c * r * i * p * t? Тогда влияет ли это как-нибудь на фильтрацию?

Комментарии:

1. Как это указано? На каком языке? Можете ли вы показать реальный код с этим? "\*" обычно * это то, которое просто экранирует и сопоставляет a * , но регулярное выражение \* экранирует и сопоставляет его 0 или более раз.

2. наконец-то я нашел ответ! ha.ckers.org/xss.html вот и ответ!

Ответ №1:

В регулярном выражении \* означает 0 или более буквенных символов. Таким образом, регулярные выражения ищут слова script и expression , возможно, с любым количеством обратных косых черт между буквами, а возможно, и без обратных косых черт вообще.

Несколько примеров, которые соответствовали бы:

  • scr\ipt
  • sc\\ript
  • s\cr\ip\t
  • script

Как указывает Qtax, язык здесь будет важен. Я не распознаю этот синтаксис регулярных выражений, но некоторые требуют двойного экранирования обратной косой черты: один раз для основного языка и один раз для механизма регулярных выражений. Это сложно объяснить, но в основном это означает, что шаблоны могут соответствовать только следующим двум входным данным, в зависимости от языка программирования:

  • s*c*r*i*p*t
  • e*x*p*r*e*s*s*i*o*n

Ответ №2:

Как правило, символ в регулярном выражении экранирует специальные символы, чтобы скрыть их особое значение.т.е. n фактически приравнивается к n вместо новой строки.

Вот так просто!

Просто чтобы добавить к ответу, рассматриваемые символы будут преобразованы в s * c * r * i * p * t