首頁 >資料庫 >mysql教程 >如何在 PDO 準備好的語句中安全地使用 ORDER BY 參數?

如何在 PDO 準備好的語句中安全地使用 ORDER BY 參數?

DDD
DDD原創
2024-12-26 01:12:10795瀏覽

How Can I Securely Use ORDER BY Parameters with PDO Prepared Statements?

PDO 準備語句:設定ORDER BY 參數

使用準備好的PDO 語句時,嘗試在語句中使用參數時可能會遇到到困難ORDER BY 子句。雖然該語句執行時不會出錯,但可能不會回傳任何結果。

要解決此問題,需要將ORDER BY 參數直接插入SQL 語句中,如以下程式碼所示:

$order = 'columnName';
$direction = 'ASC';

$stmt = $db->prepare("SELECT * from table WHERE column = :my_param ORDER BY $order $direction");

確保每個運算子和識別碼都是硬編碼而不是動態生成的至關重要。這種方法有助於防止注入攻擊。

增強程式碼安全性的另一種方法是使用白名單輔助函數,如下所示:

function white_list($value, $allowed_values, $error_message) {
    if (!in_array($value, $allowed_values)) {
        throw new Exception($error_message);
    } else {
        return $value;
    }
}

透過使用此函數,您可以檢查輸入的值是否存在於預在定義的有效值清單中,如果不存在則引發錯誤。

利用這個方法,您準備好的語句將既安全又能夠正確處理 ORDER BY 參數:

$order = white_list($order, ["name", "price", "qty"], "Invalid field name");
$direction = white_list($direction, ["ASC", "DESC"], "Invalid ORDER BY direction");

$sql = "SELECT field from table WHERE column = ? ORDER BY $order $direction";
$stmt = $db->prepare($sql);
$stmt->execute([$is_live]);

以上是如何在 PDO 準備好的語句中安全地使用 ORDER BY 參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn