JavaScript URL.protocol — протокол адреси


Властивість protocol повертає протокол — разом із двокрапкою: https:, http:, blob:.

автор: NagarD

Загальний опис

Двокрапка входить у значення. Порівняння protocol === 'https' не спрацює ніколи — треба 'https:'.

І це не просто дрібниця, а питання безпеки. Посилання з протоколом javascript: виконує код при кліку. Якщо адреса приходить від користувача й підставляється в href, протокол треба перевіряти — інакше отримаєш XSS.

автор: NagarD

Нотатка

Дозволяй у користувацьких посиланнях лише http: і https:. Протоколи javascript: і data: — готовий вектор атаки.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
protocol 32+ 26+ 7+ 19+ 12+ -
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід