8个稳定版本
4.0.0 | 2024年3月25日 |
---|---|
3.3.0 | 2022年11月29日 |
3.2.1 | 2022年8月15日 |
3.2.0 | 2022年4月7日 |
0.1.0 |
|
21 in 文本处理
141,337 monthly downloads
用于63 个crate (44直接)
155KB
2.5K SLoC
HTML净化
Ammonia是一个基于白名单的HTML净化库。它旨在防止未经验证的HTML被混合到更大的网页中,从而引起跨站脚本、布局破坏和点击劫持。
Ammonia使用html5ever以与浏览器相同的方式解析和序列化文档片段,因此它对语法混淆具有极高的抵抗力。
Ammonia严格按照HTML5规范解析其输入;它不会将裸URL链接化,插入行或段落断行,或把(C)
转换为©。如果您需要这些功能,请在运行净化器之前使用标记处理器,如pulldown-cmark。
安装
要使用ammonia
,将其添加到项目的Cargo.toml
文件中
[dependencies]
ammonia = "4"
更改
请参阅变更日志以获取发布历史。
示例
使用pulldown-cmark与Ammonia一起创建一个友好的用户界面评论网站。
use ammonia::clean;
use pulldown_cmark::{Parser, Options, html::push_html};
let text = "[a link](http://www.notriddle.com/)";
let mut options = Options::empty();
options.insert(Options::ENABLE_TABLES);
let mut md_parse = Parser::new_ext(text, options);
let mut unsafe_html = String::new();
push_html(&mut unsafe_html, md_parse);
let safe_html = clean(&*unsafe_html);
assert_eq!(safe_html, "<a href=\"http://www.notriddle.com/\">a link</a>");
性能
Ammonia构建DOM,遍历它(在途中替换不需要的节点),然后再次序列化。对于它所做的事情,它可能更快,如果您不希望允许任何HTML,则甚至可能比这更快。
但是,使用Ammonia 1.0比使用bleach-2.0.0和html5lib-0.999999999净化HTML字符串的时间大约是它的十五倍。
$ cd benchmarks
$ cargo run --release
Running `target/release/ammonia_bench`
87539 nanoseconds to clean up the intro to the Ammonia docs.
$ python bleach_bench.py
(1498800.015449524, 'nanoseconds to clean up the intro to the Ammonia docs.')
许可
根据以下任一项许可
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证(《LICENSE-MIT》或https://open-source.org.cn/licenses/MIT)
感谢
感谢其他净化库,特别是Python的Bleach和Node的sanitize-html,我们从它们那里大胆地复制了大部分API。
感谢ChALkeR,他的Improper Markup Sanitization文档帮助我们发现了Ammonia中的高级语义漏洞,感谢ssokolow的审阅和经验也非常有帮助,感谢securityMB发现了非常罕见的与命名空间相关的注入漏洞,以及xfix发现了递归析构函数中的DoS漏洞。
最后,感谢贡献者。
依赖项
~2.1–7.5MB
~79K SLoC