Помогите прочитать регулярное выражение

UJy

Постоялец
Регистрация
23 Авг 2011
Сообщения
385
Реакции
145
Ковыряю один модуль для Bitrix, который видоизменяет пагинацию.
И в этом модуле 1 функция, которая проверяет урл и подменяет его.
Вот эта функция:
PHP:
function __isPathTraversalUri($uri) 
{ 
    if (($pos = strpos($uri, '?')) !== false) { 
        $uri = substr($uri, 0, $pos); 
    } 
    $uri = trim($uri); 
    return preg_match("#(?:/|2f|^|\\\\|5c)(?:(?:%0*(25)*2e)|\\.){2,}(?:/|%0*(25)*2f|\\\\|%0*(25)*5c|$)#i", $uri) ? true : false; 
} 
$newUri = preg_replace('#(pagen[\d]+/)#is', '', $_SERVER['REQUEST_URI']); 
if (!__isPathTraversalUri($newUri)) { 
    $_SERVER['REQUEST_URI'] = $newUri; 
}
Я примерно понимаю что она делает, но эта регулярка взрывает мне мозг. Может кто-нибудь написать её по-человечески? Или объяснить что она ищет в урле.
Код:
(?:/|2f|^|\\\\|5c)(?:(?:%0*(25)*2e)|\\.){2,}(?:/|%0*(25)*2f|\\\\|%0*(25)*5c|$)
 
749724.jpg

В url символы кодируют так:
/ => %27
\ => %5c
% => %25
. => %2e

Если коротко, то регулярка ищет разные вариации /../ или \..\ Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
 
Последнее редактирование:
Если коротко, то регулярка ищет разные вариации /../ или \..\ Для просмотра ссылки Войди или Зарегистрируйся
Для просмотра ссылки Войди или Зарегистрируйся
А можно эту же регулярку написать каким-нибудь более простым языком? Без такого (?:%0*(25)*2e)
 
А можно эту же регулярку написать каким-нибудь более простым языком? Без такого (?:%0*(25)*2e)
Сперва нужно определится что должно твое регулярное выражение обрабатывать. isPathTraversalUri() она проверяет есть ли путь в строке. Чем она сейчас не устраивает? приведи все возможные варианты этого пути что бы тебе помогли переписать регулярку.
 
Сперва нужно определится что должно твое регулярное выражение обрабатывать. isPathTraversalUri() она проверяет есть ли путь в строке. Чем она сейчас не устраивает? приведи все возможные варианты этого пути что бы тебе помогли переписать регулярку.
Велосипед не мой и есть подозрения, что такая регулярка написана с целью помешать переписыванию модуля под свои нужды (что б такие как я колупали поменьше).
Отсюда и вопрос: что ищет эта регулярка. Как только я узнаю "что именно она ищет" - смогу написать новую регулярку сугубо под свои нужды.
Не пишу свою сразу только по одной причине - я не могу понять что она проверяет и я стремаюсь насчет "не начнет ли модуль ломать работу сайта после написания моей регулярки".

Данная "штука" является составной частью модуля, который преобразует пагинацию Битрикса с вида site.ru/news/?PAGEN_1=2/ в урлы вида site.ru/news/pagen2/ и не преобразует всё остальное.
 
Назад
Сверху