Hızlı MySQLi güvenlik sorusu [yinelenen]

2 Cevap php

Possible Duplicate:
Do I have to use mysql_real_escape_string if I bind parameters?

Ben hızlı bir MySQLi güvenlik ile ilgili bir sorum var ...

Örneğin, bu kodu bir göz atın (kullanıcı girişi alır, kullanıcı adı / şifre kombinasyonu varsa görmek için veritabanına karşı kontrol eder):

$input['user'] = htmlentities($_POST['username'], ENT_QUOTES);
$input['pass'] = htmlentities($_POST['password'], ENT_QUOTES);

// query db
if ($stmt = $mysqli->prepare("SELECT * FROM members WHERE username=? AND password = ?"))
{
    $stmt->bind_param("ss", $input['user'], md5($input['pass'] . $config['salt']));
    $stmt->execute();
    $stmt->store_result();

    // check if there is a match in the database for the user/password combination
    if ($stmt->num_rows > 0)
    {}
}

Bu durumda, ben formu veri () htmlentitiesi kullanarak, ve bir MySQLi hazırlanmış deyimi kullanıyorum. Hala (mysql_real_escape_string kullanarak gereken mı)?

2 Cevap

Evet gerçek bir kaçış dize yakalar bu veritabanına zarar verebilir olmayan html ilgili kişiler vardır çünkü. UTF-8 karakter gibi.

Ama mysqli hazırlamak kullandığınız buraya yorum kaydetti ve bu yeterli gibi.

Eğer ilgileniyorsanız MEZUNLARI MySQLi it's own escape string function. vardır.

Hayır, sen parametre parametreleri kullanmadan SQL dizesi doğrudan yazıldığında mysql_real_escape_string if you are binding the parameters using prepared statements. In fact using it will give you the wrong result as the escaped data will be inserted into the database. mysql_real_escape_string ihtiyaç kullanmak gerekmez.