JavaScript URL.protocol — протокол адреси
Властивість protocol повертає протокол — разом із двокрапкою: https:, http:, blob:.
Загальний опис
Двокрапка входить у значення. Порівняння protocol === 'https' не спрацює ніколи — треба 'https:'.
І це не просто дрібниця, а питання безпеки. Посилання з протоколом javascript: виконує код при кліку. Якщо адреса приходить від користувача й підставляється в href, протокол треба перевіряти — інакше отримаєш XSS.
- Нотатка
-
Дозволяй у користувацьких посиланнях лише
автор: NagarDhttp:іhttps:. Протоколиjavascript:іdata:— готовий вектор атаки.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| protocol | 32+ | 26+ | 7+ | 19+ | 12+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| protocol | 32+ | yes | yes | 7+ |
Приклади
+ запропонувати свій приклад у пісочниці
Білий список протоколів для користувацьких посилань.
console.log(new URL('https://css.in.ua').protocol); // 'https:' — із двокрапкою
function safeLink(href) {
if (!URL.canParse(href)) {
return null;
}
const url = new URL(href);
// білий список — інакше javascript: виконає код
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
return null;
}
return url.href;
}
console.log(safeLink('javascript:alert(1)')); // null
Коментарі
Коментарів ще немає — будьте першим!