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

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

Barbara Streisand
發布: 2025-01-09 21:32:45
原創
240 人瀏覽過

How Do Parameterized Queries in SQL Prevent SQL Injection Attacks?

SQL參數化查詢與問號

查閱SQL文件時,您可能會在查詢中遇到問號(?)。這些佔位符代表參數化查詢,廣泛用於在程式中執行動態SQL。

參數化查詢具有諸多優勢。它們透過將參數值與查詢本身分開來簡化程式碼,使其更有效率、更靈活。此外,它們透過防止SQL注入攻擊來增強安全性。

例如,在一個偽代碼範例中:

<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = 7")
result = cmd.Execute()</code>
登入後複製

可以改寫為:

<code>ODBCCommand cmd = new ODBCCommand("SELECT thingA FROM tableA WHERE thingB = ?")
cmd.Parameters.Add(7)
result = cmd.Execute()</code>
登入後複製

此技術確保正確的字串轉義,消除了SQL注入的風險。考慮以下場景:

<code>string s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE (name = '" + s + "')"
cmd.Execute()</code>
登入後複製

如果使用者輸入字串 Robert'); DROP TABLE students; --,則可能發生SQL注入攻擊。但是,使用參數化查詢:

<code>s = getStudentName()
cmd.CommandText = "SELECT * FROM students WHERE name = ?"
cmd.Parameters.Add(s)
cmd.Execute()</code>
登入後複製

函式庫函數會對輸入進行清理,防止惡意程式碼執行。

或者,Microsoft SQL Server 使用命名參數,這提高了可讀性和清晰度:

<code>cmd.Text = "SELECT thingA FROM tableA WHERE thingB = @varname"
cmd.Parameters.AddWithValue("@varname", 7)
result = cmd.Execute()</code>
登入後複製

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板