Ben aşağıdaki satır ile bir PHP komut dosyası var:
$query = "SELECT * FROM products WHERE product_id='" . filter_var($_GET[id], FILTER_SANITIZE_NUMBER_INT) . "'";
Bu yeterince güvenli mi? Nasıl bu kod geliştirmek istiyorsunuz?
O durumda güvenli, ancak daha genel bir yaklaşım için, ben değil türü döküm ile birlikte mysql_real_escape_string
kullanmak istiyorum:
$query = "SELECT * FROM products WHERE product_id='" . (int)mysql_real_escape_string($_GET['id']) . "'";
En kötü durumda, bir 0
neden olur ve aynı zamanda tüm kötü amaçlı giriş kaçış olacaktır. mysql_real_escape_string
tüm kaçış / sanitasyon fonksiyonlarının çok yönlü yapar sorguları için güvenli hale getirmek için her türlü veri üzerinde kullanılabilir.
Kadar hazırlanmış deyimleri kullanarak gibi gitmeden, size SQL oluşturmak için sprintf'i kullanabilir ve otomatik tip döküm işlemek için:
$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", mysql_real_escape_string($_GET['id']));
Sözdizimi için PHP manuel sprintf girişine bakın.
Olduğu gibi tüm $_GET
ve $_POST
değişkenleri kaçmak için array_map
kullanıyorsanız bile basit alır, sonra onları kullanabilirsiniz:
$_GET = array_map('mysql_real_escape_string', $_GET);
$_POST = array_map('mysql_real_escape_string', $_POST);
$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", $_GET['id']);
Ben genellikle sadece kullanmak intval:
$product_id = intval($_GET['id']);
$query = "SELECT * FROM products WHERE product_id='" . $product_id . "'";