Чего не может сделать Developer Data Toolkit
У каждой полезности здесь есть преимущество. На этой странице указано, где каждый из них останавливается, почему и что использовать вместо него — так что вы узнаете об этом до того, как начнете от него зависеть, а не после.
Ограничения, которые применимы ко всему
Вся обработка происходит в одной вкладке браузера, используя память вашего устройства. Именно это делает заявление о конфиденциальности правдивым, а также является источником всех ограничений на размер, указанных ниже. Каждая утилита явно ограничивает ввод данных и отказывается от чрезмерной работы, предоставляя четкое сообщение, а не замораживая страницу.
Двум функциям нужен безопасный контекст — https:// или localhost — потому что это единственное место, где браузеры предоставляют веб-крипто API: хеширование SHA и генерацию UUID. При открытии обычного HTTP по адресу LAN оба сообщат вам, что они недоступны. Ни один из них не заменит рукописную реализацию, поскольку стоит доверять собственной версии браузера.
Сервис-воркера нет, поэтому для первой загрузки требуется сетевое подключение. После этого инструментарий ничего не делает.
JSON
Строго только RFC 8259. Комментарии, конечные запятые, строки в одинарных кавычках, ключи без кавычек, а также NaN или Infinity отклоняются — это функции литерала объекта JSON5 или JavaScript, а не JSON. Валидатор называет, какой из них он нашел, поэтому отказ, по крайней мере, имеет право на действие.
Числа анализируются как IEEE-754, что и делает JSON.parse. Целые числа за пределами 2^53 теряют точность при обратном обходе. Если вы обрабатываете большие идентификаторы, они должны быть строками в самом JSON — ни один инструмент JavaScript не сможет восстановить значение, которое формат не может представить.
Порядок ключей сохраняется в том виде, в котором они записаны, а необязательная сортировка применяется только к ключам объекта. Порядок массива никогда не меняется, поскольку изменение порядка массива меняет данные, а не их представление.
Документы длиной около 8 миллионов символов отклоняются.
Конвертеры синтаксиса
Девять направленных преобразований — JSON в YAML, YAML в JSON, JSON в XML, XML в JSON, JSON в от TOML, от TOML до JSON, от YAML до TOML, от TOML до YAML, от JSON до CSV. Все, что не включено в этот список, отвергается предложением с указанием существующего маршрута. Полный набор соглашений находится на странице конвертеров; в этом разделе указано, где прекращаются преобразования.
CSV записывается и никогда не читается. Чтение его означает угадывание разделителя, диалекта кавычек, строки заголовка и типа каждой ячейки — четыре предположения, и конвертер незаметно ошибается.
Комментарии теряются во всех направлениях, во всех форматах, где они есть.
YAML загружается с ограниченной схемой, которая может создавать только данные в форме JSON. Пользовательские и специфичные для языка теги — !!js/function, !!python/object/apply, !!binary, !!timestamp, !!set, !!omap — отклоняются. Это намеренно: загрузчик, который их создает, является конструктором произвольных объектов.
В схеме по умолчанию JSON «~» и пустое значение являются строками, а не нулевым значением, а «да» — это строка «да». Опция «Базовая схема» разрешает их так, как ожидает большинство людей. Оба безопасны; они различаются скалярной интерпретацией, и инструмент объясняет, что есть что в момент выбора. Ни один из них не читает NO как ложь — это поведение YAML 1.1, а это YAML 1.2.
Многодокументный поток YAML становится массивом документов, поскольку ни один другой формат здесь не имеет потока. Привязки и псевдонимы разрешаются, а не сохраняются, рекурсивный псевдоним отклоняется, а документ, размер которого превышает миллион значений после следования его псевдонимам, отклоняется — шаблон YAML «миллиард смеха». Повторяющийся ключ сопоставления сохраняет последнее значение, и инструмент сообщает об этом.
YAML бесконечность и NaN не имеют представления ни в одном целевом формате. Вместо того, чтобы позволить JSON.stringify молча записать значение null, инструмент преобразует и предупреждает вас, что это произошло.
Документ XML, содержащий DOCTYPE, категорически отвергается, включая безобидные, поэтому ни один внешний объект не может быть разрешен, и ни одна цепочка объектов не может быть расширена. Нет возможности это разрешить. XML смешанный контент теряет положение текста относительно дочерних элементов, один повторяющийся элемент невозможно отличить от неповторяющегося, и каждое значение является строкой, если не включен вывод типа.
TOML имеет четыре временных типа, которых нет у JSON, YAML и XML. Каждый из них становится строкой RFC 3339, в которой он был записан, поэтому циклический обход TOML преобразует эти значения в строки; пути без потерь не существует. TOML не имеет нулевого значения, поэтому нулевые ключи удаляются из вывода TOML. Корнем документа TOML должна быть таблица, поэтому массив или скаляр JSON вообще не может стать TOML. Целые числа после 2^53 становятся строками, а не округляются автоматически.
CSV не может отличить пустую строку от нулевой. Вложенные значения преобразуются в имена столбцов, разделенные точками, поэтому ключ, который уже содержит точку, создает неоднозначное имя, о котором выдается предупреждение, а не экранирование. Текстовые ячейки, начинающиеся с =, +, -, @, табуляции или возврата каретки, имеют префикс апострофа, поскольку электронные таблицы обрабатывают их как формулы.
Ввод ограничен для каждого формата: 8 миллионов символов для JSON, 4 миллионов для XML, 2 миллионов для YAML и TOML. Вывод CSV ограничен 100,000 строками и 2,000 столбцами.
База64
Только текст. Здесь нет загрузки файла: чтобы закодировать файл, вам нужно его прочитать, и этот набор инструментов построен на текстовом поле. Используйте для этого файлово-ориентированный инструмент.
Декодирование создает текст, когда байты действительны UTF-8, и сообщает о чистой ошибке, когда это не так — в этот момент представление байтов вместо этого покажет вам шестнадцатеричный код. Произвольная двоичная полезная нагрузка не является текстом, и если представить обратное, это приведет к ее повреждению.
Ввод более 4 миллионов символов отклонен.
Кодировка URL
Три предлагаемых правила — компонент, целое — URL и форма — это три, которые определяет платформа. Варианты для конкретных приложений (AWS канонизация SigV4, процентное кодирование OAuth 1.0a) незначительно отличаются и не предоставляются.
Инспектору URL нужен абсолютный URL со схемой. Относительный путь не может быть разложен на хост, путь и запрос, потому что у него их нет.
Интернационализированные доменные имена отображаются в том виде, в каком их нормализует браузер, и это может быть Punycode, а не исходный скрипт.
HTML объектов
Таблица именованных сущностей охватывает практическое подмножество — важные для разметки символы, типографику, валюту, стрелки, математические символы, греческий и латиница — 1 — а не все именованные ссылки 2,231 HTML5. Имена за его пределами перечисляются за вас и оставляются точно так, как написано, потому что придумывать персонажа было бы хуже, чем оставлять текст в покое.
Требуется завершающая точка с запятой. HTML5 допускает наличие нескольких устаревших ссылок без одной, но их правильное разрешение зависит от окружающей разметки, которой нет в автономном текстовом инструменте.
Декодирование выполняется за один проход, поэтому "&lt;" декодирует в текст «<», а не в «<». Это верно: двойное кодирование, по-видимому, было преднамеренным.
Это экранирует текст для HTML. Это не HTML дезинфицирующее средство — оно не возьмет документ, полный разметки, и не удалит опасные части. Это другая и гораздо более сложная работа.
Временные метки
Обнаружение единиц измерения осуществляется эвристически: 10^11 и выше считывается как миллисекунды. Он всегда отображается и всегда переопределяется, но это предположение о неоднозначном вводе.
Микросекундные и наносекундные метки времени, которые выдают некоторые базы данных, не обнаруживаются. Сначала разделите на 1,000 или 1,000,000.
При преобразованиях используется время POSIX, у которого нет дополнительных секунд — 23:59:60 здесь не существует, как и ни в одной временной метке Unix.
Рендеринг по местному времени использует настроенную зону вашего браузера. Вы не можете выбрать произвольную зону IANA для рендеринга.
Значения за пределами примерно ±273,790 лет от эпохи превышают то, что могут представлять даты JavaScript, и отклоняются.
UUID
Создается только версия 4 (случайная). Версии 1 и 6 требуют адреса MAC и стабильной тактовой последовательности; версии 7 нужен монотонный счетчик, чтобы что-то стоить; версии 3 и 5 основаны на имени и требуют пространства имен и хеша, который браузер не предоставляет для этой цели.
Валидатор распознает каноническую текстовую форму и сообщает версию и вариант. Он не может сказать вам, правильно ли сгенерирован UUID — версия 4 UUID, созданная слабым генератором, выглядит идентично хорошему.
Пакет ограничен значениями 500.
Без Web Crypto ничего не генерируется. Возврат к Math.random() приведет к созданию предсказуемых идентификаторов, поэтому вместо этого инструмент отказывается.
SHA хешей
Только SHA-1, SHA-256, SHA-384 и SHA-512, потому что это то, что реализует SubtleCrypto. MD5 отсутствует по необходимости и по выбору.
SHA-1 присутствует для совместимости с устаревшими версиями и помечается как криптографически взломанный везде, где он появляется. Не используйте его для чего-либо, чья безопасность имеет значение.
Только текст — без хеширования файлов, по той же причине, по которой в base64 нет ввода файлов.
Нет HMAC, нет получения ключа, нет хеширования пароля. Для паролей требуется медленная, соленая и требовательная к памяти функция, такая как Argon2id, scrypt или bcrypt; быстрый универсальный хэш — неправильный инструмент, и его использование — скорее серьезная ошибка, чем маленькая.
Разница в тексте
Только сравнение на линейном уровне. Внутри измененной строки нет выделения на уровне слов или символов.
Измененная строка отображается как удаление и добавление, и именно так ее представляет сценарий редактирования на основе строки.
Перед сравнением одинаковые начальные и конечные строки обрезаются, поэтому большие файлы, отличающиеся в одном месте, выполняются быстро. То, что остается, ограничено 2,000 различными строками на каждой стороне, после чего инструмент отказывается, а не пытается выполнить выделение, которое приведет к уничтожению вкладки.
Здесь нет трехстороннего слияния, применения исправлений и понимания синтаксиса.
JWT декодирование
Только декодирование. Подписи никогда не проверяются, и это не изменится — причина изложена в руководстве по токенам.
Зашифрованные токены (JWE, пять сегментов) невозможно декодировать без ключа. Инструмент идентифицирует их и останавливается.
Вложенные токены не разворачиваются автоматически; декодируйте внутренний токен отдельно.
Утверждения вне зарегистрированного набора RFC 7519 отображаются без интерпретации, поскольку их значение зависит от приложения.
Токены, содержащие более 200,000 символов, отклоняются.
Визуальный HTML-редактор WYSIWYG
Санитайзер — это список разрешений для собственного вывода этого редактора, созданный на основе строкового токенизатора, а не на полноценном синтаксическом анализаторе HTML5. Это не фильтр XSS общего назначения, и его использование было бы ошибкой: браузер может проанализировать намеренно искаженную полезную нагрузку в другое дерево, чем это делает токенизатор. Недоверенный HTML принадлежит серверному дезинфицирующему средству, работающему с реальным синтаксическим анализатором.
Сохраняются только перечисленные элементы: абзацы, заголовки, выделение, списки, ссылки, кавычки, код и несколько встроенных тегов. Все остальное разворачивается, поэтому его текст остается, а тег — нет. Изображения, таблицы, цвета, шрифты и встроенные стили отсутствуют, и добавить их невозможно.
script, style, iframe, object, embed, form, svg, math и другие элементы необработанного текста или внешнего контента удаляются вместе со всем, что находится внутри них.
Ссылки могут использовать http, https, mailto, tel, ftp или относительный адрес. Все остальное, включая javascript:, data: и blob:, отклоняется, как и адрес, содержащий ссылку на символ вне таблицы сущностей этого инструмента.
Область редактирования использует document.execCommand. Он устарел, его замена не реализована ни в одном браузере, а поведение в разных движках различается, особенно для вложенных списков. Исходный режим — это аварийный выход, когда команда делает неправильные действия.
Документы, длина которых превышает 500,000 символов, отклоняются.
Калькулятор chmod
Только двенадцать битов разрешений: чтение, запись и выполнение для владельца, группы и других, плюс setuid, setgid и Sticky. Списки управления доступом, расширенные атрибуты, контексты SELinux, возможности и списки управления доступом Windows — все это находится за пределами того, что может выразить режим.
Команда, которую он создает, представляет собой текст, который вы можете скопировать. Ничего не выполняется, ни один файл на вашем компьютере не читается и не изменяется — поле пути существует только для заполнения команды.
Он не вычисляет арифметику umask и не знает, какой режим имеет данный файл в данный момент, поскольку веб-страница не может видеть вашу файловую систему.
Docker запускает компоновку
Одна команда запуска Docker становится одной службой. Мультиконтейнерные установки необходимо собирать путем преобразования каждой команды и самостоятельного объединения результатов.
--mount, --gpus, --device, --link, --volumes-from, --network-alias и дюжина других флагов не имеют эквивалента, который может записать этот преобразователь. Каждый из них выдает предупреждение, называющее флаг, а не исчезающее.
Флаг, который преобразователь не распознает, рассматривается как не имеющий значения, и об этом сообщается в предупреждении. Если он все же принял один, это значение неверно прочитано — удалите флаг и добавьте его эффект вручную.
Ничего не выполняется, не оценивается и не передается в оболочку: команда разделяется токенизатором, который понимает цитирование и ничего больше. Таким образом, конвертер не может расширить $VARIABLES, разрешить $(подоболочки) или прочитать --env-file, поскольку все три действия означают запуск чего-либо или открытие файла.
Вывод проверяется на правильность цитирования YAML, но не проверяется на соответствие спецификации Compose, и никакое изображение не связывается для подтверждения его существования.
Команды, содержащие 100,000 символов, отклоняются.
Генератор crontab
Только синтаксис crontab с пятью полями. Шестиполевые выражения Quartz и systemd отклонены с объяснением, как и нестандартные операторы L, W, # и ?, а также @reboot, у которого нет расписания для предварительного просмотра.
Поля дня месяца и дня недели объединяются с помощью OR, если оба поля ограничены, что соответствует Vixie cron. Инструмент предупреждает, когда это применимо, поскольку это наиболее распространенная ошибка чтения строки cron.
Время следующего запуска берется из данных о часовом поясе браузера. Это предварительный просмотр, а не обещание: машина, на которой запущен cron, может использовать другую зону, другую версию tzdata или может просто не работать в данный момент.
Предварительный просмотр осуществляет поиск на пять лет вперед. В более редком расписании — например, 29 февраля — будет показано менее пяти запусков.
Что происходит с тем, что вы вставляете
- Каждое преобразование, хеширование, декодирование и различие выполняются на вкладке вашего браузера. Никакие входные данные не загружаются, не регистрируются и не сохраняются на сервере, поскольку после загрузки страницы сервер не задействован.
- Хэши берутся из собственной реализации Web Crypto в браузере, а UUID — из криптографически безопасного генератора случайных чисел. Ни один из них не предполагает сетевой вызов.
- Ничего из того, что вы вводите, не записывается в локальное хранилище или файл cookie. Перезагрузка страницы удаляет ее; закрытие вкладки отменяет ее.
- Аналитика в масштабе всего сайта выполняется только на настроенном каноническом рабочем хосте и описана в Политике конфиденциальности; локальные и предварительные хосты отказываются от этого. Вставленные значения, токены, URL-адреса и содержимое файлов исключаются из собственных аналитических событий ToolAcre. Реклама отключена в текущей конфигурации.
- Тем не менее: ключ JWT или API — это действующие учетные данные. Безопасная привычка — никогда не вставлять его на веб-страницу, которую вы не писали, какими бы заслуживающими доверия ни были его утверждения, включая эту.
Вопросы
Будете ли вы добавлять загрузку файлов для хеширования или base64?
Возможно, но это другой инструмент — чтение файлов, отчеты о ходе выполнения, защита памяти для больших файлов — а не небольшое дополнение к текстовому полю. Сегодня ответ — нет.
Будете ли вы добавлять проверку подписи в декодер JWT?
Нет. Для проверки требуется ключ эмитента и алгоритм, закрепленный за пределами токена, а веб-страница, запрашивающая любой из них, запрашивает возможность подделать токены. Ограничение – это особенность.
Зачем отказываться от больших входных данных вместо того, чтобы просто работать медленно?
Потому что «медленно» на вкладке браузера означает, что страница не отвечает, а на телефоне это часто означает, что вкладка закрыта и ваш ввод пропал. Явный отказ с оговоренным лимитом полезнее, чем бесконечный спиннер.
Могу ли я использовать это в автономном режиме?
Да, после загрузки страницы — ничего, что делает набор инструментов, не нуждается в сети. Сервис-воркера нет, поэтому для первой загрузки требуется подключение.
Ограничения
- Эта страница сама по себе является списком ограничений; в каждом разделе выше указано, чего не может сделать одна утилита.
- Ограничения применяются в коде и сообщаются в интерфейсе, а не просто документируются здесь.