asp中trim()函數(shù)及漏洞詳述,用戶注冊異型“空格”對策
當(dāng)前位置:點(diǎn)晴教程→知識管理交流
→『 技術(shù)文檔交流 』
在asp編程中,我們常常使用trim(rtrim,ltrim)函數(shù)去掉一些數(shù)據(jù)的開頭和結(jié)尾的空格,筆者最近寫了一個(gè)asp聊天室,有下面的一段代碼: [br][br]<% dim name,title [br]name=trim(request.form("name")) [br]password=trim(request.form("password")) [br]if name=""or password="" then response.redirect "error.asp?error=name&name=null" [br]mydsn="dsn=test;uid=test;pwd=test" [br]set cn=server.createobject("adodb.connection") [br]cn.open mydsn [br]sql="insert into test(name,title) values('"&name&"','"&password&"')" [br]cn.execute(sql) [br]cn.close%> [br][br]使用了trim函數(shù)來去掉開頭和結(jié)尾的空格,在一般的情況下,這段程序執(zhí)行的很正常,但是后來竟然發(fā)現(xiàn)有人竟然可以使用空格來,意思就是說,該用戶的name完全為空格,但是自己嘗試使用空格卻無論都不能通過(即被程序監(jiān)測了出來),開頭和結(jié)尾的空格都被trim函數(shù)給去掉了,即使中間有空格,若需要的話也可以使用一個(gè)函數(shù)把中間的空格給去掉,由于使用的是sql數(shù)據(jù)庫記錄下的用戶資料,于是懷疑他使用了其它什么的東西讓系統(tǒng)看不到,于是去察看紀(jì)錄用戶資料的sql數(shù)據(jù)庫(曾經(jīng)使用這種方法看到了帶換行符的用戶),但是仍然看到數(shù)據(jù)庫中的改用戶的資料也是空格,這難道說該用戶使用了一種手段可以繞過我的用戶名和密碼監(jiān)測嗎???實(shí)在找不到程序上的漏洞,于是只能向這位用戶請教,幸運(yùn)的是這位用戶爽快的告訴了筆者,原來是"alt+255",按住alt鍵然后依次按下小鍵盤中"2","5","5"就會產(chǎn)生一個(gè)比較特殊的東西"空格"字符(這個(gè)概念筆者也不是比較清楚,這是一種控制字符,在一些編輯器中可以看到word2000,應(yīng)該還有其他的控制字符),這個(gè)空格字符不同于傳統(tǒng)的按下空格鍵產(chǎn)生的字符,它的asc代碼是255,而傳統(tǒng)的space鍵入的空格的asc代碼是32,trim函數(shù)只能認(rèn)識asc代碼為32的代碼并去除,所以出現(xiàn)了出現(xiàn)空格用戶的情況!針對這種情況筆者設(shè)計(jì)了下面的兩種函數(shù)去掉這"空格"字符:[br]function xuankong(str) [br]dim result [br]dim j [br] j=len(str) [br] result="" [br]dim i [br]for i = 1 to j [br] select case mid(str,i,1) [br] case "<" [br] result=result+"<" [br] case ">" [br] result=result+">" [br] case chr(34) [br] result=result+""" [br] case "&" [br] result=result+"&" '以上代碼轉(zhuǎn)換一些html標(biāo)記 [br] case chr(255) '防止特殊空格 [br] result=result [br] case chr(13) '防止回車符 [br] result=result+"" [br] case chr(10) '防止換行符 [br] result=result+"" [br] case else [br] result=result+mid(str,i,1) [br] end select [br]next [br]xuankong=result [br]end function [br]然后在你的asp程序中使用這個(gè)函數(shù),比如: [br]name=xuankong(trim(request.form("name"))) [br][br]因?yàn)樽址?-z asc代碼的數(shù)值為 48-122 這一個(gè)區(qū)段 ,所以可以使用如下的方法監(jiān)測: [br][br]dim j [br]j=len(trim(request.form("name"))) [br]for i= 1 to j [br]if asc(mid(name,i,1))>122 or asc(mid(name,i,1))<48 then response..redirect"error.asp?[br]error=special" [br]next[br] [br]雖然這種“空格”暫時(shí)沒有發(fā)現(xiàn)會破壞程序的問題,但是卻是可以讓人搗亂的,還是防了的好,不過這種空格也有一種好處,如果作為你得上網(wǎng)密碼的話,嘿嘿… …恐怕沒有幾個(gè)人能看到吧!看到的都是以為是space,但是卻不是… … 筆者不熟悉php和jsp所以不知道在這兩種東西中是否會存在這種問題。
該文章在 2010/7/22 16:03:40 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |