2005-11-09

一隻嚴重的小bug

我從沒想過我竟然會犯這樣的錯,
一個很嚴重的錯誤!!

先看一下下面的程式片斷吧!

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 呢?

小紀

AJ 提到...

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(" ","")

windows 11 不使用微軟帳號登入

試過"斷網路", 試過"用無效的email登入失敗" 最後還是改registry最好用...  在安裝畫面中, 按下 Shift+F10開啟命令提示字元視窗 然後輸入regedit 切換到 HKEY_LOCAL_MACHINE\Softw...