ダイナミックSQL接続は注入を防ぐ

5110 ワード

Parameterセキュリティコールを使用してページング保存プロセスにSQL注入がないとは信じないでください.
 
次のようになります.
 

   
   
   
   
    DbParameter[] dbParams = {
Data.MakeInParam(
" @PageIndex " , (DbType)SqlDbType.Int, 4 , pageIndex),
Data.MakeInParam(
" @PageSize " , (DbType)SqlDbType.Int, 4 , pageSize),
Data.MakeInParam(
" @Tables " , (DbType)SqlDbType.NVarChar, 1000 , tableName),
Data.MakeInParam(
" @Fields " , (DbType)SqlDbType.NVarChar, 2000 , fieldList),
Data.MakeInParam(
" @Where " , (DbType)SqlDbType.NVarChar, 2000 , where ),
Data.MakeInParam(
" @GroupBy " , (DbType)SqlDbType.NVarChar, 2000 , groupBy),
Data.MakeInParam(
" @OrderBy " , (DbType)SqlDbType.NVarChar, 1000 , orderBy),
Data.MakeOutParam(
" @ReturnCount " , (DbType)SqlDbType.Int, totalRecords),
};
list
= Data.GetDbDataReader( " getPagerROWOVER " , dbParams).ToList < TResult > ();


 
 
 
この呼び出しにはSQL注入も存在する.
 
NewsテーブルのTitleに「ブログパーク」がある記事を調べたいのですが、
PageIndex = 1
PageSize = 20
Tables = "News"
Fields = "*"
Where=「Title like'%ブログ園%'」
GroupBy = ""
OrderBy = "NewsID Desc"
この書き方は正しい.
ユーザーが「'%'or 1=1;--」と入力すると、SQL注入が存在します.
 
Where値をつづるときにテキストボックスの値を取るには、必ず不正な文字をフィルタします.
SQLパッチが存在する限り注入は存在する
SQLは自動的に次のように結合されます.
select*from News where Title like'%ブログ園%'正しい
select * from News where Title like '''%''''''%''' or 1=1;--%'' インジェクションの存在