2013-07-04 16 views
10

Tüm girişlerimde php (ön uçtaki j'lerin yanı sıra) kullanarak giriş doğrulaması uygulamış oldum. Ben bir regex karşı e-postalar gibi şeyler doğrulamak, ben sadece bir dize bekliyoruz ve aynı zamanda sadece bir dize bekliyorum çoğu durumda beklediğim değil, sadece izin verir çalışan bir regex var emin olun harfler, sayılar ve boşluklar. Bu kurallara uymayan herhangi bir şey, doğrulamanın başarısız olmasıyla sonuçlanır ve sql sorguları çalıştırılmaz. Bununla birlikte, formumun geçerliliğini geçmesi durumunda, db'ye (pdo ile yaptığım) giriş için güvenli olduğunu ve çıkışta kaçtığını varsayıyorum.input sanitization VS validasyonu

Bu nedenle, neden neden giriş sterilizasyonuna ihtiyacım var?

+1

. Sanitizasyon ve doğrulama (birlikte) her zaman gerekli değildir. Her ne kadar, derin bir savunma hayranıyım, bu yüzden muhtemelen ikisini de yaparım. Ancak "bilinen kötüleri reddetmek" ve "bilinenleri kabul etmek" de kabul edilebilir. https://www.owasp.org/index.php/Data_Validation – cmt

cevap

7

Çok katı doğrulama sunucu tarafına sahipseniz, görselleştirmeniz gerekmez. Örneğin. bir dizgeyi/^ [a-z0-9] {5,25} $// (sanki herhangi bir sıhhileştirmeye ihtiyaç duymayacak) doğrulamayacaktır (alfanümerik olmayan karakterlerin kaldırılması, herhangi bir anlam ifade etmeyecektir, çünkü bunlar zaten geçememelidir).

Tüm verileri doğrulayabildiğinizden emin olun ve bu mümkün değilse (örneğin, html ile biraz zor olduğu için), kaçan stratejileri veya html arıtıcı gibi şeyleri kullanabilirsiniz. XSS önlenmesi için kaçan stratejileri üzerinde iyi bir bakış için

: farklı güvenlik tehditlerine hakkında bir fikir için

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet bkz: ben bir kabul yöntem takip ediyor söyleyebilirim https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

+0

Evet owasp içeriği. Teşekkürler –

3

İkisine de ihtiyacınız var. Girdi verilerini doğrulamak müşteri tarafında kolayca dövülür, ancak sizi hacklemeye çalışmayan meşru kullanıcılar için yararlıdır. Veritabanına koymadan önce verileri (tüm veriler, ister giriş verileri ister doğrudan DB'nizden güvenebileceğinizi düşündüğünüz tüm veriler) verin.

Doğrulama işleminize% 100 güvenirseniz ve sunucu tarafında yapıyor olsanız bile (teoride, insanların verileri karıştırmaması gerekir), bu bir tür dezenfektan kullanmaya değer. alışmak için alışkanlık.

+0

Doğrulama konusunda kendinizden emin olsanız bile, neden risk almalısınız? –

+0

Doğru, mümkün olduğunca güvenli olmak istiyorum bu yüzden bu soru benim karışıklığı temizlemek için sorulmuştur.Veri doğrulama ve sanitasyon arasında gördüğüm tek fark, doğrulama test giriş yaparken doğru veya yanlış döndürürken, aslında sanitizasyon yerine geçer istenmeyen karakterler. Ben bir regex karşı validating kadar sona erecek ve daha sonra aynı regex ile dezenfekte ama preg_replace.Just kullanın biraz geriye doğru görünüyor. –

+2

Sanitizasyonun kendiliğinden gelebileceği bir bağlam, agresif bir şekilde doğrulayamadığım, yani kullanıcının alfanümerik olmayan karakterleri girebileceği serbest bir metin alanıdır ... o zaman sanitizasyondaki kullanımını görebilirim –