Регулярное выражение для поиска конкретного реферера в заголовке HTTP - PullRequest
1 голос
/ 05 марта 2019

Мне нужно создать регулярное выражение, чтобы соответствовать всему, кроме определенного URL для данного реферера.В настоящее время у меня есть совпадение, но я не могу отменить его и создать для него негатив.

То, что у меня сейчас есть:

Referer:(http(s)?(:\/\/))?(www\.)?test.com(\/.*)?

В списке ниже:

Referer:http://www.test.online/
Referer:https://www.test.online/
Referer:https://www.test.tv/
Referer:https://www.blah.com/
Referer:https://www.test.com/
Referer:http://www.test.com/
Referer:http://test.com/
Referer:https://test.com/

Это будет соответствовать:

Referer:https://www.test.com/
Referer:http://www.test.com/
Referer:http://test.com/
Referer:https://test.com/

Однако я бы хотел, чтобы оно совпадало со всем, кроме тех.

Это для нашего WAF, поэтому, к сожалению, оно ограничено использованием, которое может быть выполнено только при поиске возвращаемого HTTP-заголовка.

Ответы [ 2 ]

1 голос
/ 05 марта 2019

Попробуйте это регулярное выражение:

^(?!.*Referer:(http(s)?(:\/\/))?(www\.)?test.com(\/.*)?).*$

Хороший способ отрицать ваше регулярное выражение - использовать отрицательный взгляд вперед.

Объяснение:

Отрицательная конструкция взглядов - это параскобок, с открывающей скобкой, за которой следуют знак вопроса и восклицательный знак.Внутри lookahead [есть любой шаблон регулярных выражений].

Рабочий пример: https://regex101.com/r/QJfeBB/1

0 голосов
/ 05 марта 2019

Вы можете использовать якорь ^, чтобы утверждать начало строки и использовать отрицательный прогноз, чтобы утверждать, что справа не то, что вы хотите сопоставить.

Обратите внимание, что вы должны экранировать точку, чтобы буквально соответствовать ей, и вы можете опустить последнюю часть (\/.*)?.

Если вы не используете группы захвата для последующего использования, вы также можете превратить их в группы без захвата (?:).

^(?!Referer:(https?(:\/\/))?(www\.)?test\.com).+$

regex101 demo

О шаблоне

  • ^ Начало строки
  • (?! Отрицательный взгляд на то, что справа, не совпадает
    • Referer:(https?(:\/\/))?(www\.)?test\.com Соответствует вашему шаблону
  • ) Закрыть негативный взгляд
  • .+ Соответствует любому символу кроме символа новой строки 1+ раз
  • $ Утверждение конца строки
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...