アンモニアは、ホワイトリストベースのHTML消毒ライブラリです。クロスサイトのスクリプト、レイアウトの壊し、および信頼されていないユーザーが提供するHTMLがより大きなWebページに混合されたことによって引き起こされるクリックジャックを防ぐように設計されています。
AmmoniaはHTML5Everを使用して、ドキュメントフラグメントを解析してシリアル化し、ブラウザと同じように断片化するため、構文的な難読化には非常に回復力があります。
アンモニアは、HTML5仕様に従ってその入力を正確に解析します。裸のURLをリンクしたり、ラインまたは段落の破損を挿入したり、 (C)を©に変換したりしません。必要に応じて、Pulldown-Cmarkのような消毒装置を実行する前に、マークアッププロセッサを使用してください。
ammoniaを使用するには、プロジェクトのCargo.tomlファイルに追加します。
[ dependencies ]
ammonia = " 4 " リリース履歴については、Changelogをご覧ください。
フレンドリーなユーザー向けコメントサイトのために、Ammoniaと一緒に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を許可したくない場合は、それよりもさらに速くなることができます。
ただし、HTML5LIB-0.99999999を使用してBleach-2.0.0を使用してHTML文字列をサニタイズするのに約15倍時間がかかります。Ammonia1.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.')
これらのいずれかでライセンスされています:
他のサニタイザーライブラリ、特にPythonの漂白剤とNodeのSanitize-HTMLのおかげで、APIのほとんどを露骨にコピーしました。
Chalkerのおかげで、その不適切なマークアップの消毒文書は、アンモニアの高レベルのセマンティックホールを見つけるのに役立ちました。Ssokolowは、非常に不明瞭な名前空間関連の注入バグを見つけたために、レビューと経験もセキュリティムブ、およびXFIXを見つけて、リターンな破壊者でDOSバグを見つけました。
そして最後に、貢献者に感謝します。