經得起原始碼資安弱點掃描的程式設計習慣培養(四)_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




留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header