經得起原始碼資安弱點掃描的程式設計習慣培養(四)_1.Injection注入攻擊_SQL Injection_order by 語句正確參數化套入
接續前幾篇系列
在專案不斷去累積具有資安程式撰寫設計習慣更上一層樓
於近期又被掃到程式寫的部分具有高風險
而且是在SQL部分注入的風險
這就令人納悶因為早已知道要遵照Parameter來防止這種安全問題才對
查閱了報告後才得知
原來其中一段在order by 由於採用變動帶字串取代方式的可變動設計
但忽略了參數化處理
這裡要小心只要是用字串格式化串接外部傳入的變動內容的方式來產生 SQL 語句就一定會有 SQL injection的風險!
此外除where 語句部分也可能在order by 語句部分發生
只是打從娘胎 痾不是我是說從開始寫.net以來好像沒看過有人參數化是
直接套入order by [@FieldName] [@SortDir(asc/desc)]
來試試看好了果真會報錯 (。ŏ﹏ŏ)
而比較正確設計方式就是利用 CASE WHEN 排序方向 + CASE WHEN 排序對應欄位
來自己寫入對應order by 後續指令字串
外部傳入的參數則用於條件分支判斷而已
Ref:
[如何提升系統品質-Day20]Security - SQL injection
“Order By” using a parameter for the column name
How do you ORDER BY a parameter?
How to ORDER BY using an @parameter
Dynamic ORDER BY Statements in Stored Procedures
留言
張貼留言