一個asp函數, 解決SQL Injection漏洞

來源:互聯網
上載者:User
函數很簡單, 主要是針對字串和數字兩種類型的傳入資料分別進行了處理,具體用法:

字元類型的
strUsername = CheckInput(Request(“username“),“s“)
數字類型的
ID = CheckInput(Request(“id“),“i“)

下面是函數

Function CheckInput(str,strType)
   '函數功能:過濾字元參數中的單引號,對於數字參數進行判斷,如果不是數實值型別,則賦值0
   '參數意義:  str        ---- 要過濾的參數
   '                 strType ---- 參數類型,分為字元型和數字型,字元型為"s",數字型為"i"
 Dim strTmp
 strTmp     = ""
 If strType ="s" Then
  strTmp = Replace(Trim(str),"'","''")
 ElseIf strType="i" Then
  If isNumeric(str)=False Then str="0"
  strTmp = str
 Else
  strTmp = str
 End If
 CheckInput = strTmp
End Function

最好把“:”也過濾掉
建議用CHR()代替

關於Asp的SQL Injection預防問題,似乎已經沒什麼可說的了。在我做的Asp的項目裡面,

都是用自己寫的函數來處理用戶端提交進來的資料,我的Blog裡面也貼過這個函數。

具體可以參考http://blog.csdn.net/cqq/archive/2004/09/23/113786.aspx

不過,從朋友的留言和網上其他的一些講如何防範SQL Injection的函數來看,很多人都走進了一個誤區。

SQL Injection的危害是很大的,比如對於SQL Server,可以建立、刪除資料庫,執行系統命令等等, 如

drop table tbl_name, execute master.dbo.xp_cmdshell "command"

所以很多人寫的函數就是拚命的去過濾這些可能引起危害的關鍵詞,比如drop ,分號,and,exe,mid等等,羅列了

一大堆。

其實,盡可以不必那麼繁瑣,非要把簡單的事情複雜化。

對於過濾,ASP中只要針對字元型和數字型分別處理就可以了,


字元型的,把單引號轉換成兩個單引號  strTmp = Replace(Trim(str),"'","''")

數字型的,就判斷是否能夠轉換成數字型的 ,用 isNumeric函數

現在網上說的能夠繞過單引號的攻擊,其實是針對數字類型的

如果對於過濾了單引號的字元型,還有辦法繞過,那就沒得玩了........

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.