我從沒想過我竟然會犯這樣的錯,
一個很嚴重的錯誤!!
先看一下下面的程式片斷吧!
function filter(byval strinput)
dim strTmp
strTmp = replace(strinput,"'","")
strTmp = replace(strinput," ","")
return strTmp
end function
主要是用來防止SQL Injection的!!
但是在這段程式中有隻小bug在裡面,
你可以找的出來嗎??而且知道會造成什麼問題嗎??
3 則留言:
有二個小問題
會用byval 及 replace 應該是vbscript
如果是vbscript
1. filter 是 保留字
2. vb 不能用 return
不知是不是這二小bug 還是有其他方法會造成injection 呢?
小紀
byval是vb的沒錯.
不過我是用vb.net 2003
那時還是習慣用asp的寫法.
所以用byval後就沒用as string...
因為是vb.net,
所以可以用return,
所以不是這兩個問題...
這個function最主要的問題在replace那兩行.
因為我是另外宣告一個strTmp.
所以
strTmp = Replace(strinput, "'", "")
strTmp = Replace(strinput, " ", "")
後,
實際上真正replace的只有空格.
所以沒有過濾單引號,
兩個只要有一個沒過濾,
就留下了漏洞了...
strTmp = strinput.replace("'","").replace(" ","")
張貼留言