El amoníaco es una biblioteca de desinfección HTML basada en la lista blanca. Está diseñado para evitar secuencias de comandos de sitios cruzados, ruptura de diseño y clickjacking causado por HTML impulsado por el usuario no confiable en una página web más grande.
El amoníaco utiliza HTML5ever para analizar y serializar fragmentos de documentos de la misma manera que lo hacen los navegadores, por lo que es extremadamente resistente a la ofuscación sintáctica.
El amoníaco analiza su entrada exactamente según la especificación HTML5; No vinculará las URL desnudas, insertará la línea o las roturas de párrafo, ni convertirá (C) en ©. Si desea eso, use un procesador de marcado antes de ejecutar el desinfectante, como pulldown-cmark.
Para usar ammonia , agrégalo al archivo de Cargo.toml de su proyecto:
[ dependencies ]
ammonia = " 4 " Consulte el ChangeLog para un historial de lanzamiento.
Uso de pulldown-cmark junto con amoníaco para un sitio de comentarios amigable orientado al usuario.
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>" ) ; El amoníaco construye un DOM, lo atraviesa (reemplazando los nodos no deseados en el camino) y lo serializa nuevamente. Podría ser más rápido para lo que hace, y si no desea permitir ningún HTML, es posible ser aún más rápido que eso.
Sin embargo, se tarda aproximadamente quince veces más en desinfectar una cadena HTML usando Bleach-2.0.0 con HTML5LIB-0.999999999 que con Amonia 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.')
Con licencia bajo cualquiera de estos:
Gracias a las otras bibliotecas desinfectantes, particularmente Bleach para Python y Sanitize-HTML para Node, de la que copiamos descaradamente la mayoría de nuestra API.
Gracias a Chalker, cuyo documento de desinfección de marcado inapropiado nos ayudó a encontrar agujeros semánticos de alto nivel en amoníaco, a Ssokolow, cuya revisión y experiencia también fueron muy útiles, para SecurityMB, para encontrar un error de inyección relacionado con el espacio de nombres muy obscido, y XFix por encontrar un error de DOS en un destructor recursivo.
Y finalmente, gracias a los contribuyentes.