#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