簡體   English   中英

PHP:filter_var 消毒是否足夠安全?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM