我有以下代碼:SqlDataAdapter - 防止表名上的SQL注入?
SqlDataAdapter adapter = new SqlDataAdapter("SELECT TOP 0 * FROM [tableName]", conn);
DataTable dt = new DataTable();
adapter.FillSchema(dt, SchemaType.Mapped);
我使用它來構建表架構的DataTable
。
通常情況下,當人們詢問SQL注入,他們都在談論查詢參數:),我的問題是關於表名:
SELECT TOP 0 *
FROM [tableName]
[tableName]
實際上將是動態的/在運行時確定(這是一個框架btw)...
tableName
傳入該方法是不可信的,所以我想確保沒有任何有趣的業務正在進行?
我是否必須手動擦洗表名(並且我確信我會錯過什麼)?還是有一個內置的方法呢?或者以某種方式防止表名上的SQL注入?
獲取有效表名稱的列表,並根據可信列表檢查您的輸入 – Steve
我對設計用於從任何表中返回數據的框架非常謹慎。這是一個非常好的指示,你正在計劃使用select *來使所有東西都變得通用。雖然這看起來很酷,但它是有代價的。這個成本就是性能。你不能像這樣調整查詢。 –
如果你決定使用這樣的動態sql路由,你應該在QuoteName中包裝tableName。 –