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

小紀

Adam Lee 提到...

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

在Hyper-V上跑ubuntu 22.04 Desktop, 裝完後一登入就凍住

如果你也遇到這情況, 你可以執行以下步驟 按 Ctrl+Alt+F3 進入 virtual console. (按Ctrl+Alt+F1 可以再回到GUI) 登入後執行下面指令 (更新kernel) * sudo add-apt-repository ppa:capp...