Bir mysql sorguda değişkenlerin kapsamını kısıtlamak?

4 Cevap php

Ben yöntem mysql enjeksiyonu önlemek için sınırlı bir sorguda bir değişkenin kapsamı sağlamak için olması ne demek olduğunu hatırlamıyorum.

Burada i aşağıdaki örneklerde parantez koymak gerekir?

UPDATE table SET col_1 = '$var', col_2 = '$var2' WHERE col_1 = '$var3'

ve

SELECT * FROM table WHERE WHERE col_1 >= '$var1'

(Açıkçası cevaplar PDO kullanarak değil arıyor!)

4 Cevap

SQL enjeksiyonu önlemek istiyorsanız, bir parametreli sorgu MySQL eşdeğer bir prepared statement kullanın.

Örnek:

$db_connection = new mysqli("myserver", "user", "pass", "db");
$statement = $db_connection->prepare("SELECT thing FROM stuff WHERE id = ?");
$statement->bind_param("i", $id);
$statement->execute();

Ve evet, araçları do PDO kullanmanızı

Parantez kapsamı ve kapsamı ile ilgisi SQL enjeksiyon önlenmesi ile ilgisi yok.

Eğer PDO ve mysqli kullanarak kısıtlı varsa, verilerinizi kaçan enjeksiyonu önlemek mysql_real_escape_string yapabilirsiniz:

$sql = "UPDATE table SET col_1 = '".mysql_real_escape_string($var)."'";

Parantez SQL enjeksiyonu önlenmesi ile hiçbir alakası yok.

Sana mysql_*() fonksiyonlarını kullanarak bir cevap verebilir, ama olmaz.

Eğer bir programcı olmak istiyorsanız, en iyi uygulamaları öğrenmek zorunda. "Açıkçası PDO kullanarak değil cevap arıyor!" Diyerek saçma ve basit rota gitmek için korkunç bir tutum var.

Bildiğim kadarıyla kapsamı etkileyen SQL enjeksiyonu gibi, ben PHP register_globals, ayar bahsediyoruz düşünüyorum. Kapalı bulunuyor olun.

Kayıt Ol globallerinin temelde bir kullanıcı sadece bir GET veya POST için bir parametre geçirerek global bir değişken oluşturmak için olanak sağlar. Eğer SQL erişim global bir değişkeni kullanarak konum, ve kullanıcı değişkeni tahmin edebilirsiniz Yani, onlar değerini ayarlayarak kod enjekte edebilir.

Parantez Ancak, PHP kapsamı ile ilgisi var.

SQL enjeksiyon önlemek için aşağıda bir göz atın:

  • Sunucu tarafı doğrulama
  • PHP filtreleri
  • SQL Kaçış
  • Parametrized Sorguları

Hepiniz dört yapıyor olmalıdır.