Що сталося в листопаді 2025
JSONFormatter і CodeBeautify дозволяли натиснути «зберегти» й отримати посилання на вставлений текст. Обидва ще й показували збережені вставки на публічних сторінках «Recent Links», а посилання легко перебиралися. Дослідники watchTowr Labs зібрали понад 80 000 таких вставок (п’ять років JSONFormatter і рік CodeBeautify) та знайшли облікові дані Active Directory й баз даних, хмарні ключі й ключі CI/CD, приватні ключі, персональні дані й багато іншого — з державних установ, банків, медицини й телекому. Пастки-«канарки», які вони підклали, використали за кілька днів: сайти вже скрапили в пошуках секретів. Читайте звіти BleepingComputer і Help Net Security.
Ніхто нічого не зламував. Сайти працювали, як було задумано: текст залишав браузер, зберігався на сервері й був доступний за адресою. Вставити робочий конфіг «лише щоб він став читабельним» — це передача даних третій стороні, а кнопка «зберегти» перетворює її на публікацію.
Як DevBench тримає ваше введене у вкладці
- Роботу виконують скрипти сторінки. Розбирач JSON, хеш-функції (MD5, SHA-1, SHA-256, SHA-384, SHA-512, CRC32, HMAC), код Base64, URL і JWT — частина самого DevBench, написана для нього й перевірена за офіційними тестовими векторами. Лише дві бібліотеки приходять ззовні: js-yaml і PapaParse, з cdnjs, перевірені за хешами (Subresource Integrity), і лише на вкладці YAML і CSV.
- Сторінці не дозволено нічого надсилати. Вона оголошує власну політику безпеки: з’єднання лише з самим fof.lol (для офлайн-кешу) та з лічильником відвідувань, а форми надіслати не можна. Навіть помилка в коді не змогла б відправити ваш текст на інший сервер. Лічильник бачить адресу сторінки без нічого після знака #, а те, що ви вводите, в адресі не з’являється ніколи.
- Жодних збережених посилань, історії чи сховища. Введене й результати існують лише в пам’яті сторінки й зникають, коли ви закриваєте чи перезавантажуєте вкладку. У цьому браузері запам’ятовуються налаштування: ширина відступу, позначені алгоритми, перемикачі. Ніколи — тексти, ключі, файли чи результати.
- Файли лишаються на місці. Файл читає частинами фоновий потік, і він ніколи не вивантажується; великі файли не заморожують сторінку.
- Це можна перевірити. Відкрийте вкладку Network в інструментах розробника браузера й вставте щось: нічого не надсилається. Відкрита сторінка працює й без мережі. Прихована самоперевірка за адресою
#/selftestзапускає тестові вектори у вашому браузері.
JSON: формат, перевірка, дерево
Форматувати робить відступ 2 чи 4 пробіли або табуляцію; Мініфікувати прибирає всі пробіли; Сортувати ключі впорядковує ключі А→Я на кожному рівні. Текст перевіряється під час введення. DevBench читає суворий JSON (RFC 8259) і повідомляє про першу помилку з рядком і стовпцем, позначає символ у полі вводу та пояснює звичайні промахи простими словами: кома наприкінці, одинарні лапки, коментарі, ключі без лапок, NaN і undefined.
Він не розбирає текст у значення JavaScript, щоб надрукувати їх знову, тож нічого по дорозі не змінюється: 12345678901234567890 лишається таким (JavaScript перетворив би його на 12345678901234567000), 1.0 лишається 1.0, екранування в рядках лишається як було, а повторені ключі зберігаються й позначаються. Екранувати рядок і Розекранувати рядок перетворюють текст на вміст літерала рядка JSON і навпаки.
Вигляд Дерево розгортає гілки за клацанням (великі масиви — по 300 елементів). Клацніть ключ, щоб скопіювати його шлях на кшталт $.items[2].name; кнопки шлях і значення копіюють шлях або відформатоване значення. Файли від 10 МБ і більше обробляються у Web Worker, тож сторінка не зависає; дерево працює до 3 МБ. Перетягніть файл на поле вводу або натисніть Відкрити файл; файл не в UTF-8 читається як Windows-1251.
Конвертери YAML і CSV
JSON ⇄ YAML працює на js-yaml за правилами YAML 1.2: no і yes лишаються текстом, а не стають булевими (так звана «проблема Норвегії»), дати лишаються текстом, якорі та ключі злиття (<<) розкриваються, повторений ключ — це помилка з позицією, а кілька документів, розділених ---, стають масивом.
JSON ⇄ CSV працює на PapaParse. Вкладені об’єкти сплющуються в колонки a.b.c; масиви стають a.0, a.1 або лишаються JSON в одній клітинці; колонки — об’єднання всіх ключів. Виберіть роздільник (кома, крапка з комою для Excel у багатьох європейських локалях, табуляція, риска) і чи брати в лапки кожну клітинку. UTF-8 з BOM робить так, що завантажений файл відкривається в Excel із цілою кирилицею та іншими літерами. Знешкодити формули додає префікс клітинкам, що починаються з =, +, - або @, щоб таблиця не могла їх виконати. У зворотний бік колонки a.b.c збираються назад в об’єкти, числа та true/false розпізнаються лише там, де читаються назад однаково (007 лишається текстом), а роздільник визначається сам.
Base64 і data:-URL
Текст кодується як UTF-8, тож кирилиця й емодзі виходять правильно (звичайна функція браузера btoa на них падає). Виберіть стандартну абетку або URL-безпечну (- і _, як у JWT), доповнення = чи без нього, і рядки по 76 символів (MIME). Декодування приймає обидві абетки, переноси рядків і відсутнє доповнення та вказує на перший хибний символ.
Із режимом Файл або картинка будь-який файл стає Base64, а текст Base64 декодується назад у файл; результат показується як текст, якщо це коректний UTF-8, і як шістнадцятковий дамп із кнопкою Завантажити, якщо ні. Позначте Додати префікс data:, щоб отримати data:image/png;base64,…, готовий для CSS чи HTML; вставлений data:-URL розбирається і, якщо це картинка, показується в попередньому перегляді. Картинки визначаються за першими байтами, а не за тим, що стверджує назва. Base64 приблизно на третину більший за оригінал.
Кодування й розбір URL
Компонент кодує все, крім літер, цифр і - _ . ~ (годиться для одного значення запиту); Повна адреса зберігає : / ? # & =; Форма записує пробіли як +. Декодування називає позицію зламаного %.
Розбирач ділить адресу на схему, користувача, пароль, хост, порт, шлях і фрагмент та показує параметри запиту в таблиці — у їхньому порядку й з повторами. Змінюйте будь-яку клітинку або додавайте, видаляйте й сортуйте параметри; адреса збирається наживо, а значення кодуються знову.
Хеші й перевірка завантаження
Виберіть будь-які з MD5, SHA-1, SHA-256, SHA-384, SHA-512 і CRC32 — для тексту чи файлу, у вигляді hex або Base64. Позначте HMAC і введіть ключ (текст або hex), щоб отримати хеш із ключем. Файли читаються частинами з індикатором виконання, швидкістю й кнопкою «Скасувати», тож образ у кілька гігабайтів — не проблема.
Щоб перевірити завантаження, вставте контрольну суму від видавця в поле Порівняти з очікуваною сумою: звичайний хеш, рядок із sha256sum, Base64 або значення integrity на кшталт sha384-…. DevBench вибирає алгоритм за довжиною, каже Збігається або Не збігається і підсвічує рядок. Збіг означає, що файл — саме той, для якого рахувалась сума; сама сума має бути з надійного місця, найкраще іншого, ніж завантаження. MD5 і SHA-1 можна підробити навмисно, тож вони ловлять лише випадкові збої; CRC32 — перевірка на помилки, а не безпека.
Читання JWT
JSON Web Token — це три частини Base64URL: заголовок, вміст і підпис. DevBench показує заголовок і вміст як відформатований JSON, розфарбовує три частини та перетворює дати exp, nbf і iat на зрозумілий час у вашому поясі й UTC із підписом на кшталт «за 2 години» чи «3 дні тому», позначаючи прострочений токен, токен, що ще не діє, і токен, виданий у майбутньому. Дата в мілісекундах теж помічається.
Розкодувати — не означає перевірити. Токен може прочитати будь-хто й будь-хто може його підробити, тому сторінка завжди попереджає, що підпис не перевірено. Для HS256, HS384 і HS512 можна ввести спільний секрет (текстом, Base64 чи hex), і DevBench перевірить підпис локально криптографією браузера. Токени, підписані парою ключів (RS256, ES256, …), потребують публічного ключа й надійної бібліотеки на вашому сервері. Токен з alg: none позначається: підпису в нього немає зовсім. П’ятичастинні токени зашифровані (JWE) і не читаються без ключа.
UUID, час, системи числення, сутності, регулярні вирази
- UUID v4 (випадковий) і v7 (Unix-час у перших 48 бітах, тож ідентифікатори сортуються за часом створення; створені в ту саму мілісекунду продовжують зростати), до 1000 за раз, великими літерами, без дефісів чи у фігурних дужках. Вставте UUID, щоб побачити його версію, варіант і, для v7, коли його створено.
- Unix-час: секунди, мілісекунди, мікросекунди чи наносекунди розрізняються за розміром; дата показується в UTC, у будь-якому часовому поясі з бази вашого браузера та словами. У зворотний бік дата у вибраному поясі стає міткою часу, а літній час враховується за правилами поясу.
- Системи числення 2, 8, 10, 16, 36 і власна, з числами будь-якого розміру (без межі 253), префіксами
0x,0b,0oі роздільниками. - HTML-сутності: кодувати лише небезпечні символи, додати поширені назви на кшталт
©або записати кожен не-ASCII символ числом; декодування розуміє всі іменовані сутності, а нічого з тексту не виконується. - Регулярні вирази (JavaScript): збіги підсвічуються, групи — пронумеровані й іменовані — перелічуються, є й необов’язкова заміна. Перевірка йде у власному фоновому потоці й зупиняється через дві секунди, тож вираз із катастрофічним відкатом не заморозить сторінку.
Зручно: Ctrl+Enter (⌘+Enter на Mac) запускає поточний інструмент, файли можна перетягувати в поля вводу, а кожна вкладка має власну адресу (#/json, #/base64, #/hash…).
Обмеження
- Ваш браузер усе ще в ланцюжку. Розширення можуть читати те, що на сторінці; тримайте секрети подалі від браузера, якому не довіряєте. DevBench не захистить скомпрометований пристрій.
- Бібліотеки YAML і CSV завантажуються з cdnjs першого разу, коли ви відкриваєте ці вкладки (потім кешуються для офлайн-роботи). Усе інше мережі не потребує зовсім.
- Дерево JSON працює до 3 МБ; більші файли можна відформатувати, але не переглянути деревом.
- JSON має бути суворим: JSON5, коментарі й коми наприкінці повідомляються, а не вгадуються.
- Хешування в браузері повільніше за рідний інструмент (щонайбільше сотні мегабайтів за секунду для SHA-256, десятки для SHA-512); для образу на 50 ГБ беріть
sha256sum. - CSV у JSON не відрізняє порожню клітинку від відсутнього значення, а JSON
nullстає порожньою клітинкою.
Часті запитання
DevBench справді працює офлайн?
Після першого візиту сторінки й скрипти кешуються браузером, і все, крім перетворення YAML та CSV, працює без мережі. Ці дві бібліотеки кешуються першого разу, коли їх використано.
Чи може власник сайту бачити, що я вставляю?
Ні: текст ніколи не залишає сторінку, а політика безпеки сторінки забороняє надсилати його кудись іще. Переконатися можна у вкладці Network браузера.
Чому б не скористатися форматером мого редактора?
Користуйтеся, коли він є. DevBench — для телефона, чужого комп’ютера, швидкого погляду на токен чи контрольну суму, або коли нічого не встановлено.
Чому мій JSON «некоректний», хоча програма його приймає?
Багато розбирачів поблажливі (коментарі, одинарні лапки, коми наприкінці, NaN). DevBench дотримується стандарту, щоб те, що він приймає, приймав кожен розбирач.
Чи безпечно розкодовувати тут робочий JWT?
Розкодування відбувається локально, тож нічого не надсилається. Проте ставтеся до чинного токена як до пароля: він може давати доступ, доки не спливе.
Який хеш використовувати?
SHA-256 — для перевірки завантажень і загального вжитку. MD5 і SHA-1 — лише коли сайт не пропонує нічого іншого, і ніколи для безпеки.