2009-10-07 70 views
2

當我們遇到一個關於SQL注入的問題時,一位同事和我正在瀏覽所以我們想知道:參數化查詢如何在內部工作?您使用的API(假設它支持參數化查詢)是否執行連接,將查詢與參數組合在一起?或者,這些參數是否與查詢分開進行SQL引擎,並且根本不執行串聯?SQL參數如何在內部工作?

谷歌並沒有太大的幫助,但也許我們還沒有找到正確的東西。

回答

5

這些參數使它與查詢分開的SQL引擎。計算執行計劃或重用爲參數化查詢,然後查詢由sql引擎執行帶參數。

1

參數使其保持原樣到SQL服務器,並用元數據單獨「封裝」,指示其類型,無論是輸入還是輸出等。正如Alex Reitbort指出的那樣,因爲參數化語句是服務器級別的概念,不僅僅是從各種連接層調用命令的簡便方式。

0

參數與查詢一起傳遞(不在查詢中),並且在API根據基礎數據庫通信協議發送時自動轉義。

例如,您可能有

Query: <<<<select * from users where username = :username>>>> 
Param: <<<<:username text<<<<' or '1' = '1>>>>>>>> 

這並不是確切的編碼任何數據庫協議實際使用,但你的想法。

1

我懷疑SQL SERVER建立從那裏參數列表中串接給定的參數化查詢完整的查詢字符串。

它最有可能的分析基礎上,給出的參數化的命令字符串分割成一個內部數據結構保留單詞和符號(SELECT,FROM,「,」,「+」等)。在該數據結構中,有些屬性/位置可用於表名,文字等值。在此,它將每個傳入的參數(從列表中)複製(逐字)到該結構的適當部分。

所以你@UserName值:「X」;從用戶刪除 - 在不絕

需要轉義,只作爲文本值它確實是。