在asp程式設計中,我們常常使用trim(rtrim,ltrim)函式去掉一些資料的開頭和結尾的空格,筆者最近寫了乙個asp聊天室,有下面的一段**:
<% dim name,title
name=trim(request.form("name"))
password=trim(request.form("password"))
if name=""or password="" then response.redirect "error.asp?error=name&name=null"
mydsn="dsn=test;uid=test;pwd=test"
set **=server.createobject("adodb.connection")
**.open mydsn
sql="insert into test(name,title) values('"&name&"','"&password&"')"
**.execute(sql)
**.close%>
使用了trim函式來去掉開頭和結尾的空格,在一般的情況下,這段程式執行的很正常,但是後來竟然發現有人竟然可以使用空格來,意思就是說,該使用者的name完全為空格,但是自己嘗試使用空格卻無論都不能通過(即被程式監測了出來),開頭和結尾的空格都被trim函式給去掉了,即使中間有空格,若需要的話也可以使用乙個函式把中間的空格給去掉,由於使用的是sql資料庫記錄下的使用者資料,於是懷疑他使用了其它什麼的東西讓系統看不到,於是去察看紀錄使用者資料的sql資料庫(曾經使用這種方法看到了帶換行符的使用者),但是仍然看到資料庫中的改使用者的資料也是空格,這難道說該使用者使用了一種手段可以繞過我的使用者名稱和密碼監測嗎???實在找不到程式上的漏洞,於是只能向這位使用者請教,幸運的是這位使用者爽快的告訴了筆者,原來是"alt+255",按住alt鍵然後依次按下小鍵盤中"2","5","5"就會產生乙個比較特殊的東西"空格"字元(這個概念筆者也不是比較清楚,這是一種控制字元,在一些編輯器中可以看到word2000,應該還有其他的控制字元),這個空格字元不同於傳統的按下空格鍵產生的字元,它的asc**是255,而傳統的space鍵入的空格的asc**是32,trim函式只能認識asc**為32的**並去除,所以出現了出現空格使用者的情況!針對這種情況筆者設計了下面的兩種函式去掉這"空格"字元:
function xuankong(str)
dim result
dim j
j=len(str)
result=""
dim i
for i = 1 to j
select case mid(str,i,1)
case "<"
result=result+"<"
case ">"
result=result+">"
case chr(34)
result=result+"""
case "&"
result=result+"&" '以上**轉換一些html標記
case chr(255) '防止特殊空格
result=result
case chr(13) '防止回車符
result=result+""
case chr(10) '防止換行符
result=result+""
case else
result=result+mid(str,i,1)
end select
next
xuankong=result
end function
然後在你的asp程式中使用這個函式,比如:
name=xuankong(trim(request.form("name")))
因為字元0-z asc**的數值為 48-122 這乙個區段 ,所以可以使用如下的方法監測:
dim j
j=len(trim(request.form("name")))
for i= 1 to j
if asc(mid(name,i,1))>122 or asc(mid(name,i,1))<48 then response..redirect"error.asp?
error=special"
next
雖然這種「空格」暫時沒有發現會破壞程式的問題,但是卻是可以讓人搗亂的,還是防了的好,不過這種空格也有一種好處,如果作為你得上網密碼的話,嘿嘿… …恐怕沒有幾個人能看到吧!看到的都是以為是space,但是卻不是… … 筆者不熟悉php和jsp所以不知道在這兩種東西中是否會存在這種問題
在asp程式設計中trim函式的詳述及漏洞破解與防護
在asp程式設計中,我們常常使用trim rtrim,ltrim 函式去掉一些資料的開頭和結尾的空格,筆者最近寫了乙個asp聊天室,有下面的一段 dim name,title name trim request.form name password trim request.form passwor...
oracle中的trim函式
oracle中的trim函式是用來刪除給定字串或者給定數字中的頭部或者尾部的給定字元。trim函式具有如下的形式 trim leading trailing both 匹配字串或數值 from 需要被處理的字串或數值 這裡如果指明了leading表示從刪除頭部匹配的字串,如果指明了trailing表...
在ASP程式設計中在使用Response物件
response物件在asp程式設計中的主要功能是從瀏覽器端到伺服器端傳送資料到瀏覽器的客戶端,我們知道asp的指令碼是在伺服器端執行的,他並沒有輸出 值 的功能。要想擁有輸出 值 就必須依靠response物件。在這裡我們將關注其最常用的一些功能。也就是在程式設計中經常要用到的一些功能,具體如下 ...