使用 PDO 準備語句時,請務必注意佔位符只能表示資料文字。這意味著嘗試使用bindParam()或bindValue()綁定標識符(表或欄位名稱)或語法關鍵字將導致意外行為。
使用動態時對於涉及動態指定表或欄位名稱的查詢,仔細處理識別碼綁定至關重要。 PDO 不提供綁定識別碼的直接支援。因此,開發人員必須手動格式化和驗證標識符,以確保安全並防止注入攻擊。
要安全地格式化標識符,請遵循以下規則:
Once格式化後,請根據允許值的硬編碼白名單檢查標識符以防止誤用。
同樣,綁定語法關鍵字(例如「ORDER BY」或「DESC」)也不是由 PDO 支援。開發人員必須手動驗證關鍵字並將其列入白名單,以防止惡意輸入改變查詢的行為。
以下程式碼示範如何使用字串格式和白名單處理動態標識符和關鍵字:
$field = "`" . str_replace("`", "``", $_GET['field']) . "`"; $dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; $sql = "SELECT $field FROM t ORDER BY field $dir";
在此範例中,動態字段名稱用反引號括起來,並根據需要進行轉義。排序方向根據白名單進行驗證,以防止惡意輸入更改查詢。
透過仔細遵循這些準則,開發人員可以使用具有動態標識符和關鍵字的 PDO 準備語句,同時保持安全性並防止注入攻擊。
以上是如何安全地使用具有動態標識符和關鍵字的 PDO 準備語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!