A amônia é uma biblioteca de sinalização HTML baseada na lista de permissões. Ele foi projetado para evitar scripts entre sites, quebra de layout e clickacking causada por HTML não confiável, sendo misturada em uma página da web maior.
A amônia usa html5ever para analisar e serializar fragmentos de documentos da mesma maneira que os navegadores, por isso é extremamente resistente à ofuscação sintática.
A amônia analisa sua entrada exatamente de acordo com a especificação HTML5; Não vinculará URLs nus, inserir quebras de linha ou parágrafo ou converter (C) em ©. Se você quiser isso, use um processador de marcação antes de executar o desinfetante, como o Pulldown-Cmark.
Para usar ammonia , adicione -o ao arquivo Cargo.toml do seu projeto:
[ dependencies ]
ammonia = " 4 " Por favor, veja o Changelog para obter uma história de lançamento.
Usando o Pulldown-Cmark juntamente com a amônia para um site de comentários amigável voltado para o usuário.
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>" ) ; A amônia constrói um DOM, a atravessa (substituindo nós indesejados ao longo do caminho) e serializa -o novamente. Pode ser mais rápido para o que faz e, se você não quiser permitir que html, é possível ser ainda mais rápido que isso.
No entanto, leva cerca de quinze vezes mais para higienizar uma sequência HTML usando o bleach-2.0.0 com html5lib-0.9999999999 do que usando amônia 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.')
Licenciado sob qualquer um deles:
Graças às outras bibliotecas de desinfetante, particularmente Bleach para Python e Sanitize-Html para o Node, da qual copiamos descaradamente a maior parte de nossa API.
Graças a Chalker, cujo documento inadequado de sinalização de marcação nos ajudou a encontrar buracos semânticos de alto nível em amônia, para Ssokolow, cuja revisão e experiência também foram muito úteis, para o SecurityMB, para encontrar um bug de injeção relacionado ao nome muito obscuro e XFIX para encontrar um insetor de dose em um destrutor recursivo.
E, finalmente, graças aos colaboradores.