Статия
Кодирайте и декодирайте данни поверително
Всеки ден разработчиците поставят токени, полезен товар и идентификационни данни в страници за кодиране и декодиране. Най-удобните работят на сървър, което означава, че данните ви напускат устройството заради задача, която никога не го е изисквала. Тези четири инструмента работят изцяло в браузъра, така че данните остават при вас.
Base64: изглежда объркано, но не е тайна
Base64 е кодиране, а не криптиране. То превръща двоични данни в текст, който оцелява при копиране и поставяне или при преминаване през системи, работещи само с прости символи. Всеки, който вижда низа Base64, може да го декодира обратно до оригинала с една стъпка, затова низ, съдържащ API ключ, частен сертификат или тяло на имейл, е напълно четим за този, който го държи. Опасността е, че тази стойност често се крие в конфигурационни файлове, data URL или заглавки за удостоверяване и изглежда неясна, което изкушава да я поставите в първия открит онлайн декодер. Този декодер получава суровата тайна. Инструмент, който декодира Base64 локално, ви показва оригиналните байтове, без стойността изобщо да достига до сървър.

URL кодиране: заявните низове носят повече, отколкото мислите
Процентното кодиране ви позволява да поставите безопасно интервали, диакритични знаци и запазени символи в един URL. Текстът, който кодирате или декодирате, често е истински заявен низ от приложение, а те носят идентификатори на сесия, думи за търсене, имейл адреси, цели за пренасочване и понякога подписани параметри. Поставянето на пълен URL в отдалечен кодиращ инструмент предава всичко това на трета страна наведнъж, а заявните низове са точно онзи вид стойност, който се озовава в сървърните дневници. Да кодирате и декодирате в браузъра означава, че URL се обработва в паметта на собственото ви устройство и никога не се предава, докато работите по него.
JWT: полезният товар е подписан, а не скрит
Един JSON Web Token се състои от три раздела Base64url, свързани с точки: заглавка, полезен товар и подпис. Подписът доказва, че токенът не е променян, но по никакъв начин не скрива полезния товар, който се декодира в четим JSON с потребителски идентификатори, роли, времена на изтичане и всякакви потребителски твърдения, добавени от издателя. Валидният токен е също и жива идентификационна информация: докато не изтече, всеки, който го държи, може да действа като потребителя. Поставянето на работещ токен в онлайн декодер изпраща активна идентификационна информация към сървър, който не контролирате. Декодер, който разбира токена във вашия браузър, разкрива същата заглавка и полезен товар, без токенът изобщо да напуска страницата.

Хеширане: входът е по-важен от резюмето
Хеш функцията превръща всеки вход в резюме с фиксирана дължина и не можете да обърнете резюмето обратно до входа. Това свойство прави хеширането полезно за проверка на целостта на файл или за сравняване на стойности без съхраняване на оригинала. Уловката е от страната на входа: за да изчислите хеша на парола, документ или конфигурационна тайна, трябва да подадете истинската стойност на инструмента. Ако този инструмент работи на сървър, чувствителният вход пътува дотам, макар да се връща само безобидното резюме. Изчисляването на хеша локално задържа входа на устройството ви, така че получавате нужното резюме, без да излагате това, което сте хеширали.
Base64 кодиране: байтово съответствие и запълване
Base64 преобразува 8-битови байтове в 6-битови символи, като групира три входни байта (24 бита) в четири 6-битови стойности. Всяка 6-битова стойност се съответства на символ от азбуката на Base64 (A-Z, a-z, 0-9, +, /). Тъй като процесът изисква входове, делими на 24 бита, кратките входове се запълват: един останал байт произвежда два символа за запълване (==), а два останали байта произвеждат един (=). Вариантът Base64url, използван в JSON Web Tokens (JWT), заменя + с - и / с _, за да направи низа съвместим с URL, и премахва напълно запълването =, тъй като символите за запълване могат да причинят грешки в строгите URI анализатори. Разпознаването на тази разлика е важно при отстраняване на проблеми с обработката на токени: JWT, който изглежда деформиран, може просто да е кодиран с Base64url вместо стандартен Base64.
JWT подписи: HS256, RS256 и объркване на алгоритмите
Сигурността на JSON Web Token зависи изцяло от неговия подпис, третия сегмент, разделен с точка. При HS256 (HMAC-SHA256) сървърът подписва кодираното с Base64url заглавие и полезния товар с таен ключ. Хаш функцията SHA-256 осигурява устойчивост на колизии: изчислително е невъзможно да се произведе модифициран полезен товар, който генерира същия подпис, без да се знае тайният ключ. При RS256 сървърът подписва с RSA частен ключ и проверява с публичен ключ. Известна уязвимост, наречена объркване на алгоритмите, се появява, когато библиотека на сървъра не налага стриктно очаквания тип алгоритъм. Нападател може да промени полето alg в заглавието на токена от RS256 на HS256 и да подпише токена, използвайки публичния ключ на сървъра като HMAC тайна, тъй като публичните ключове често са достъпни. Локалното декодиране на JWT заглавието в браузъра ви позволява да проверите кой алгоритъм е действително зададен, без да излагате активния токен на системи за регистриране на трети страни.
Инструменти от тази статия
- Base64 кодиране/декодиранеКодирай или декодирай Base64, текст и файлове. Без качване, 100% локално.
- URL кодиране/декодиранеPercent-кодирай или декодирай URL низове. Без качване, 100% локално.
- JWT декодерДекодирай JWT (заглавие, полезен товар, срок на валидност) без изпращане навсякъде. Без верификация на подписа.
- Генератор на хешовеГенерирай MD5, SHA-1, SHA-256, SHA-512 хешове от текст или файлове. Без качване.
Често задавани въпроси
Base64 или URL кодирането форма на сигурност ли е?
Не. И двете са обратими кодирания, проектирани за безопасен пренос на данни, а не за защитата им. Всеки, който може да прочете кодирания низ, го декодира мигновено, без ключ или парола. Ако трябва да запазите дадена стойност поверителна, криптирайте я с подходящ алгоритъм и управлявайте ключа отделно. Третирайте всяка стойност в Base64 или с процентно кодиране така, сякаш е написана с обикновен текст.
Защо има значение къде декодирам токен или хеширам парола?
Защото входът е чувствителната част. Валиден JWT е жива идентификационна информация, а паролата, която хеширате, е истинската тайна. Инструмент, работещ на сървър, получава този суров вход още преди да върне резултат, което означава, че копие може да бъде записано в дневник или съхранено на място, което не виждате. Инструмент, който работи във вашия браузър, извършва същата операция в паметта на собственото ви устройство, така че токенът или паролата никога не се изпращат никъде.