`javascript:name` у атрибуті href

Розуміння атрибута javascript: в Href та його ризиків

Псевдопротокол javascript: — це механізм у веб-розробці, який дозволяє виконувати JavaScript-код безпосередньо з атрибута href. Ця поведінка має цікаві нюанси, зокрема стосовно проблем безпеки. Давайте розглянемо, як це працює та чому це може становити ризик, якщо не враховувати важливі моменти.

Як працює javascript: в Href?

Коли ви встановлюєте javascript: як значення атрибута href, браузер оцінює ідентифікатор у тому ж вікні, що й сама сторінка. Ось що відбувається:

  1. Браузер шукає `у об'єктіwindow`.
  2. Якщо знайдено в об'єкті `window`, браузер встановлює `body.innerHTML` на значення.
  3. Якщо не знайдено, браузер трактує це як простий текст і встановлює `body.innerHTML` на текстове значення.

Ось простий приклад:






 Продовжити  




Ризик безпеки: Внедрення шкідливого контенту

Тепер розглянемо потенційно шкідливий URL:

https://target.com?name=&redirect_url=javascript:name

Коли URL кодується, він виглядає так:

https://target.com?name=%3Cimg%20src%20onerror%3Dalert(1)%3E&redirect_url=javascript%3Aname

Якщо користувач натискає кнопку «Продовжити», значення параметра name із URL встановлюється в body.innerHTML сторінки. У цьому випадку параметр name містить шкідливий HTML (``).

Як результат, HTML сторінки перетворюється на:






Ця зміна викликає подію onerror у тегі img, що запускає скрипт alert(1).

Важлива примітка щодо обробки рядків

Якщо URL javascript: вказує на властивість window, наприклад, javascript:prop, і window.prop = 'alert(1)', браузер не виконує JavaScript-код. Натомість він трактує значення як HTML-рядок і оновлює body.innerHTML відповідно. Така поведінка запобігає безпосередньому виконанню коду, але все ж відкриває сторінку для ризиків, таких як ін'єкція контенту.

Варіації javascript:

Цікаво, що протокол javascript: не чутливий до регістру. Ви можете написати його різними способами:

  • javascript:
  • JaVaScRiPt:
  • javascript:

Ця гнучкість означає, що розробники повинні враховувати всі потенційні варіації при впровадженні заходів безпеки.

Зниження ризиків

Щоб захистити ваші додатки від цих вразливостей, скористайтеся наступними рекомендаціями:

  1. Уникайте використання javascript: в атрибутах Href: Замість цього використовуйте прослуховувачі подій (Event Listener), щоб обробляти дії програмно.
  2. Очищення введених даних: Завжди очищайте та перевіряйте введені дані користувачем, щоб запобігти ін'єкції шкідливого контенту.
  3. Політика безпеки контенту (CSP): Впровадьте надійну CSP, щоб обмежити виконання внутрішніх скриптів та несанкціонованих ресурсів.
    4.
    Екранування даних користувача: Правильно екрануйте дані користувача перед вставкою їх у DOM.

Розуміючи, як працює javascript: і впроваджуючи відповідні заходи безпеки, ви можете захистити ваші додатки від непередбачених наслідків та потенційних атак.

Перекладено з: javascript:name in href attribute

Leave a Reply

Your email address will not be published. Required fields are marked *