Українська

Інструменти розробника · HTML учасник

Декодування HTML суб'єкти без внутрішньогоHTML: як працює декодер

· Як працює

Опубліковано ToolAcre · Рецензування журналу

українська безпека коди

Закодовано HTML посилання на картографію для нешкідливого тексту без створення DOM вершини
Головна ToolAcre векторна ілюстрація

Популярний трюк декодуючих суб'єктів шляхом призначення до внутрішньогоHTML працює ваш вхід через HTML парсер, який саме те, що ви не хочете. Цей пост пояснює підхід на основі безпечних таблиць і як він ручить іменовані, десяткові і шестигранні посилання.

Декодер, який виконав <img onerror> — бетонний випадок, де «просто декодувати» стала сценарним виконанням

Використання element.innerHTML декодує &amp;, але також аналізує HTML. Значення на кшталт <img src=x onerror=...> може створити елемент і атрибут обробника подій. Якщо потрібно лише декодувати посилання на символи, зберігайте вставлений HTML-подібний текст як дані, а не аналізуйте його як дерево DOM.

Який внутрішнійHTML насправді працює з рядком — парсінг, створення елементів та атрибутів обробника подій, не просто заміна суб’єкта

внутрішня HTML викликає HTML мітки стають вершинами, атрибути набувають значення браузера, а потім текст Р <strong> тег, який призначений для збереження як літровий вхід, може фуршети як форматування тексту. Знімний елемент не є загальною гарантією безпеки; код часто нагадує, що піддерева або використовує отриманий результат HTML в іншому місці. Якщо ви повинні відображати ненадійне введення, призначте текст HTML.

Стильний підхід — формальний вираз &name;, &#NNN; і &#xHHH;, і карта з імен до символів

ToolAcreдекодер використовується для пошуку посилання на форму &name;, &#123; або &#x7B;. Назвивані посилання виглядають в практичному явному столі, включаючи ампір, lt, gt, лапки та загальній типографії. Невідоме ім'я залишається письмовим, ніж вгадувати. Цей підхід створює елементи та дзвінки HTML parser; він просто замінює визнані підрядки в рядку. Стіл навмисно підмножити, не всі HTML іменовані посилання на характер.

Обробка нумеричних посилань — парсування десяткових і шестигранних точок коду і перетворення їх на рядки, включаючи арабські символи

Для нумеричної довідки введіть десятковий номер після &# або шістнадцятковий після &#x, потім переверніть точку нумерного коду в характер з String.fromCodePoint. Астрал значення, такі як 0x1F600, дає смайли, не два незалежних друкованих персонажів. Впровадження також карти історичної Windows-1252 Контрольно-посадкові значення як браузери; нуль, сурогатні пункти коду і значення над U+10FF стають замінним характером. Цей явного поводження з похибками зберігає недійсний номер від збою.

Виконавці: декодування рядка, яка міксує &amp;, &#169; і &#x1F600; — кожен матч, який вирішить з таблиці або кількості

Декодувати вхід на літр &amp;, &#169; і &#x1F600;: перші довідкові карти за названим столом &, десятковий 169 стає ©, і шістдесят 1F600 стає 😀. Включити сировину <img onerror="alert(1)"> припадуть їх. Декодер повертає, що послідовність завантаження тегів як звичайний рядок символів; він не створює зображення або виконує захід. При надходженні результату в реальну сторінку пізніше використовуйте безпечну текстову мийку, а не вивчивши декодований рядок і відмітивши її назад до innerHTML.

Який підхід таблиці не обійтися — безвідповідні посилання на мітки та парсерські похибки-відновлювальні кілки, якщо навмисно реалізовано

Шукаю намір не відтворювати HTML правила відновлення пароколона. &копіювання без півколона може залишитися безглуздим. Фіксований названий стіл також оміє багато більше двох тисяч HTML5 названі посилання. Ці обмеження є чесними торгово-оффами для невеликого передбачуваного декодера; приймає тільки явні посилання, що припинені, не лікує довільний проза, що містить амперс і як розмітка. Перевірте відповідні імена інструментів, якщо важлива сумісність веб-переглядача.

Що це не покриває — санітінг HTML Ви маєте намір надати, що є різною проблемою

Випадкові посилання не санітарії HTML для відображення. Якщо декодований текст містить <script> послідовність, вона залишається небезпечною, якщо інша частина програми пізніше вставляє її як розмітка. Контексти, такі як HTML атрибут, JavaScript рядок і URL Кожна потреба у власних вихідних кодуваннях та політиці. ToolAcre повертає текст; це не може зробити майбутню небезпечну мийку.

Отримання: обробляти вхід як дані — як дані HTML суб'єкт втечу декодати з таблиці пошуку, а не HTML парсер, так що ваш вхід залишається текстом

Введіть дані. HTML суб'єкт викривлення декодів з таблиці та код-точковим арифмететичним, не є внутрішнім трюком ХТМЛ, тому розмітка перевантаження залишають інерційні символи в межах інструмента. Спробуйте три посилання, після чого перевірте як декодований текст, так і як ви плануєте його використовувати далі: межа безпеки втрачається, якщо ви переокремите його як HTML.