Полное руководство по фильтрации URL-адресов веб-сайтов с помощью регулярных выражений (Regex)

Привет! Сегодня мы собираемся погрузиться в увлекательный мир фильтрации URL-адресов веб-сайтов с использованием возможностей регулярных выражений или, как это любят называть крутые разработчики, «регулярных выражений». Если вы веб-разработчик или кто-то, кто интересуется веб-безопасностью, эта статья для вас. Итак, давайте начнем и рассмотрим различные методы фильтрации URL-адресов на примерах кода!

Метод 1: базовая проверка формата URL

import re
def is_valid_url(url):
    pattern = re.compile(r'^https?://(www\.)?[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+$')
    return bool(re.match(pattern, url))
# Example usage
url = "https://www.example.com"
if is_valid_url(url):
    print("Valid URL")
else:
    print("Invalid URL")

Метод 2: ограничение определенных доменов

import re
def is_allowed_domain(url):
    allowed_domains = ["example.com", "google.com", "facebook.com"]
    pattern = re.compile(r'^https?://(www\.)?([a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+)$')
    match = re.match(pattern, url)
    if match:
        domain = match.group(2)
        return domain in allowed_domains
    return False
# Example usage
url = "https://www.example.com"
if is_allowed_domain(url):
    print("Allowed domain")
else:
    print("Restricted domain")

Метод 3. Фильтрация пользовательского пути

import re
def is_allowed_path(url):
    allowed_paths = ["/products", "/blog"]
    pattern = re.compile(r'^https?://(www\.)?[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+([a-zA-Z0-9-./]+)?$')
    match = re.match(pattern, url)
    if match:
        path = match.group(3)
        return path in allowed_paths
    return False
# Example usage
url = "https://www.example.com/products"
if is_allowed_path(url):
    print("Allowed path")
else:
    print("Restricted path")

Метод 4. Фильтрация параметров запроса

import re
def is_allowed_query_param(url):
    allowed_params = ["category", "sort"]
    pattern = re.compile(r'^https?://(www\.)?[a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+([a-zA-Z0-9-./?=&]+)?$')
    match = re.match(pattern, url)
    if match:
        query_params = match.group(4)
        if query_params:
            params = query_params[1:].split("&")
            for param in params:
                key = param.split("=")[0]
                if key in allowed_params:
                    return True
    return False
# Example usage
url = "https://www.example.com/products?category=electronics"
if is_allowed_query_param(url):
    print("Allowed query parameter")
else:
    print("Restricted query parameter")

Метод 5. Комплексная фильтрация

import re
def is_allowed_url(url):
    allowed_domains = ["example.com", "google.com", "facebook.com"]
    allowed_paths = ["/products", "/blog"]
    allowed_params = ["category", "sort"]
    pattern = re.compile(r'^https?://(www\.)?([a-zA-Z0-9-]+(\.[a-zA-Z]{2,})+)([a-zA-Z0-9-./?=&]+)?$')
    match = re.match(pattern, url)
    if match:
        domain = match.group(2)
        path = match.group(4)
        if domain in allowed_domains and path in allowed_paths:
            if path and "?" in path:
                query_params = path.split("?")[1]
                params = query_params.split("&")
                for param in params:
                    key = param.split("=")[0]
                    if key not in allowed_params:
                        return False
            return True
    return False
# Example usage
url = "https://www.example.com/products?category=electronics&sort=price"
if is_allowed_url(url):
    print("Allowed URL")
else:
    print("Restricted URL")

Вот и все! Мы рассмотрели несколько методов фильтрации URL-адресов веб-сайтов с использованием регулярных выражений. Не забудьте настроить эти методы в соответствии с вашими конкретными требованиями. Удачной фильтрации!