SQL 注入仍然是Web 應用程式的主要威脅,因為它使攻擊者能夠操縱資料庫查詢並可能危及敏感數據。了解如何防止此漏洞對於保護資料庫完整性至關重要。
SQL 注入的最有效解決方案是將資料與 SQL 命令分開。資料應被視為原始輸入,絕不允許資料庫伺服器將其解釋為命令。這可以透過使用準備好的語句和參數化查詢來實現,它們具有以下幾個好處:
將準備好的語句與PDO(適用於所有支援的資料庫)或MySQLi(適用於MySQL)結合使用,可以提供強大的機制來防止SQL注入:
PDO:
$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name'); $stmt->execute(['name' => $name]);
MySQLi:
$stmt = $db->prepare('SELECT * FROM employees WHERE name = ?'); $stmt->bind_param('s', $name); $stmt->execute();
$dbConnection->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $dbConnection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbConnection->set_charset('utf8mb4');
MySQLi:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); $dbConnection->set_charset('utf8mb4');
準備語句的好處
準備好的語句可以處理動態嗎查詢?
雖然準備好的語句支援參數化,但它們不能用於動態變更查詢結構。對於這些場景,建議使用替代方法,例如白名單過濾器。以上是PHP中的Prepared語句如何有效防止SQL注入攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!