Привет! Сегодня мы собираемся погрузиться в увлекательный мир фильтрации 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-адресов веб-сайтов с использованием регулярных выражений. Не забудьте настроить эти методы в соответствии с вашими конкретными требованиями. Удачной фильтрации!