xss kodu preg_replace

4 Cevap php

Kullanıcı kötü niyetli kod sterilize etmek için bu kodu yardım formu gönderebilir miyim?

function rex($string) {
$patterns = array();
$patterns[0] = '/=/i';
$patterns[1] = '/javascript:/i';
$replacements = array();
$replacements[0] = '';
$replacements[1] = '';
return preg_replace($patterns, $replacements, $string);

Ben, istemci tarafında XSS önlemek için htmlentitiesi (dahil) gösterilen tüm kod saldırıyı önlemek için yeterince güvenli olduğunu var?

4 Cevap

Lütfen değiştirmelerin yardımcı olabilir. Ama PHP'nin data filters gibi bir ön-haddelenmiş çözüm kullanarak daha iyiyiz. Sonra kolayca beklediğiniz için veri türü sınırlayabilir.

Bunu siz kullanıyorsanız htmlentities gerekmez. XSS önlemek için hatta sadece kullanabilirsiniz htmlspecialchars.

Sadece HTML yanıt düz metin olarak basılan tüm verilere htmlspecialchars kullandığınızdan emin olun.

Ayrıca bakınız: için "Does this set of regular expressions FULLY protect against cross site scripting?" cevapları

htmlentities yalnız hile yapacak. Hiç bir şey değiştirmek gerek yok.

Kolayca eval ve karakter kodlaması (ve bir eşit işareti yine XSS saldırıları için gerekli değildir) kullanılarak atlatılabilir olarak ilk yedek kural işe yaramaz.

Sizin ikinci kural, çok büyük olasılıkla javascript : veya java\script: gibi şeyler kullanarak en azından bazı tarayıcılarda atlatılabilir.

Kısacası, pek yardımcı olmuyor. Eğer düz metin göstermek istiyorsanız, htmlentities herhangi bir özel karakterler olmadan XSS saldırılarını başlatmak için sıradışı karakter kodlamaları ve tarayıcı aptallık yararlanmak egzotik saldırılar var (muhtemelen iyi, ama bu sadece belirli tarayıcılarda çalışır - {[(0)] } IE cough - özel durumlarda). URL'leri veya diğer nitelikleri kullanıcı girişi koymak istiyorsanız, mutlaka yeterli değildir.