2013-06-20 60 views
1

我在說Delphi + ADO + MSSQL。 好吧,我知道帶參數的查詢對於SQL注入是非常安全的。另一方面,動態查詢是相當不安全的。 但是經典的FieldByName方法呢?我可以安全地分配給FieldByName一個絕對的任何字符串值,而不冒冒險注射?是FieldByName注入安全嗎?

+0

雖然從注射的角度來看沒有風險,但是如果讓用戶輸入要更新的字段的名稱,那麼您很快就會破壞數據。 – TLama

+0

'.FieldByName'是一個函數。 「我可以爲函數賦值任何隨機字符串值」是什麼意思?你的意思是使用abitrary參數調用函數,或者給TField對象的屬性賦值(哪個?)函數的返回值是? –

+0

我可能使用了錯誤的表達,對不起。 我的意思是 - 我可以使用SomeDataset.FieldByName('MyField')。AsString:='什麼,甚至包括SQL命令'安全嗎? 正如bummi和TLama所說,我可以。 –

回答

5

它是安全的。 Ado正在使用更新/插入/刪除參數。

您可以使用SQLProfile(例如,

exec sp_executesql N'UPDATE "test".."Activity" SET "data"[email protected] WHERE "InvokeTime"[email protected] AND "data"[email protected]',N'@P1 float,@P2 datetime,@P3 float',1,'2013-04-24 10:46:22.933',0,48607825089780715 

exec sp_executesql N'INSERT INTO "test".."Activity" ("InvokeTime","data") VALUES (@P1,@P2)',N'@P1 datetime,@P2 float','2000-01-01 00:00:00',2 

exec sp_executesql N'DELETE FROM "test".."Activity" WHERE "InvokeTime"[email protected] AND "data"[email protected]',N'@P1 datetime,@P2 float','2000-01-01 00:00:00',3 
+1

非常感謝! –

+0

@bummi。你的意思是」安全「你不是嗎? ? –

+0

@ J.Gonzalez是的安全不保存,謝謝。 – bummi