在我的應用程序中,我使用了一個XML Web服務,它允許我根據WHERE
子句查詢數據。我想實現搜索功能,用戶輸入應該進入WHERE
子句。該請求是這樣的:如何在沒有PreparedStatements的情況下避免SQL注入
<Query>
<Selection>
<sqlwhere>
id IN (
SELECT something
FROM some_table
WHERE something_different LIKE '%<user input>%'
ESCAPE '\'
)
</sqlwhere>
</Selection>
</Query>
服務包裝此部分爲實際的SELECT
聲明。該服務可能使用Firebird或MS SQL Server數據庫。
我該如何輕鬆地逃避用戶輸入?足以逃避撇號嗎?
更新
也許我是有點不清楚。上面的部分發送給服務,服務以XML格式發送匹配的數據。我是而不是服務維護者。這意味着我不知道底層數據庫,因此無法連接到它來準備語句。
由於性能問題,我也無法獲取所有數據並在我的代碼中對其進行過濾。這是我可以有效地與之交談的唯一方式。
爲什麼人們仍然試圖想出自己的方式來防止sql注入?堅持基於參數的查詢標準。 – Takarii
@Takarii你甚至讀過這個問題嗎? – stevecross
我做過了,但我仍不明白爲什麼要這樣做。如果輸入沒有被消毒,那麼它仍然存在風險 – Takarii