Аммиак-это библиотека дезинфицирования HTML на основе белого списка. Он предназначен для предотвращения перекрестных сценариев, разрыва макета и клика, вызванного ненадежным, предоставленным пользователем HTML, смешанным с большей веб-страницей.
Аммиак использует html5ever для анализа и сериализации фрагментов документов так же, как и браузеры, поэтому он чрезвычайно устойчив к синтаксическому запутыванию.
Аммиак анализирует свой вход точно в соответствии со спецификацией HTML5; Он не будет связывать голые URL -адреса, вставить строку или разрывы абзаца или преобразовать (C) в ©. Если вы этого хотите, используйте процессор разметки перед запуском дезинфицирующего средства, например, Pulldown-Cmark.
Чтобы использовать ammonia , добавьте его в файл вашего проекта Cargo.toml :
[ dependencies ]
ammonia = " 4 " Пожалуйста, смотрите в режиме реального времени для истории выпуска.
Использование 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, можно быть еще быстрее, чем это.
Тем не менее, требуется около пятнадцати раз больше, чтобы дезинфицировать строку HTML, используя Bleach-2.0.0 с HTML5LIB-0.999999999, чем использует аммиак 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.')
Лицензирован под одним из них:
Благодаря другим библиотекам дезинфицирующих средств, особенно отбеливанию для Python и Sanitize-HTML для узла, из которого мы явно скопировали большую часть нашего API.
Спасибо Chalker, чей ненадлежащий документ дезинфекции наценки помог нам найти семантические дыры на высоком уровне в аммиаке, SSOKOLOW, чей обзор и опыт были также очень полезными для SecurityMB, за то, что он обнаружил очень неясную ошибку в инъекции, связанном с именами, и XFIX для поиска ошибки DOS в уточнительном деструкторе.
И, наконец, спасибо участникам.