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 on ARM...

 在MacOS上要使用windows去編譯一些程式常常會遇到一些plamform的問題... - cmake build failed 當使用 cmake -S . -B build 要建立 build system files 原本的專案是在x64上, 所以直接執行會直接使用A...