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漏洞。
最後,感謝貢獻者。