Ammonia

修复和保护不受信任的 HTML。「Repair and secure untrusted HTML」

Github星跟蹤圖

HTML Sanitization

Crates.IO
Requires rustc 1.60.0

Ammonia is a whitelist-based HTML sanitization library. It is designed to
prevent cross-site scripting, layout breaking, and clickjacking caused
by untrusted user-provided HTML being mixed into a larger web page.

Ammonia uses html5ever to parse and serialize document fragments the same way browsers do,
so it is extremely resilient to syntactic obfuscation.

Ammonia parses its input exactly according to the HTML5 specification;
it will not linkify bare URLs, insert line or paragraph breaks, or convert (C) into ©.
If you want that, use a markup processor before running the sanitizer, like pulldown-cmark.

Installation

To use ammonia, add it to your project's Cargo.toml file:

[dependencies]
ammonia = "3"

Changes

Please see the CHANGELOG for a release history.

Example

Using pulldown-cmark together with Ammonia for a friendly user-facing comment
site.

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>");

Performance

Ammonia builds a DOM, traverses it (replacing unwanted nodes along the way),
and serializes it again. It could be faster for what it does, and if you don't
want to allow any HTML it is possible to be even faster than that.

However, it takes about fifteen times longer to sanitize an HTML string using
bleach-2.0.0 with html5lib-0.999999999 than it does using Ammonia 1.0.

$ 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.')

License

Licensed under either of these:

Thanks

Thanks to the other sanitizer libraries, particularly Bleach for Python and sanitize-html for Node,
which we blatantly copied most of our API from.

Thanks to ChALkeR, whose Improper Markup Sanitization document helped us find high-level semantic holes in Ammonia,
to ssokolow, whose review and experience were also very helpful, to securityMB,
for finding a very obscure namespace-related injection bug, and xfix for finding a DoS bug in a recursive destructor.

And finally, thanks to the contributors.

主要指標

概覽
名稱與所有者rust-ammonia/ammonia
主編程語言Rust
編程語言Rust (語言數: 2)
平台
許可證Apache License 2.0
所有者活动
創建於2015-08-22 23:08:27
推送於2025-04-21 20:38:29
最后一次提交2025-04-21 13:37:26
發布數31
最新版本名稱v4.1.0 (發布於 )
第一版名稱v0.2.0 (發布於 )
用户参与
星數581
關注者數9
派生數47
提交數446
已啟用問題?
問題數64
打開的問題數16
拉請求數134
打開的拉請求數3
關閉的拉請求數8
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?