首頁 >資料庫 >mysql教程 >帶問號的參數化查詢如何防止SQL注入攻擊?

帶問號的參數化查詢如何防止SQL注入攻擊?

Susan Sarandon
Susan Sarandon原創
2025-01-09 21:21:43497瀏覽

How Do Parameterized Queries with Question Marks Prevent SQL Injection Attacks?

透過參數化查詢來防止 SQL 注入:問號方法

參數化查詢(在 SQL 中以問號 (?) 表示)是針對 SQL 注入漏洞的重要防禦措施。 在程式中動態建構和執行 SQL 語句時,這些查詢至關重要。

參數化查詢相對於手動建構查詢的核心優勢在於增強的安全性。 資料庫處理參數插入,自動應用必要的轉義機制來防止惡意程式碼注入。 考慮這個易受攻擊的範例:

<code class="language-sql">string s = getStudentName();
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')";
cmd.Execute();</code>

如果使用者輸入:Robert'); DROP TABLE students; --

產生的查詢容易受到攻擊。

解決方案涉及使用參數化查詢:

<code class="language-sql">s = getStudentName();
cmd.CommandText = "SELECT * FROM students WHERE name = ?";
cmd.Parameters.Add(s);
cmd.Execute();</code>

該庫現在會清理輸入,使惡意程式碼變得無害:查詢實際上變成 "SELECT * FROM students WHERE name = 'Robert''); DROP TABLE students; --'" — 注入的程式碼被視為文字文字。

雖然問號是廣泛使用的佔位符,但其他資料庫系統(例如 MS SQL Server)利用命名參數(例如 @varname)來提高可讀性:

<code class="language-sql">cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname";
cmd.Parameters.AddWithValue("@varname", 7);
result = cmd.Execute();</code>

這種方法具有相同的安全優勢,並且具有更清晰的參數識別。

以上是帶問號的參數化查詢如何防止SQL注入攻擊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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