암모니아는 화이트리스트 기반 HTML 소독 라이브러리입니다. 신뢰할 수없는 사용자 제공 HTML이 더 큰 웹 페이지에 혼합되어 발생하는 크로스 사이트 스크립팅, 레이아웃 파괴 및 클릭 재킹을 방지하도록 설계되었습니다.
암모니아는 html5ever를 사용하여 브라우저와 같은 방식으로 문서 조각을 구문 분석하고 직렬화하므로 구문 난독 화에 매우 탄력적입니다.
암모니아는 HTML5 사양에 따라 정확히 입력을 구문 분석합니다. 베어 URL을 연결하거나, 라인 또는 단락 브레이크를 삽입하거나 (C) ©로 변환하지 않습니다. 원한다면 Pulldown-CMark와 같은 소독제를 실행하기 전에 마크 업 프로세서를 사용하십시오.
ammonia 사용하려면 프로젝트의 Cargo.toml 파일에 추가하십시오.
[ dependencies ]
ammonia = " 4 " 릴리스 기록은 ChangElog를 참조하십시오.
친절한 사용자를 대상으로 한 코멘트 사이트를 위해 암모니아와 함께 풀다운 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을 허용하지 않으려면 그보다 훨씬 빠를 수 있습니다.
그러나 암모니아 1.0을 사용하는 것보다 HTML5LIB-0.999999999를 사용하여 Bleach-2.0.0을 사용하여 HTML 문자열을 소독하는 데 약 15 배 더 걸립니다.
$ 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에게 검토와 경험도 매우 도움이되었으며, 매우 모호한 네임 스페이스 관련 주입 버그를 찾는 데 도움이되었습니다.
그리고 마지막으로, 기고자들에게 감사합니다.