简体中文

开发者数据工具包不能做什么

这里的每个实用程序都有优势。此页面说明了每个停止的位置、原因以及使用什么替代 - 因此您可以在依赖它之前而不是之后找到答案。

适用于一切事物的约束

所有处理都在一个浏览器选项卡中进行,并使用设备的内存。这就是隐私声明的真实性,也是下面每个大小限制的来源。每个实用程序都明确限制其输入,并通过明确的消息拒绝过大的工作,而不是冻结页面。

有两个功能需要安全上下文 — https:// 或 localhost — 因为这是浏览器公开 Web 加密 API 的唯一位置:SHA 哈希和 UUID 生成。在 LAN 地址上通过纯 HTTP 打开,两者都会告诉您它们不可用。两者都无法替代手写的实现,因为浏览器自己的实现才是值得信任的。

没有 Service Worker,因此第一个负载需要网络连接。之后,该工具包所做的任何事情都不需要它。

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 模式下,“~”和空值是字符串而不是 null,“yes”是字符串“yes”。核心模式选项以大多数人期望的方式解决这些问题。两者都是安全的;它们在标量解释上有所不同,并且该工具会在选择时解释哪个是哪个。两者都不会将 NO 读取为 false — 这是 YAML 1.1 行为,这是 YAML 1.2。

多文档 YAML 流变成文档数组,因为这里没有其他格式具有流。锚点和别名被解析而不是保留,递归别名被拒绝,并且一旦跟随其别名就扩展超过一百万个值的文档被拒绝 - YAML“十亿笑”模式。重复的映射键会保留最后一个值,工具也是这么说的。

YAML 无穷大和 NaN 在任何目标格式中都没有表示形式。该工具不会让 JSON.stringify 默默地写入 null,而是会进行转换并警告您发生了这种情况。

包含 DOCTYPE 的 XML 文档会被彻底拒绝,包括无害的文档,因此无法解析外部实体,也无法扩展实体链。没有选项允许它。 XML 混合内容会丢失文本相对于子元素的位置,无法区分单个重复元素和非重复元素,并且除非打开类型推断,否则每个值都是字符串。

TOML 有四种时态类型,而 JSON、YAML 和 XML 没有。每个都成为其编写时的 RFC 3339 字符串,因此 TOML 往返将这些值更改为字符串;不存在无损路径。 TOML 没有 null,因此空键将从 TOML 输出中删除。 TOML 文档的根必须是表,因此 JSON 数组或标量根本无法成为 TOML。经过 2^53 的整数将成为字符串,而不是默默地舍入。

CSV 无法区分空字符串和 null。嵌套值被展平为点列名称,因此已经包含点的键会产生一个不明确的名称,该名称会被警告而不是被转义。以 =、+、-、@、制表符或回车符开头的文本单元格以撇号为前缀,因为电子表格将它们作为公式执行。

每种格式的输入有上限:JSON 为 8 百万字符,XML 为 4 百万字符,YAML 和 TOML 为 2 百万字符。 CSV 输出的上限为 100,000 行和 2,000 列。

Base64

仅文本。这里没有文件上传:要对文件进行编码,您需要读取它,并且该工具包是围绕文本框构建的。为此,请使用面向文件的工具。

当字节是有效的 UTF-8 时,解码会生成文本,而当字节无效时,则会报告一个干净的错误 - 此时字节视图将显示十六进制。任意二进制有效负载不是文本,假装否则会损坏它。

超过大约 4 百万个字符的输入将被拒绝。

URL编码

提供的三个规则——组件、整个 URL 和表单——是平台定义的三个规则。应用程序特定的变体(AWS SigV4 规范化、OAuth 1.0a 百分比编码)存在细微差异,因此未提供。

URL 检查器需要带有方案的绝对 URL。相对路径不能分解为主机、路径和查询,因为它没有它们。

国际化域名在浏览器标准化时显示,这可能是 punycode 而不是原始脚本。

HTML 实体

命名实体表涵盖实用子集 - 标记关键字符、版式、货币、箭头、数学、希腊语和拉丁语 - 1 - 并非所有 2,231 HTML5 命名引用。它之外的名字会为您列出,并与所写的完全一样,因为发明一个字符比单独保留文本更糟糕。

需要一个终止分号。 HTML5 可以容忍一些没有引用的遗留引用,但正确解析这些引用取决于周围的标记,这是独立文本工具所不具备的。

解码是单次传递,因此“&amp;lt;”解码为文本“&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 值。

没有网络加密,什么也不会生成。回退到 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 所见即所得编辑器

清理器是该编辑器自己的输出的允许列表,构建在字符串标记器而不是完整的 HTML5 解析器上。它不是通用的 XSS 过滤器,将其用作过滤器将是一个错误:浏览器可以将故意格式错误的有效负载解析为与此标记器不同的树。不受信任的 HTML 属于针对真实解析器运行的服务器端清理程序。

只有列出的元素才能生存:段落、标题、强调、列表、链接、引号、代码和一些内联标签。其他所有内容都已展开,因此其文本保留,而其标签则不保留。图片、表格、颜色、字体、行内样式都没有,也没有办法添加。

script、style、iframe、object、embed、form、svg、math 和其他原始文本或外部内容元素及其内部的所有内容都将被删除。

链接可以使用 http、https、mailto、tel、ftp 或相对地址。其他任何内容(包括 javascript:、data: 和 blob:)都会被拒绝,包含此工具实体表之外的字符引用的地址也是如此。

编辑界面使用document.execCommand。它已被弃用,它的替代品未在任何浏览器中实现,并且引擎之间的行为有所不同,特别是对于嵌套列表。源模式是命令执行错误操作时的逃生口。

超过 500,000 字符的文档将被拒绝。

chmod计算器

仅 12 个权限位:所有者、组和其他的读、写和执行,以及 setuid、setgid 和粘性。访问控制列表、扩展属性、SELinux 上下文、功能和 Windows ACL 都超出了模式所能表达的范围。

它构建的命令是供您复制的文本。不会执行任何操作,也不会读取或更改计算机上的任何文件 - 路径字段的存在只是为了填写命令。

它不计算 umask 算术,并且不知道给定文件当前具有什么模式,因为网页无法看到您的文件系统。

Docker运行来撰写

一个 docker run 命令成为一项服务。多容器设置必须通过转换每个命令并自行合并结果来组装。

--mount、--gpus、--device、--link、--volumes-from、--network-alias 和其他十几个标志没有此转换器将写入的等效标志。每个都会产生一个警告,命名该标志而不是消失。

转换器无法识别的标志将被视为没有值,并在警告中如此说明。如果确实需要一个,则该值会被误读 - 删除该标志并手动添加其效果。

没有执行、评估或传递给 shell 的任何内容:命令由理解引用的分词器分割,而不是其他任何内容。因此,转换器无法扩展 $VARIABLES、解析 $(subshel​​ls) 或读取 --env-file,因为这三者都意味着运行某些内容或打开文件。

检查输出的 YAML 引用是否正确,但未根据 Compose 规范进行验证,并且不会联系任何图像来确认其存在。

通过 100,000 字符的命令将被拒绝。

定时任务生成器

仅五字段 crontab 语法。六字段 Quartz 和 systemd 表达式被拒绝并给出解释,非标准运算符 L、W、# 和 ? 以及 @reboot 也被拒绝,没有预览时间表。

当月份和星期几字段都受到限制时,将使用 OR 组合,以匹配 Vixie cron。只要适用,该工具就会发出警告,因为这是对 cron 行最常见的误读。

下次运行时间来自浏览器的国际时区数据。它们是预览,而不是承诺:运行 cron 的机器可能使用不同的区域、不同的 tzdata 版本,或者可能当时根本没有运行。

预览搜索提前五年。比这更罕见的时间表(例如 29 二月)将显示少于五次运行。

你粘贴的内容会发生什么

  • 每个转换、哈希、解码和差异都在您的浏览器选项卡中运行。不会在服务器上上传、记录或存储任何输入,因为页面加载后就不再涉及服务器。
  • 哈希值来自浏览器自己的 Web Crypto 实现,UUID 来自其加密安全随机生成器。两者都不涉及网络调用。
  • 您键入的任何内容都不会写入本地存储或 cookie。重新加载页面会丢弃它;关闭选项卡将丢弃它。
  • 站点范围的分析仅在配置的规范生产主机上运行,并在隐私政策中披露;本地和预览主机拒绝它。粘贴的值、令牌、URL 和文件内容不包括在 ToolAcre 自己的分析事件中。当前配置中禁用广告。
  • 也就是说:JWT 或 API 密钥是实时凭证。安全的习惯是永远不要将其粘贴到不是您编写的网页中,无论其声明多么可信 - 包括这个。

问题

您会添加文件上传以进行散列或 Base64 吗?

有可能,但它是一种不同类型的工具——文件读取、进度报告、大文件的内存保护——而不是文本框的一个小补充。今天答案是否定的。

你们会在 JWT 解码器中添加签名验证吗?

不需要。验证需要发行者的密钥和固定在令牌外部的算法,而要求其中任何一个的网页都要求具有伪造令牌的能力。限制就是功能。

为什么要拒绝大量输入而不是仅仅缓慢输入?

因为浏览器选项卡中的“慢”意味着页面无响应,而在手机上,这通常意味着选项卡被终止并且您的输入消失了。带有明确限制的明确拒绝比永不停歇的旋转更有用。

我可以离线使用吗?

页面加载后,是的 - 该工具包所做的任何事情都不需要网络。没有 Service Worker,因此第一次加载确实需要连接。

局限性

  • 此页面本身就是限制列表;上述每一节都说明了一个实用程序不能执行的操作。
  • 限制在代码中强制执行并在界面中报告,而不仅仅是在此处记录。