Ammoniak ist eine auf Whitelist ansässige HTML-Sanitalisierungsbibliothek. Es ist so konzipiert, dass es sich um das seitens-site-Scripting, das Layout-Brechen und das Clickjacking handelt, das durch nicht vertrauenswürdige vom Benutzer bereitgestellte HTML in eine größere Webseite gemischt wird.
Ammoniak verwendet HTML5ever, um Dokumentfragmente genauso zu analysieren und zu serialisieren. Daher ist es äußerst widerstandsfähig gegenüber der syntaktischen Verschleierung.
Ammoniak analysiert seinen Eingang genau gemäß der HTML5 -Spezifikation; Es wird keine bloßen URLs verknüpfen, Linien- oder Absatzbrüche einfügen oder (C) in © konvertieren. Wenn Sie dies möchten, verwenden Sie einen Markup-Prozessor, bevor Sie den Desinfektionsmittel wie Pulldown-Cmark ausführen.
Um ammonia zu verwenden, fügen Sie es in die Cargo.toml -Datei Ihres Projekts hinzu:
[ dependencies ]
ammonia = " 4 " Bitte beachten Sie den ChangeLog für eine Veröffentlichungsgeschichte.
Verwenden Sie Pulldown-Cmark zusammen mit Ammoniak für eine freundschaftliche Benutzerkommentar-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>" ) ; Ammoniak baut einen DOM auf, durchquert es (ersetzt unerwünschte Knoten auf dem Weg) und serialisiert es erneut. Es könnte schneller für das sein, was es tut, und wenn Sie kein HTML zulassen möchten, ist es möglich, noch schneller zu sein.
Es dauert jedoch ungefähr fünfzehn Mal länger, bis eine HTML-String mit Bleach-2.0.0 mit HTML5LIB-0.99999999 als mit Ammoniak 1.0 verwendet wird.
$ 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.')
Unter einem von diesen lizenziert:
Vielen Dank an die anderen Desinfektionsbibliotheken, insbesondere Bleichmittel für Python und Desinfektion-HTML für Knoten, von denen wir den größten Teil unserer API offen kopierten.
Dank Chalker, dessen unsachgemäßes Markup-Desinfektionsdokument uns half, hochrangige semantische Löcher in Ammoniak zu finden, an Ssokolow, deren Überprüfung und Erfahrung auch sehr hilfreich waren, für SecurityMB für die Suche nach einem sehr obskuren Namespace-bezogenen Injektionsfehler und Xfix, um einen DOS-Fehler in einem rekursiven Zerstörer zu finden.
Und schließlich dank der Mitwirkenden.