BS系統(tǒng)中,傳統(tǒng)的注入攻擊手段有很多,。
最基本的,,利用單引號(hào)攻擊的,很容易解決,,用類似于QuotedStr()(實(shí)際開發(fā)是其他語(yǔ)言,,這里用DELPHI中的函數(shù)代替)的函數(shù)處理參數(shù)即可。 但實(shí)際應(yīng)用中,,不可避免會(huì)有一些應(yīng)用需要直接傳遞參數(shù),,例如表名、查詢條件,、排序條件等等 對(duì)這些應(yīng)用的注入攻擊防不勝防,。 我考慮了一個(gè)思路,供大家參考,。 1 對(duì)所有網(wǎng)頁(yè)傳入的參數(shù)分三種,。 a) 數(shù)字類型,用StrToInt函數(shù)處理,。 b) 字符串類型,,用QuotedStr函數(shù)處理。 c) 需要直接傳遞的參數(shù),,這是需要著重考慮的類型,。 2 對(duì)所有數(shù)據(jù)庫(kù)操作主要分五種,不允許程序直接執(zhí)行SQL語(yǔ)句: a) select 查詢 b) update 更新 c) insert 新增 d) delete 刪除 e) exec 執(zhí)行存儲(chǔ)過程 3 對(duì)于以上幾種數(shù)據(jù)庫(kù)操作的所有參數(shù),,例如select 操作中的 查詢條件,、排序條件等,都進(jìn)行合法性校驗(yàn): a) 里面存在 "--" "/*" "*/" 的,,都視為非法條件,。 b) 將條件拆分為單詞,,如果存在以下單詞:delete insert update exec execute create drop grant的,都視為非法條件,。(正常的表名,、字段名中不可能有上面這些關(guān)鍵字吧。) c) 傳入的查詢條件,,校驗(yàn)里面的括號(hào),,凡是右括號(hào)在左括號(hào)前面(不配對(duì))的,都視為非法條件,。 d) 傳入的查詢條件,,前后加括號(hào)。 經(jīng)過以上校驗(yàn),,應(yīng)該基本可以保證參數(shù)是正常的參數(shù),,供大家參考。同時(shí)也希望大家能找出其中的漏洞,,我可以進(jìn)行改進(jìn)^_^ |
|