判斷Web數(shù)據(jù)庫(kù)方式的一個(gè)小經(jīng)驗(yàn)
時(shí)間:2008-09-18 03:52:00 來(lái)源:無(wú)憂考網(wǎng) [字體:小 中 大]
很多站都是這樣防止或是過(guò)濾ASP提交的參數(shù)的
if isnumeric(id) Then
response.write "yes!"
call sql_query(id)
else
response.write "Error id"
Response.End
end if
這樣就不論怎么樣,如果出現(xiàn)非數(shù)值就出現(xiàn)錯(cuò)誤,很直接的防范,沒(méi)辦法出錯(cuò),也沒(méi)辦法得到數(shù)據(jù)庫(kù)類(lèi)型
但是其實(shí)我們還是有方法的,
比如這個(gè)ID是由xxx.asp提交的
xxx.asp?id=1
我們就在后面加上38個(gè)以上的數(shù)字,比如0
xxx.asp?id=100000000...{"0"x38}
這樣就能得讓上面那段ASP在執(zhí)行SQL_Query的時(shí)候出錯(cuò)了
提示如下
引用內(nèi)容:
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e57'
數(shù)字 '100000000000000000000000000000000000000000000000000000000000000000' 超出了數(shù)字表示范圍(精度為 38 位有效數(shù)字)。
/announce.asp,行 19
明白了沒(méi)?我們讓數(shù)據(jù)庫(kù)出錯(cuò)了.可見(jiàn)Isnumeric的防范并不是徹底的.
其實(shí)原因也很簡(jiǎn)單:SQL中定義 Numeric數(shù)據(jù)的精度只能是38,如果我們提交了超過(guò)38個(gè)數(shù)值以后就會(huì)出現(xiàn)錯(cuò)誤,從而讓數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤...
防范也很簡(jiǎn)單,一句代碼足夠
程序代碼:
if id>1000000000 Then Call Error(id) '100000000這樣的長(zhǎng)度總足夠了吧?
if isnumeric(id) Then
response.write "yes!"
call sql_query(id)
else
response.write "Error id"
Response.End
end if
這樣就不論怎么樣,如果出現(xiàn)非數(shù)值就出現(xiàn)錯(cuò)誤,很直接的防范,沒(méi)辦法出錯(cuò),也沒(méi)辦法得到數(shù)據(jù)庫(kù)類(lèi)型
但是其實(shí)我們還是有方法的,
比如這個(gè)ID是由xxx.asp提交的
xxx.asp?id=1
我們就在后面加上38個(gè)以上的數(shù)字,比如0
xxx.asp?id=100000000...{"0"x38}
這樣就能得讓上面那段ASP在執(zhí)行SQL_Query的時(shí)候出錯(cuò)了
提示如下
引用內(nèi)容:
Microsoft OLE DB Provider for SQL Server 錯(cuò)誤 '80040e57'
數(shù)字 '100000000000000000000000000000000000000000000000000000000000000000' 超出了數(shù)字表示范圍(精度為 38 位有效數(shù)字)。
/announce.asp,行 19
明白了沒(méi)?我們讓數(shù)據(jù)庫(kù)出錯(cuò)了.可見(jiàn)Isnumeric的防范并不是徹底的.
其實(shí)原因也很簡(jiǎn)單:SQL中定義 Numeric數(shù)據(jù)的精度只能是38,如果我們提交了超過(guò)38個(gè)數(shù)值以后就會(huì)出現(xiàn)錯(cuò)誤,從而讓數(shù)據(jù)庫(kù)出現(xiàn)錯(cuò)誤...
防范也很簡(jiǎn)單,一句代碼足夠
程序代碼:
if id>1000000000 Then Call Error(id) '100000000這樣的長(zhǎng)度總足夠了吧?
更多請(qǐng)關(guān)注考試大計(jì)算機(jī)等級(jí)站