我目前使用MySql,但寧願使用ODBC解決方案使其成爲未來的證明。如何清理ODBC數據庫輸入?
如何在將用戶輸入傳遞到ODBC數據庫之前對用戶輸入進行清理?
而且,當我在它的時候,我用雙引號包裹我的字符串,例如, 「INSERT INTO VALUES(介紹)‘’` - 但如果文字本身包含雙引號
我目前使用MySql,但寧願使用ODBC解決方案使其成爲未來的證明。如何清理ODBC數據庫輸入?
如何在將用戶輸入傳遞到ODBC數據庫之前對用戶輸入進行清理?
而且,當我在它的時候,我用雙引號包裹我的字符串,例如, 「INSERT INTO VALUES(介紹)‘’` - 但如果文字本身包含雙引號
嘗試使用參數化的SQL語句
這樣。
INSERT INTO MyTable (Field1,Field2) VALUES (:Param1,:Param2)
檢查本文從英巴卡迪諾有關如何使用參數Using Parameters in Queries.
+1我試圖按照http://docwiki.embarcadero.com/CodeExamples/en/ADOQuery_%28Delphi%29的例子,但我得到一個'_latin1'的例外
更多信息,您可以看看這裏還Delphi - prevent against SQL injection,也有一些指示/例子。
你是指什麼樣的用戶輸入?例如,如果用戶給你提供查詢來運行,那麼你就有很多工作要做。正如你所提到的,除了轉義特殊字符之外,還需要注意諸如SQL注入之類的安全問題,並且您可能還想限制可接受的語句集(例如,不要允許DDL)。另一方面,如果用戶只是給你提供數據,而你的應用程序使用ODBC將數據寫入數據庫,那麼你不必做任何事情,因爲數據和SQL語句不會混合。 – 2011-06-01 07:57:42
可能重複的[Delphi - 預防SQL注入](http://stackoverflow.com/questions/6000648/delphi-prevent-against-sql-injection) – Johan 2011-06-01 08:58:27
ODBC將**不會**使它成爲未來的證明,它會讓它慢下來,剝奪你的選擇,並使其越野車。任何數量的替代品都可以,ZEOS可以連接大約10個數據庫,ADO也可以。 – Johan 2011-06-01 22:03:59