SSRF (подделка серверного запроса)
Принуждение сервера обращаться к внутренним адресам по URL, заданному пользователем.
Сигнатура
Server-Side Request ForgerySSRF возникает, когда сервер делает HTTP-запрос по URL из пользовательского ввода. Атакующий подставляет внутренний адрес (например http://169.254.169.254/ — метаданные облака) и получает доступ к закрытым ресурсам сети.
Как защититься: проверяйте URL по белому списку доменов, запрещайте обращения к приватным и loopback-адресам, отключайте лишние схемы (file, gopher), не доверяйте редиректам.
import ipaddress, socket
from urllib.parse import urlparse
def is_safe_url(url):
host = urlparse(url).hostname
ip = ipaddress.ip_address(socket.gethostbyname(host))
# Запрещаем приватные и loopback-адреса
return not (ip.is_private or ip.is_loopback)