ammonia
4.0.0
Ammonia是一个基于白名单的HTML卫生库。它旨在防止跨站点脚本,布局破坏以及由不受信任的用户提供的HTML混合到较大的网页中引起的。
Ammonia使用HTML5Ever与浏览器相同的方式解析和序列化文档片段,因此它对句法混淆非常有弹性。
氨根据HTML5规范准确解析其输入;它不会将裸露的URL,插入线或段落断开,或将(C)转换为©。如果需要,请在运行消毒剂之前使用标记处理器,例如Pulldown-Cmark。
要使用ammonia ,请将其添加到项目的Cargo.toml中。
[ dependencies ]
ammonia = " 4 " 请参阅ChangElog以获取发行历史记录。
将Pulldown-Cmark与氨一起用于友好的面向用户的评论网站。
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>" ) ; 氨可以建立一个DOM,穿过它(沿途取代不需要的节点),然后再次序列化。它的作用可能更快,如果您不想允许任何HTML,则可能会更快。
但是,与使用Ammonia 1.0相比,使用BLEACH-2.0.0使用BLEACH-2.0.0对HTML字符串进行消毒大约15倍。
$ 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.')
根据其中的任何一个获得许可:
多亏了其他消毒剂库,尤其是python的漂白剂,并为节点进行了消毒-HTML,我们公然地从中复制了大部分API。
多亏了Chalker,他的标记卫生文件不当帮助我们在氨气中找到了高级语义孔,Ssokolow给Ssokolow提供了对SecurityMB的审查和经验,也非常有帮助,因为他们找到了一个非常模糊的名称空间相关的注射虫,并且Xfix在递归破坏者中找到了DOS漏洞。
最后,感谢贡献者。