SQL enjeksiyon karşı koruma

7 Cevap php

Aşağıdaki PHP MySQL deyim SQL Injection karşı koruma sağlar mı?

$strSQL = "SELECT * FROM Benutzer WHERE Benutzername = '".$Benutzer."' AND Password = '".md5($PW)."'";

Değişkenler $Benutzer ve $PW Kanala gelen girdiler.

Biz ortak SQL Injection tekniklerine karşı adınızı ve şifrenizi kontrol ediyoruz:

' or 0=0 --, " or 0=0 --, or 0=0 --, ' or 0=0 #, " or 0=0 #, or 0=0 #, ' or 'x'='x, " or "x"="x, ') or ('x'='x, ' or 1=1--, " or 1=1--, or 1=1--, ' or a=a--, " or "a"="a, ') or ('a'='a, ") or ("a"="a, hi" or "a"="a, hi" or 1=1 --, hi' or 1=1 --, hi' or 'a'='a, hi') or ('a'='a and hi") or ("a"="a.

Ben bir şey eksik? SQL enjeksiyon karşı korumak için farklı bir yöntem kullanmak gerekir?

7 Cevap

Sen veritabanı sorgulama için parametreli sorgular içine bakmak isteyebilirsiniz. Bu, SQL enjeksiyon saldırıları ortadan kaldırır.

Ben postgreSQL öncelikle çalışmak ve böyle bir sorgu yapmak için biçimi böyle bir şey olacaktır:

$query = 'select * from Benutzer where Benutzername = $1 and Passwort = $2';
$params = array($Benutzer, md5($PW));
$results = pg_query_params($query, $params);

Çoğu veritabanları bu funationality benzer olacak bir işlevi var.

Bu yardımcı olur ve iyi şanslar umut!

Kyle

Çarpışmalar düşük bir olasılık var gibi ben şahsen, bu MD5 üzerinde SHA1 gibi bir algoritma kullanarak tavsiye ediyorum. Sen salting your passwords da, aksi takdirde kimse şifreleri kırmak için rainbow tables kullanabilirsiniz olmalıdır.

Ayrıca, sadece bir arama yapmak ve ortak enjeksiyon için yerine geçmez, mysql_real_escape_string() şeyler kaçmak için kullanabilirsiniz.

Güvenlik mümkün olduğunca yüksek olması gerekiyordu ise, md5 daha bazı başka özetleme yöntemini kullanmak gerektiğini - örn gibi sha256. Ayrıca, parola tuz kullanın.

Kullanmayı deneyin mysql_real_escape_string()

$strSQL = "SELECT * 
		FROM Benutzer 
		WHERE Benutzername = '".mysql_real_escape_string($Benutzer)."' 
		AND Passwort = '".mysql_real_escape_string(md5($PW))."'";

Kullanıcıların kayıt sırasında, örneğin aynı tekniği .. kullanarak kayıt emin olun,

AND Passwort = '".mysql_real_escape_string(md5($PW))."'"

ve

AND Passwort = '".md5(mysql_real_escape_string($PW))."'"

giriş metni bağlı olarak farklı sonuçlar doğurabilir.

Ve evet, aynı zamanda bu şifre için bazı "tuz" ekleyin. Bu gibi yapmak, bazı fikirler için

sha1(md5($pass)):
sha1($salt.$pass):
sha1($pass.$salt):
sha1($username.$pass):
sha1($username.$pass.$salt):

Güvenlik standartları mümkün olduğu kadar yüksek olmalıdır.

Md5 kimse bir kaşını kaldırarak veya kendilerine kahve tükürme ile tasarım dahil var ise, o zaman müşteri ile güvenlik sorununu tekrar gerekiyor. Güvenlik kritik ise bunlar ekibine katılmak için bir güvenlik uzmanı için bahar gerekir. Herkes güvenli kodu istiyorum diyor. Birkaç bunun için ödemek, bu yüzden birkaç aslında olsun.

Herhangi bir kamu içeriği strip_tags (veya kendi html filtre kullanmak) de XSS önlemek için emin olun.