Parametre değeri sorgu dizesi yansıtılmadan asla çünkü Açıkçası, aslında hiçbir ihtiyaç öncelenimin var.
Sorgu parametreleri çalışma yolu prepare()
çağrıldığında sorgu veritabanı sunucusuna gönderilir ve execute()
çağrıldığında parametre değerleri, daha sonra gönderilmek olmasıdır. Böylece sorgunun metinsel formda ayrı tutulur. SQL enjeksiyon için bir fırsattır (PDO::ATTR_EMULATE_PREPARES
false olması koşuluyla) vardır asla.
Yani evet, sorgu parametreleri güvenlik açığı bu formu önlemek için yardımcı.
Herhangi bir güvenlik açığına karşı% 100 dayanıklı mı? Hayır, elbette değil. Bildiğiniz gibi, bir sorgu parametresi, yalnızca bir SQL ifadesindeki bir tek değişmez değer gerçekleşir. Örneğin bir değerler listesi için tek bir parametre yerine, yapamaz:
SELECT * FROM blog WHERE userid IN ( ? );
Siz tablo veya kolon isimleri dinamik hale getirmek için bir parametre kullanamazsınız:
SELECT * FROM blog ORDER BY ?;
SQL sözdizimi başka bir türü için bir parametre kullanamazsınız:
SELECT EXTRACT( ? FROM datetime_column) AS variable_datetime_element FROM blog;
Yani önce prepare()
çağrı, bir dize olarak sorgu işlemek zorunda epeyce durumlar vardır. Bu durumda, yine SQL enjeksiyon önlemek için dikkatli bir şekilde kod yazmak gerekir.