- 3 мин
- 4116
Резюме: что такое регулярные выражения, как их использовать для корпоративного сайта?
Инструкция пригодится редакторам, контент-менеджерам, маркетологам.
Содержание
— Что такое регулярные выражения?
— Пример. Модуль перенаправлений, или «редиректы»
Что такое регулярные выражения?
…Формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов…
Говоря проще — язык для умного поиска в тексте. Регулярные выражения (Regular Expressions / Eng) используют спецсимволы для обозначения групп букв/цифр/пунктуации и других частей текста. Эта тема широко освещена на разных сайтах, но мы остановимся на практическом применении в рамках задач платформы для создания сайтов Adx CMS.
Задача 1. Остановить злоумышленников.
Реальные записи из журнала запросов:
-
https://online-media.ru/.git/config
— попытка найти ссылку, имя пользователя, а если повезёт и пароль к репозиторию исходного кода сайта. -
https://online-media.ru/blog/.git/config
— аналогично, но в другой папке. -
https://online-media.ru/blog/.env
— попытка найти случайно залитый программистом файл с переменными окружения блога.
Собираем выражение /(\.git/config|\.env)$
, добавляем, проверяем — работает. Теперь злоумышленник получит ошибку 400 (Bad request или Ай-я-яй, нехорошо поступаешь) при такой попытке.
Разбираем регулярное выражение, последовательно:
-
/
— слэш, разделитель пути из URL. Никакой магии, просто символ. -
(\.git/config|\.env)
— группа выбора логическое ИЛИ. При поиске должна найтись либо строка.git/config
либо строка.env
.-
Внутри строк используется
\.
— «заэкранированный» символ.
(точка). Если точку не заэкранировать, то она будет означать не саму точку, а «любой символ».
-
Внутри строк используется
-
$
— символ конца строки.
Читаем выражение по-русски: слэш, за ним одна из строк «.git/config» или «.env», затем конец строки. В целом - несложно, но действенно.
С помощь группы ИЛИ можно собрать более двух строк, примеры:
-
/(portal|about|test-page)/
— одна из трёх строк. -
/(www|web|wwwroot|data|database|db|bak|backup)\.(zip|rar|7z)$
— тоже реальный пример, попытка найти забытый програмистом архив с данными, кодом или резервной копией сайта.
Задача 2. Перенаправить несколько ссылок со старой версии сайта на одну страницу.
Есть много ссылок вида https://mysite.com/news/12/
, https://mysite.com/news/25/
, https://mysite.com/news/439/
и т.д. В адресе явно виден префикс «news» и цифровые идентификаторы каждой из новостей. Перенаправим все эти страницы на список новостей, выражение — /news/\d+/$
.
В выражении видим уже знакомый нам символ конца строки $
. Также видим «заэкранированную» слэшом букву «d» \d+
. Эта крайне полезная последовательность означает «цифры в количестве одна или больше», а именно \d
— цифра и +
— спецсимвол «один или больше».
Материалы по теме