Hazırlanan tablolar için kullanıcının verilerinin doğrulama anlamak için

3 Cevap php

I read that you do not need to validate or sanitize user's input, hazırlanmış ifadeler kullanmak durumunda.

Bu ancak aşağıdaki örnekte bana mantıklı gelmiyor.

Kullanıcı onun e-posta adresini verir.

Ben normalde bu çalıştırmak

Validation code

 // to validate data
 if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
     header("Location: index.php");
     die("Wrong email-address");
 }

Deyimi biz hazır deyimleri kullandığınızda aşağıdaki gibi, verileri doğrulamak gerek yok diyor

Code without the validation code

 // to get email-address nad passhash from the db
 $result = pg_prepare($dbconn, "query2", 'SELECT email, passhash_md5
     FROM users WHERE email = $1
     AND passhash_md5 = $2;');
 $result = pg_execute($dbconn, "query2", array($_POST['email'], $_POST['password']));
 if(!$result) {
     echo "An error occurred";
     exit;
 }

Biz pg_prepare ve pg_execute kullanmak beri, biz son kod doğrulama kodunu ihtiyacım olup olmadığını emin değilim.

Do you need to consider validating and sanitizing user's input if you use prepared statements?

3 Cevap

Hala verileri doğrulamak zorunda ama bunu sterilize etmek zorunda değilsiniz.

Hazırlanmış deyimleri kullanan kötü niyetli kod takılmasını engeller ama onun formu mantıklı olmadığını kontrol etmez.

Hazırlanan tablolar kötü niyet ilgilenir, ancak sizin kullanıcı ne bekliyoruz girdikten doğrulamak için size kalmış hala.

Örneğin, bir telefon numarası soran bir form, giren bir kullanıcı varsa "jkl; asdgfjkladg" veritabanına hiçbir zarar vermeyeceğim, ancak veri yararsız dışındadır.

Onlar yapmak ne zannediyorsunuz yapmak için kullanıcılara güvenme. Eğer kullanıcı girdi kabul ediyorsanız, onlar doğru yapıyor emin olmak için doğrulamak.

Ayrı doğrulayarak ve hijyenikleştirmeye önemlidir.

Validating kullanıcı doğru türü veya veri biçimini girmiştir emin yapıyor. Örneğin, bir web formu birinin üzerinde sağlanan seçimde görünmez bir değer göndermek için bir seçme girişi tepkisini kesmek olabilir. Doğrulanıyor bu hatayı yakalamak ve geri kullanıcıya uygun bir hata mesajı verebilir. Kullanıcı ayrıca bir sayı değeri beklediği bir alana bir dize girebilirsiniz. Sorguyu denemeden önce bu kontrol etmezseniz, sorgu başarısız olabilir ve nedenini belirlemek ve bir hata mesajı ile kullanıcıya sunmak için zor olacak, ya da sorgu kötü veri ile sessizce başarılı olabilir.

Sanitizing (XSS saldırı ya da neden, ya da daha sonra sitede gösterilen) veritabanına eklendiğinde veri zarar vermez emin yapıyor. Bir parametre olarak dize bağlama zaman $ name = "O'Reilly", ama bir hazır deyimi otomatik olarak tek tırnak kaçış eğer sorgu "kişi (isim) VALUES ('$ isim') içine" başarısız olur. Farklı karakter setlerini kullanırken, bu sadece orada alıntı daha fazla olması ve muhtemelen bir SQL enjeksiyon saldırılarına izin sorunlara neden olabilir karakterleri çizgi olabilir, özellikle önemlidir.

PostgreSQL girilen verileri bir e-posta adresi olması gerekiyordu olduğunu hiç bir fikrim var, ve bunu sağlamak herhangi bir dize saklamak çünkü kullanıcı aslında bir e-posta adresi girerek olup olmadığını kontrol etmek için, size, doğrulama kodunu tutmak gerekir.