Інструменти розробника · URL енкодер & декодер
УРіРор: URI malformed — чому decodeURIComponent кидає і як її виправити
· Як працює
Опубліковано ToolAcre · Редакція журналу
виворітна обробка Завантажити плагін error-handling

decodeURIComponent кидає, коли знак відсотків не слідувати двома цифрами, або коли декодовані байти не діють UTF-8. Цей пост показує вводи, які запускають його і як відшифрувати оборонно.
Знак відсотків, який збиток — чому "100% off" розбиває декоду
Форма збирає код знижки "100% від. JavaScript переходить до декодуріком URL декодер. Функція кидає УРірор: URI мальформовані. Знак відсотка не слідувати двома шестигранними цифрами. Це порушує правила, що напружуються. декодурікомітет очікує кожного %, щоб почати потрійу, як %20 %C3. Lone % - це синтаксисна помилка, яка зупиняє виконання відразу і кидає помилку.
Збереження цієї помилки безпечно запобігає аварійним збою програми. URL-адреси прибувають з введення користувача, перенаправлення, QR-коди та електронні листи. Такепо часто буває. Урійник розповідає про те, де слід швидко розслідувати. Декодування за допомогою декодування зберігає програми, що працюють та журнали помилок стають корисними для дебугментації.
Два види збій — знебочений шісточок втечу і недійсний UTF-8 байтні послідовності
декодурікомітету кидає в рівно два ситуації. Перший: мальформована послідовність втечу. На жаль, не слідувати двома цифрами (наприклад, якщо ви не з'явитеся)0-9, А-Ф, а-ф. Приклади: %ZZ, %2, %2g. Другий: дійсний потрійний %E9 декодування недійсним UTF-8 байти. Перша помилка формата. Друга - сеймантична помилка. І кидати і зупинити виконання відразу.
UTF-8 має строгі правила про послідки байтів. Bytes 0x80–0xFF з’являються лише в багатобайтних послідовностях. Один %E9 не може бути дійсним UTF-8 єдино. Цей притулок байтів викликає помилку. Відповідність форматів є очевидними. Семантичні помилки є тонкими, але однаково реальними. Як потрібно спробувати/catch обробка в виробничому коді.
Ногатна однобайтна кодування — коли %E9 кидає, але %C3%A9 виживає
Конфузійні стебла з історії веб-стандартів. Старі сторінки, які використовуються латинсько-1 замість UTF-8. В Латинсько-1, %E9 представлена é. Модернізація веб-переглядачів UTF-8 виключно. UTF-8 коди е як %C3%A9. Відбувся сучасний декодери UTF-8 і відхилення %E9 як зловживати. Це правильно поведінкою. Помилки сигнали про проблему з вихідними даними.
Сучасні консенсусії: UTF-8 скрізь. Мистецтво URL Стандартні характеристики UTF-8. Усі поточні браузери UTF-8. Якщо ви зіткнулися %E9 з старих систем, зловити помилку і зловити до сирої стружки. Не декодувати як латинська-1 в сучасному коді. Інвестига, де дані, що виникли з.
Три вводи, три повідомлення про помилку — як двигуни розрізняються на одному з розбитих рядках
Драйвери відхилити незмінний вхід, послідовно, але помилки в попереку. Хромові звіти "URI мальформовані. Звіти про Firefox "Мультифікований" URI послідовність. Сахари звіти "не можна конвертувати не визначено об'єкту". Всі три двигуни відхиляють ідентичний вхід. Виключне слово повідомлення не стандартизовано по різних двигунах або версіях. Ніколи не повторюємо текст помилки, щоб керувати логікою коду.
Ніколи не нав’язувати повідомлення про помилку для прийняття рішень програми. Завжди ловити УРіРор за типом. Функція decodeUrl обгортає декодурі компонент і забезпечує послідовний код INVALID_PERCENT_ENCODING. Це імена точне положення задачі. Працює в режимі runtimes, тому що не залежить від варіацій головки двигуна. Цей підхід є більш надійним і надійним.
Читання винятків безпечно — спробуйте/catch, визначення та запади шаблонів
Найпопулярніші захисні шаблони: обгортання декодуРікомпонента намагатися/catch. Якщо це кидає, використовуйте сирий рядок або замінний характер. Це запобігає збитковому вводі від аварійного збою. Для значень запиту, показати значення URL-кодовано форму. Для користувача-замінного тексту вставте замінний характер. Це забезпечує поганий вхід від розбиття додатків і підтримує стійкість.
Передоплата з регулярними виразами для швидкості та безпеки. Перевірити цей вхід містить тільки дійсні %XСх трилетки перед розшифруванням. Патерн /%[0-9A-Fa-f]{2}/g зловживання дійсними втечу; що незрівнянний недійсний. Формат помилок не швидко на явному сміття. UTF-8 помилки все ще потрібно спробувати/catch. Разом з цим забезпечує комплексний захист від помилок.
Сильовані несправності приховують помилки — чому сліпий декодування є ризиком, як розбитий кодування
Підключіть ризик: декодер не кидає, але мовно випускає неправильний текст. Старий код з використанням неопаливних безпрайскейпних листя UTF-8 пам'яті. Текст виглядає відмінно на екрані до досягнення систем, які діють UTF-8 строго. Сучасний код кидає не пошкоджені мовчки. Виняток є більш чітким і безпечним, ніж німа система захисту даних, що поширюється на потік.
Зменшений вхід користувача. Завжди загортайте дзвінки. Помилки журналів з оригінальним введенням для відбілювання. Не приймаємо кожного % дійсний. Типо і трунка створюють неповні втечі. Порада як помилки даних, не логічні помилки. Захищаючи код виживає поганий вхід, який буде надійно зберігати системи.
Які реальні інструменти пропустити — серверна поведінка та відновлення помилок
Серверні рамки ручать пошкоджені кодування більше leniently, ніж браузери. Ruby, Python та PHP пропонує конфігурацію для обробки недійсних втечу у URL. Деякі символи заміни заміни заміни автоматично. Інші краплі байтів мовчно. Деякі винятки кидання, такі як JavaScript ..... Фактична поведінка залежить від параметрів та налаштування параметрів налаштування, обраних розробниками.
У статті розглянуто браузери JavaScript тільки поведінка. Якщо значення надходять від API сервера, сервер вже декодовано або пропущено помилки перед відправкою. Сервери можуть бути більш привабливими, ніж клієнти. Коли писати API укладення договорів, вкажіть, чи є значення сирої або попередньо декодовані. URL кварелі запиту повинні прибути відсотків-кодовані; JSON може прибути попередньо закодовані.
Дійсно рано — за допомогою URL encoder & decoder для перевірки підозрілих рядків перший
Перед проходженням підозрілих URL-адрес для декодування URL енкодер і декодер. Інструмент показує точний кодування, плями, що не утворюються втечі та пояснює помилки без аварійного завершення програми. Тест з %ZZ, %E9 і 100%, щоб побачити різні помилки та їх точну повідомлення про помилки. Це займає секунди і збудує впевненість.
Дійсно рано, зловити помилки витончено і увійти, що зламався. Засіб для тестування декодера плюс зберігає програми, що працюють і дебуджуються. URL енкодер & декодер повороти "URI malformed" в актуальну інформацію, яку можна використовувати відразу. Застосовувати цей шаблон для власних декодаторів для збереження та підтримки виробничих середовищ.