Если в
href указать невалидный протокол вроде ftp:: или https::, браузер перестаёт интерпретировать атрибут как URL. Это полностью ломает ожидаемую логику проверки протоколов и открывает дополнительные векторы атак 🚨🟡 В обычном случае приложение и фильтры (например, DOMPurify) блокируют все протоколы, кроме
http и https.🟡 Но при использовании формы
https:: строка уже не считается URL, и проверки протокола не срабатывают.🟡 Это делает возможным обращение к эндпоинтам или выполнение действий, которые при нормальном парсинге URL были бы невозможны.
Идём дальше: почти любые символы после
: приводят к аналогичному результату — браузер прекращает парсинг как URL и оставляет значение как обычный текст 🏃
