我有一個存儲過程,它接收一個字符串參數「OrderByColumn」並相應地構建動態查詢。
這是我的存儲過程的代碼部分:動態查詢和sql注入
ROW_NUMBER() OVER (ORDER BY
CASE WHEN @OrderByColumn='Date' AND @OrderDirection=0 THEN tbl_Docs.Date END ASC,
CASE WHEN @OrderByColumn='Count' AND @OrderDirection=0 THEN tbl_Docs.Count END ASC,
而且在後面的功能我的代碼調用存儲過程,我有:
cmd.Parameters.Add("@OrderByColumn", SqlDbType.NVarChar).Value = orderByColumn;
cmd.Parameters.Add("@OrderDirection", SqlDbType.Int).Value = orderDirection;
用戶通過點擊設置OrderByColumn參數gridviews列標題,所以沒有直接的用戶輸入,所以我看到沒有選擇注入任何東西...
在書中,他們還驗證orderByColumn字符串,我不明白爲什麼它需要,因爲正如我注意到的,用戶不能輸入直接表達式。
我的問題是:
是否安全?
我也讀過一些書,ORDER BY子句不支持使用參數。
這是什麼意思?
你爲什麼不使用orm? – Paco 2010-02-17 11:19:15
圍繞ORDER BY的問題的最後一部分是您必須明確定義列名稱。 – 2010-02-17 11:20:13