[英]PHP: filter_var sanitization secure enough?
我有一個包含以下行的 PHP 腳本:
$query = "SELECT * FROM products WHERE product_id='" . filter_var($_GET[id], FILTER_SANITIZE_NUMBER_INT) . "'";
這足夠安全嗎? 你會如何改進這段代碼?
在這種情況下是安全的,但對於更通用的方法,我寧願將mysql_real_escape_string
與類型轉換結合使用:
$query = "SELECT * FROM products WHERE product_id='" . (int)mysql_real_escape_string($_GET['id']) . "'";
在最壞的情況下,這將導致0
並且也會逃避所有惡意輸入。 mysql_real_escape_string
可用於各種數據以使其安全地進行查詢,這使其成為所有轉義/清理功能中最通用的。
無需使用准備好的語句,您可以使用 sprintf 來創建 SQL 並自動處理類型轉換:
$query = sprintf("SELECT * FROM products WHERE product_id = '%d'", mysql_real_escape_string($_GET['id']));
有關語法,請參閱 PHP 手冊中的sprintf條目。
如果您使用array_map
轉義所有$_GET
和$_POST
變量,它會變得更加簡單,然后您可以按原樣使用它們:
$_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']);
我通常只使用intval :
$product_id = intval($_GET['id']);
$query = "SELECT * FROM products WHERE product_id='" . $product_id . "'";
可能這對你有用......!
$query=query("SELECT * FROM products WHERE product_id= ". escape_string($_GET['id']) . " ");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.