萨克森州
JavaScript的轻量级和高效的SAX型XML分解器.
目标
- 完全 XML 1.0 和 Namespaces 在 XML 1.0 标准符合性中
- 简单和三角形 API
- 减少代码脚印
- 设定基于 XML (例如 XHTML) 的其他标准的基础
非目标
- XML DTD 验证
- DOM 全面执行
- 语法错误容忍度
- 源代码分析或 LSP 特性
XML 1.1 和 XML 1.1 中的命名空间
XML 1.1和取名空间在XML 1.1中不支持. 宣布版本的文件
1.1 解析为 XML 1.0,所以特性为版本专用 1.1 没有
承认.
现代的UTF-8网页内容完全是XML 1.0,这使得XML 1.1及其 命名空间大多无关紧要.
XML 1.1几乎完全用于遗产或专门环境下,因为其 特殊特点和更好的EBCDIC支持可能是有用的。 见 XML - 维基百科 § 第1.0和1.1版。 。 。 .
示例
import {SaxParser} from "@federicocarboni/saxe";
const parser = new SaxParser({
startTag(name, attributes) {
// Start tag: example
// Start tag: empty-tag [attr, value]
console.log("Start tag:", name, ...attributes);
},
endTag(name) {
// End tag: example
// End tag: empty-tag
console.log("End tag:", name);
},
text(content) {
// Text: Hello, world!
console.log("Text:", content);
},
});
parser.parse("<example>Hello, world!", {stream: true});
parser.parse(`<empty-tag attr="value" />`, {stream: true});
parser.parse("</example>");
运行时间支持
- Basic XML 解析:任意ES2017运行时间. 对于更早的运行时间 转接和 多填充应该足够了.
文件类型声明
许多[^1] JavaScript XML 解析器简化了内部 DTD 子集的处理, 要么不检查其造型良好,要么无视其声明.
内部的 DTD 子集解析即使是对非验证 [^2] 处理器也是需要的, 此解析器执行整个规格 :
- 内部的 DTD 子集被解析并检查其造型良好.
ATTLIST声明被承认适用正常化和默认 值为属性.ENTITY宣言被确认用于扩大实体的参考.
这个过程 所涉安全问题;所以 DTD 处理可以是
通过配置启用 SaxOptions.dtd。 。 。 .
外部加价申报和外部实体不需要 非验证 [^2] 处理器,并明确不支持.
警卫
XML 解析器可能有一些可能的脆弱性,最常见的是 攻击利用外部实体的分辨率和实体扩展.
这个解析器严格来说是不验证的 所以设计上它不应该是脆弱的 用于任何基于XXE[^3]的攻击。 此外,在 解析以限制其他拒绝服务攻击的功效[^4].
根据OWASP的建议,默认禁止DTD处理.
new SaxParser(handler, {
// Reject any DOCTYPE declaration
dtd: "prohibit", // default
// Alternatively, allow it but ignore any declarations
// dtd: "ignore",
// Enforce stricter limits over strings and values
// collected during parsing.
maxAttributesLength: 10000,
maxElementDepth: 30,
maxEntityDepth: 5,
maxEntityLength: 1000,
maxNameLength: 500,
maxTextLength: 10000,
})
已知的 XML 炸弹 测试作为定期整合的一部分 测试和解析器是 测试模糊度 经常 虽然如此 对于非常明智或面向安全的应用程序,您可能想要执行您的 自己的安全审计.
[^1]:检查过的其他JavaScript XML解析器包括: isaacs/ sax-js (英语), (中文(简体) ), 自然情报/快速Xml-parser 财务报告和审定财务报表 lddubeau/ 轴 [^2]: XML 处理器(parsers)不验证文档,但 还必须识别并报告成型良好的(语法)错误. 不验证的处理器不需要获取和剖析外部标记 声明和外部实体. XML 标准 第5.1条 验证和非验证处理器 [^3]: XML 外部实体(XXI) 处理 OWASP基金会 [^4]: XML 拒绝服务攻击和防卫 微软学习
许可证
根据Apache许可证第2.0版获得许可. 参见 LICENSE 文件 细节.