Портал технической службы: наряды и чек-листы, задачи, отказы и неисправности, анализ надёжности, карты, склады, приложение для Android

This commit is contained in:
darkorion
2026-10-13 09:09:53 +03:00
commit c298f5a830
247 changed files with 23200 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
"""Проверка адресов push-сервисов: сервер не должен ходить по произвольным URL, заданным пользователем (SSRF)."""
import ipaddress
from urllib.parse import urlsplit
# Адреса, которые отдают браузеры при подписке (Chrome/Edge/Opera/Samsung — FCM, Firefox, Safari, Windows)
ALLOWED_SUFFIXES = (".googleapis.com", ".push.services.mozilla.com", ".push.apple.com", ".notify.windows.com")
def is_allowed_push_endpoint(url: str) -> bool:
try:
p = urlsplit(url)
host = (p.hostname or "").lower()
port = p.port
except ValueError:
return False
if p.scheme != "https" or not host or p.username or p.password or port not in (None, 443):
return False
try:
ipaddress.ip_address(host)
return False # IP-адреса (в том числе локальные) не допускаем
except ValueError:
pass
return any(host.endswith(s) for s in ALLOWED_SUFFIXES)