Ammonia adalah perpustakaan sanitasi HTML berbasis putih. Ini dirancang untuk mencegah skrip lintas situs, pemecahan tata letak, dan clickjacking yang disebabkan oleh HTML yang disediakan pengguna yang tidak dipercaya dicampur menjadi halaman web yang lebih besar.
Amonia menggunakan html5ever untuk menguraikan dan membuat serial fragmen dokumen dengan cara yang sama seperti browser, sehingga sangat tangguh untuk kebingungan sintaksis.
Ammonia mem -parsing inputnya persis sesuai dengan spesifikasi HTML5; Ini tidak akan menghubungkan URL telanjang, memasukkan garis atau patah paragraf, atau mengkonversi (C) menjadi ©. Jika Anda menginginkannya, gunakan prosesor markup sebelum menjalankan pembersih, seperti Pulldown-Cmark.
Untuk menggunakan ammonia , tambahkan ke file Cargo.toml proyek Anda:
[ dependencies ]
ammonia = " 4 " Silakan lihat changelog untuk riwayat rilis.
Menggunakan Pulldown-Cmark bersama dengan amonia untuk situs komentar yang menghadap pengguna yang ramah.
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>" ) ; Ammonia membangun DOM, melintasi itu (mengganti node yang tidak diinginkan di sepanjang jalan), dan membuat serial lagi. Ini bisa lebih cepat untuk apa yang dilakukannya, dan jika Anda tidak ingin mengizinkan HTML, mungkin lebih cepat dari itu.
Namun, dibutuhkan sekitar lima belas kali lebih lama untuk membersihkan string HTML menggunakan BLEACH-2.0.0 dengan HTML5LIB-0.99999999 daripada menggunakan Ammonia 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.')
Berlisensi di bawah salah satu dari ini:
Berkat perpustakaan pembersih lainnya, khususnya pemutih untuk Python dan Sanitasi-HTML untuk Node, yang secara terang-terangan kami menyalin sebagian besar API kami.
Berkat Chalker, yang dokumen sanitasi markupnya yang tidak tepat membantu kami menemukan lubang semantik tingkat tinggi di amonia, ke Ssokolow, yang ulasan dan pengalamannya juga sangat membantu, untuk SecurityMB, karena menemukan bug injeksi yang terkait dengan namespace yang sangat tidak jelas, dan XFIX untuk menemukan DOS Bug in a Recursive Destructor.
Dan akhirnya, terima kasih kepada para kontributor.