動態SQL拼接要防注入
阿新 • • 發佈:2019-02-15
不要相信使用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,
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("
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;--%'' 存在注入