L'ammoniac est une bibliothèque de désinfection HTML basée sur la liste blanche. Il est conçu pour empêcher les scripts croisés, la rupture de mise en page et le jacking de clics causés par le HTML non fiable non fidé à l'utilisateur dans une page Web plus grande.
L'ammoniac utilise html5ever pour analyser et sérialiser les fragments de document de la même manière que les navigateurs, il est donc extrêmement résilient à l'obscurcissement syntaxique.
L'ammoniac analyse son entrée exactement selon la spécification HTML5; Il ne liera pas les URL nues, n'insertera pas la ligne ou les ruptures de paragraphe, ni ne convertissent (C) en ©. Si vous le souhaitez, utilisez un processeur de balisage avant d'exécuter le désinfectant, comme Pulldown-Cmark.
Pour utiliser ammonia , ajoutez-le au fichier Cargo.toml de votre projet:
[ dependencies ]
ammonia = " 4 " Veuillez consulter le Changelog pour une histoire de sortie.
Utilisation de Pulldown-Cmark avec l'ammoniac pour un site de commentaires convivial orienté par les utilisateurs.
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>" ) ; L'ammoniac construit un DOM, le traverse (en remplaçant les nœuds indésirables en cours de route) et le sérialise à nouveau. Cela pourrait être plus rapide pour ce qu'il fait, et si vous ne voulez pas autoriser un HTML, il est possible d'être encore plus rapide que cela.
Cependant, il faut environ quinze fois plus de plus pour désinfecter une chaîne HTML en utilisant Bleach-2.0.0 avec HTML5LIB-0.99999999 qu'à l'aide de l'ammoniac 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.')
Licencié sous l'un ou l'autre:
Grâce aux autres bibliothèques de désinfectant, en particulier Bleach pour Python et désinfecter-HTML pour le nœud, dont nous avons copié manifestement la plupart de notre API.
Grâce à Chalker, dont le document de désinfection de balisage incorrect nous a aidés à trouver des trous sémantiques de haut niveau en ammoniac, à Ssokolow, dont l'examen et l'expérience ont également été très utiles, à SecurityMB, pour avoir trouvé un bogue d'injection lié à l'espace de noms très obscur et XFIX pour trouver un bogue DOS dans un destructrice récurrente.
Et enfin, grâce aux contributeurs.