PHP sıkı HTML Doğrulama ve Filtreleme

4 Cevap php

Ben kullanıcı gönderilen HTML katı (beyaz liste) doğrulama / filtreleme gerçekleştirmek için en iyi uygulamalar arıyorum.

Ana amacı, XSS ve web formları aracılığıyla girilmiş olabilir benzer nasties filtre etmektir. İkincil amaç teknik olmayan kullanıcılar tarafından girilen HTML içeriğinin kırılmasını sınırlamak için eg HTML görünümü vardır WYSIWYG editörü ile.

I HTML Purifier kullanılarak, veya HTML (kirli) gibi bir süreç geçmesi için bir HTML DOM çözümleyici kullanarak kendi tekerlekli düşünüyorum -> DOM (kirli) -> filtre-> DOM (temiz) -> HTML (temiz).

Eğer de etkili olan bu veya herhangi kolay stratejileri ile başarıları tarif edebilir? Için dışarı izlemek için herhangi bir tuzaklar?

4 Cevap

Ben HTML Arıtma üzerinde bilmek ve çok iyi yaptım tüm patlatır test ettik. Ayrıca HTML, CSS ve ancak URL'ler sadece filtreler.

Eğer dar elemanları ve masum olanları bağlıyor kez, tuzaklar Öznitelik içerik bulunmaktadır - javascript: pseudo-URL'ler (IE protokol adının sekme karakterleri verir - java	script: hala çalışıyor) ve CSS özellikleri bu JS tetikleyebilir.

Parsing of URLs may be tricky, e.g. these are valid: http://spoof.com:xxx@evil.com or //evil.com. Internationalized domains (IDN) can be written in two ways – Unicode and punycode.

HTML Arıtma git - bu çoğu dışarı çalıştı. Sadece kırık HTML düzeltmek istiyorsanız, o zaman HTML Tidy (PHP uzantısı olarak mevcuttur) kullanın.

Kullanıcı gönderilen HTML her zaman geçerli, ya da gerçekten tam değildir. Tarayıcılar geçersiz HTML geniş yorumlamak ve bunu yakalamak emin olmalıyız.

Ayrıca geçerli görünümlü farkında olmak:

<img src="http://www.mysite.com/logout" />

ve

<a href="javascript:alert('xss hole');">click</a>

Ben başarı ile HTML Arıtma kullanılan ve üzerinden herhangi bir XSS veya diğer istenmeyen giriş filtresi olmadı. Ben de emin de doğrular yapmak Tidy uzantısı ile sterilize HTML çalıştırın.

W3C burada mevcut HTML doğrulamak için büyük bir açık kaynak paketi var:

http://validator.w3.org/

Kendiniz için paketi indirmek ve muhtemelen onlar yapıyor olursanız uygulayabilirsiniz. Ne yazık ki, bu DOM ayrıştırıcıların bir sürü olduğu gibi "vahşi" HTML kodu için tahsis kuralları esnetmeye istekli görünüyor gibi görünüyor, bu yüzden ustalar ne yanlış söylemek ve onu bırakmasın için iyi bir fikirdir daha pratik bir araç - Oradaki aren't mükemmel, uyumlu HTML ama biz yine de her gün kullandığınız web sitelerinin bir yeri vardır.