資源描述:
《如此高效通用的分頁(yè)存儲(chǔ)過(guò)程是帶有sql注入漏洞的--》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、如此高效通用的分頁(yè)存儲(chǔ)過(guò)程是帶有sql注入漏洞的>> 在google中搜索分頁(yè)存儲(chǔ)過(guò)程會(huì)出來(lái)好多結(jié)果,是大家常用的分頁(yè)存儲(chǔ)過(guò)程,今天我卻要說(shuō)它是有漏洞的,而且漏洞無(wú)法通過(guò)修改存儲(chǔ)過(guò)程進(jìn)行補(bǔ)救,如果你覺得我錯(cuò)了,請(qǐng)讀下去也許你會(huì)改變看法?! ⊥ǔ4蠹叶紩?huì)認(rèn)為存儲(chǔ)過(guò)程可以避免sql注入的漏洞,這適用于一般的存儲(chǔ)過(guò)程,而對(duì)于通用分頁(yè)存儲(chǔ)過(guò)程是不適合的,請(qǐng)看下面的代碼和分析! 一般的通用的分頁(yè)存儲(chǔ)過(guò)程代碼如下: 通用分頁(yè)存儲(chǔ)過(guò)程CREATEPROCEDUREpaginationtblNamevarchar
2、(255),--表名strGetFieldsvarchar(1000)='*',--需要返回的列fldNamevarchar(255)='',--排序的字段名PageSizeint=10,--頁(yè)尺寸PageIndexint=1,--頁(yè)碼doCountbit=0,--返回記錄總數(shù),非0值則返回OrderTypebit=0,--設(shè)置排序類型,非0值則降序str['+tblName+']['+tblName+']'end--以上代碼的意思
3、是如果doCount傳遞過(guò)來(lái)的不是0,就執(zhí)行總數(shù)統(tǒng)計(jì)。以下的所有代碼都是doCount為0的情況 elsebeginifOrderType!=0beginsetstrTmp='<(selectmin'setstrOrder='orderby['+fldName+']desc'--如果OrderType不是0,就執(zhí)行降序,這句很重要!end elsebeginsetstrTmp='>(selectmax'setstrOrder
4、='orderby['+fldName+']asc'endifPageIndex=1beginifstr['+tblName+']['+tblName+']'+strOrder--如果是第一頁(yè)就執(zhí)行以上代碼,這樣會(huì)加快執(zhí)行速度end elsebegin--以下代碼賦予了strSQL以真正執(zhí)行的SQL代碼setstrSQL='selecttop'+str(PageSize)+''+strGetFiel
5、ds+'from['+tblName+']e+']'+strTmp+'(['+fldName+'])from(selecttop'+str((PageIndex-1)*PageSize)+'['+fldName+']from['+tblName+']'+strOrder+')astblTmp)'+strOrderifstr['+tblName+']e+&
6、#39;]'+strTmp+'(['+fldName+'])from(selecttop'+str((PageIndex-1)*PageSize)+'['+fldName+']from['+tblName+']p)and'+strWhere+''+strOrderendendexec(strSQL)GO 大家可以看到上面的12下一頁(yè)>>>>這篇文章來(lái)自..,。存儲(chǔ)過(guò)程中是通過(guò)一些步驟最終拼接成一個(gè)s
7、ql字符串,然后通過(guò)exec執(zhí)行這個(gè)串得到分頁(yè)的結(jié)果?! ∥覀兗俣ㄒ鲆粋€(gè)這樣的查詢,通過(guò)用戶名UserName模糊查詢用戶,為了敘述方便,便于理解我們只考慮取第一頁(yè)的情況,取出存儲(chǔ)過(guò)程中取第一頁(yè)的拼串行如下:setstrSQL='SELECTTOP'+str(PageSize)+''+strGetFields+'from['+tblName+'] e為UserAccount,strOrder為ORDER BY IDDESC那么上面一行可以寫成如下
8、形式: setstrSQL='SELECTTOP20* from[UserAccount] sdog 我們用SqlParameter傳遞參數(shù)給分頁(yè)存儲(chǔ)過(guò)程strSSQLServer2000的數(shù)據(jù)庫(kù),而非使用SQL2005的新特性分頁(yè)?! ∥恼拢簓ukaizhao/上一頁(yè)12>>>>這篇文章來(lái)自..,。