Инструментарий данных для разработчиков — вопросы
Как набор инструментов обрабатывает ваши данные, какие утилиты являются точными и где каждая из них намеренно останавливается.
Краткая версия
Каждая утилита здесь запускается на вкладке вашего браузера. Ничего из того, что вы вставляете, не загружается и не сохраняется на сервере приложений ToolAcre. Аналитика в масштабе всего сайта выполняется только на настроенном каноническом рабочем хосте и описана в Политике конфиденциальности; вставленные значения исключаются из собственных аналитических событий ToolAcre.
Приведенные ниже вопросы решают, можно ли доверять конкретному результату. Там, где полезность точна, она так и говорит; где оно приближается или отказывается, оно тоже говорит об этом.
Что происходит с тем, что вы вставляете
- Каждое преобразование, хеширование, декодирование и различие выполняются на вкладке вашего браузера. Никакие входные данные не загружаются, не регистрируются и не сохраняются на сервере, поскольку после загрузки страницы сервер не задействован.
- Хэши берутся из собственной реализации Web Crypto в браузере, а UUID — из криптографически безопасного генератора случайных чисел. Ни один из них не предполагает сетевой вызов.
- Ничего из того, что вы вводите, не записывается в локальное хранилище или файл cookie. Перезагрузка страницы удаляет ее; закрытие вкладки отменяет ее.
- Аналитика в масштабе всего сайта выполняется только на настроенном каноническом рабочем хосте и описана в Политике конфиденциальности; локальные и предварительные хосты отказываются от этого. Вставленные значения, токены, URL-адреса и содержимое файлов исключаются из собственных аналитических событий ToolAcre. Реклама отключена в текущей конфигурации.
- Тем не менее: ключ JWT или API — это действующие учетные данные. Безопасная привычка — никогда не вставлять его на веб-страницу, которую вы не писали, какими бы заслуживающими доверия ни были его утверждения, включая эту.
Вопросы
Загружено ли что-нибудь, что я вставил?
Никакая загрузка ToolAcre не получит его. Каждое преобразование, хеширование, декодирование и различие происходит в вашем браузере. Аналитика в масштабе всего сайта ограничена настроенным каноническим производственным хостом и раскрыта в Политике конфиденциальности; вставленные значения, токены, URL-адреса и содержимое файлов исключаются из собственных аналитических событий ToolAcre.
Сохраняется ли что-нибудь между посещениями?
Нет. Инструментарий ничего не записывает в localStorage, sessionStorage, IndexedDB или файлы cookie. Перезагрузка страницы удаляет все, что вы ввели; закрытие вкладки делает то же самое. Системы учетных записей нет, поэтому нечего регистрироваться и нечего удалять.
Обрабатывает ли здесь base64 смайлы и неанглийский текст?
Да, именно. Текст преобразуется в UTF-8 байт перед кодированием и декодируется обратно с помощью строгого декодера, поэтому смайлы, CJK, арабский, объединяют метки и последовательности ZWJ, байт за байтом. Это конкретная ошибка встроенной в браузер функции btoa() — она выдает одни символы и молча выдает неверные байты для других.
Как валидатор JSON находит позицию ошибки?
С помощью собственного сканера, а не путем чтения сообщения об ошибке двигателя. Текст ошибки браузера JSON зависит от ядра, и в текущей версии V8 позиция полностью отсутствует в случае некоторых сбоев. Сканер просматривает документ и сообщает о первом неверном смещении JSON с указанием причины, написанной для человека — завершающая запятая, строка в одинарных кавычках, незавершенная строка — плюс строка, вызывающая сбой, и курсор.
Какие функции YAML поддерживаются?
Стандартная структура YAML 1.2, читаемая с помощью ограниченной схемы, которая может создавать только данные в форме JSON: строки, числа, логические значения, значения NULL, последовательности и сопоставления. Теги, создающие произвольные объекты, отклоняются. Вы можете выбирать между схемой JSON (самой строгой) и базовой схемой (которая также преобразует ~ и пустые значения в нулевые, шестнадцатеричные целые числа и .inf/.nan).
Почему мой файл YAML завершается с ошибкой с «неизвестным тегом»?
Потому что он использует собственный или специфичный для языка тег, например !!js/function, !!python/object/apply, !!binary или !!timestamp. Загрузчик, настроенный для их создания, представляет собой конструктор произвольных объектов, который на некоторых языках является классом ошибок удаленного выполнения кода. Этот инструмент намеренно отказывает им, а не делает исключение.
Хэши правильные?
Они вычисляются собственной реализацией Web Crypto в браузере, и набор тестов сверяет их с опубликованными векторами — SHA-256 из «abc» — это ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad, а векторы SHA-1, SHA-384 и SHA-512 проверяются вместе с дайджестами пустой строки.
Почему SHA-1 помечен как сломанный?
Потому что это так. Практический конфликт был опубликован в 2017 (SHattered), а конфликты по выбранному префиксу — вариант, который нарушает подписи и сертификаты — стал доступен в 2020. Он включен, чтобы вы могли воспроизводить существующие значения SHA-1, такие как идентификаторы объектов git и устаревшие сигнатуры API, что отличается от использования его.
Откуда берутся UUID?
Из crypto.randomUUID() или crypto.getRandomValues(), где случайный UUID недоступен. Оба являются криптографически безопасными генераторами браузера. Math.random() никогда не используется: его внутреннее состояние можно восстановить по небольшому количеству выходных данных, что делает все, что построено на его основе, предсказуемым. Если безопасный источник не существует, инструмент отказывается генерировать, а не незаметно переходит на более раннюю версию.
Проверяет ли декодер JWT подписи?
Нет. Он декодирует заголовок и полезную нагрузку и показывает вам, что они заявляют. Он не проверяет подпись, поэтому ничто из того, что он показывает, не доказывает, что токен является подлинным, неизмененным или выдан тем, кем он назван. Для проверки требуется ключ эмитента и закрепленный алгоритм, которые принадлежат системе, доверяющей токену, а не веб-странице.
Могу ли я вставить реальный токен доступа?
Вы можете, но не должны — ни здесь, ни где-либо ещё. Действующий токен — это удостоверение личности: тот, кто им владеет, может действовать от вашего имени до истечения срока его действия. Эта страница декодируется локально и ничего не отправляет, но это утверждение вы не можете проверить с первого взгляда ни на одном сайте, поэтому срок действия безопасной привычки истек или тестовые токены. Если вы уже где-то вставили его, поверните его.
Как работает разница текста?
Он вычисляет сценарий редактирования самой длинной общей подпоследовательности, который дает минимальный набор добавлений и удалений, а не простое построчное сравнение. Сначала обрезаются одинаковые начальная и конечная строки, поэтому сравнение двух больших файлов, отличающихся в одном месте, выполняется быстро.
Почему diff отказывается от очень больших входных данных?
Алгоритму LCS требуется время и память, пропорциональные произведению двух длин. После пары тысяч разных строк это становится выделением, которое вкладка браузера не должна пытаться выполнить, поэтому инструмент категорически отказывается и предлагает сравнить меньшую область. Файлы, которые содержат большую часть своего содержимого, обрезаются в первую очередь и сохраняются быстро независимо от общего размера.
Надежно ли обнаружение единицы временной метки?
Это документированная эвристика, и она никогда не молчит. Все, что находится на уровне 10^11 или выше, рассматривается как миллисекунды, поскольку 10^11 секунд — это год 5138, а 10^11 миллисекунд — это 1973. Фактически используемая единица измерения всегда отображается вместе с результатом, и вы можете ее изменить.
Работает ли инструментарий в автономном режиме?
Да, как только страница загрузится, сеть не нужна ничему, что она делает. Сервис-воркера нет, поэтому первоначальная загрузка все равно требует подключения.
На телефоне работает?
Да. Макет работает от 320 CSS пикселей вверх, текст формы — 16px, поэтому мобильный Safari не масштабирует фокус, а элементы управления соответствуют минимуму сенсорного сенсора в 44 пикселей. Редакторы и выходные данные прокручиваются внутри своих полей, поэтому длинная строка минимизированного JSON никогда не расширяет страницу.
Безопасно ли использовать дезинфицирующее средство редактора HTML для ненадежных входных данных?
Нет, и комиссия так говорит. Это список разрешений для собственного вывода редактора: элементы и атрибуты за пределами фиксированного списка удаляются, обработчики событий не могут выжить, поскольку ни один атрибут не сохраняется, если он не указан в списке, и сохраняются только http, https, mailto, tel, ftp и относительные ссылки. Это делает то, что генерирует этот редактор, безопасным для вставки на страницу, которой вы управляете. Это не универсальный фильтр XSS — это строковый токенизатор, а не синтаксический анализатор HTML5, поэтому вредоносная полезная нагрузка в принципе может быть проанализирована браузером по-другому. Предварительный просмотр представляет собой изолированный iframe без разрешающих сценариев, поэтому в нем все равно ничего не может выполняться.
Почему калькулятор chmod иногда показывает S и T заглавными буквами?
Потому что специальный бит установлен, а соответствующий бит выполнения — нет. 4755 — это rwsr-xr-x, программа с установленным идентификатором, которую можно запустить; 4644 — это rwSr--r--, файл setuid, который никто не может выполнить, что почти всегда является ошибкой. Заглавная буква — это система, говорящая вам, что биту не на что воздействовать, а калькулятор, который показывает строчную букву s, скрывает то единственное, что вам нужно увидеть.
Конвертер докеров когда-либо запускал команду, которую я вставляю?
Нет. Он разбивает строку с помощью токенизатора, учитывающего кавычки, и считывает фрагменты. В кодовой базе нет ни eval, ни оболочки, ни дочернего процесса. Обратные кавычки, $(...) и точки с запятой остаются буквальными символами. Любой флаг, который он не может преобразовать, указывается в видимом предупреждении, а не удаляется, потому что файл компоновки, который молча делает меньше, чем команда, из которой он пришел, — это худшее, что может создать этот инструмент.
Почему время предварительного просмотра cron не соответствует моему серверу?
Обычно часовой пояс: cron использует зону компьютера, на котором он работает, а предварительный просмотр использует выбранную вами зону, поэтому установите ее в соответствии с зоной вашего сервера. Другой вероятной причиной является правило дня: если установлены и день месяца, и день недели, cron запускается, когда совпадает EITHER, что срабатывает чаще, чем ожидает большинство людей. Генератор предупреждает, когда это применимо.
Есть ли реклама или аналитика?
Реклама отключена в текущей конфигурации. Аналитика в масштабе всего сайта выполняется только на настроенном каноническом рабочем хосте и описана в Политике конфиденциальности; вставленные значения, токены, URL-адреса и содержимое файлов исключаются из собственных аналитических событий ToolAcre.
Ограничения
- Все работает в одной вкладке браузера, поэтому каждая утилита ограничена памятью вашего устройства. Каждый из них имеет явное ограничение ввода и отказывается от негабаритной работы, а не замораживается.
- Для хеширования и генерации UUID требуется безопасный контекст (https:// или localhost), поскольку именно здесь браузеры предоставляют Web Crypto.
- Декодер JWT никогда не проверяет подписи, а зашифрованные токены JWE вообще не могут быть декодированы.
- YAML читается со схемами только данных; документы, использующие пользовательские теги, по своей природе отвергаются.
- Таблица сущностей HTML охватывает практическое подмножество, а не все именованные ссылки 2,231 HTML5, а неизвестные имена сообщаются, а не угадываются.
- Дифференциал сравнивает целые строки. Внутри измененной строки нет выделения на уровне слов или символов.
- Санитайзер редактора HTML представляет собой список разрешений для собственного вывода, а не универсальный фильтр XSS для ненадежных входных данных, и он не имеет изображений, таблиц или стилей.
- Конвертер Docker обрабатывает одну команду запуска Docker за раз и называет каждый флаг, который он не может представить, вместо того, чтобы отбрасывать его.
- Генератор cron считывает только синтаксис crontab из пяти полей, и время его следующего запуска — это предварительный просмотр, основанный на данных о часовом поясе браузера, а не гарантия вашего сервера.