1.1概述
有些網絡數據庫沒有過濾客戶提供的數據中可能有害的字符,SQL注射就是利用插入有害字符進行攻擊的技術。盡管非常容易防范,但因特網上仍然有驚人數量的存儲系統容易受到這種攻擊。這篇文章的目的是指導專業安全組織了解這種技術,並告訴他們正確的,用來防范SQL注射的辦法,以及處理各種常見的,由於非法輸入引起的問題.
1.2背景
在讀這篇文章之前,你應該對數據庫如何工作,以及SQL如何被用來訪問數據庫有一些基礎的了解。我建議您閱讀eXtropia.com的文章“Introduction to Databases for WebDevelopers”。
(網址:http://www.extropia.com/tutorials/sql/toc.Html)
1.3字符編碼
在大多數的網絡浏覽器中,標點符號和許多其它符號在用於一個網絡請求前需要把URL編碼,以便被適當地編譯(interpret)。在本文中的例子和截圖中我使用了固定的ASCII字符以保證最大的可讀性。然而,在實際應用中,你需要在HTTP請求中用%25來代替百分號(%),用%2B來代替加號(+)等等。
1.網絡應用和SQL注射
1.1概述
有些網絡數據庫沒有過濾客戶提供的數據中可能有害的字符,SQL注射就是利用插入有害字符進行攻擊的技術。盡管非常容易防范,但因特網上仍然有驚人數量的存儲系統容易受到這種攻擊。這篇文章的目的是指導專業安全組織了解這種技術,並告訴他們正確的,用來防范SQL注射的辦法,以及處理各種常見的,由於非法輸入引起的問題.
1.2背景
在讀這篇文章之前,你應該對數據庫如何工作,以及SQL如何被用來訪問數據庫有一些基礎的了解。我建議您閱讀eXtropia.com的文章“Introduction to Databases for WebDevelopers”。
(網址:http://www.extropia.com/tutorials/sql/toc.Html)
1.3字符編碼
在大多數的網絡浏覽器中,標點符號和許多其它符號在用於一個網絡請求前需要把URL編碼,以便被適當地編譯(interpret)。在本文中的例子和截圖中我使用了固定的ASCII字符以保證最大的可讀性。然而,在實際應用中,你需要在HTTP請求中用%25來代替百分號(%),用%2B來代替加號(+)等等。。。
1.網絡應用和SQL注射
1.1概述
有些網絡數據庫沒有過濾客戶提供的數據中可能有害的字符,SQL注射就是利用插入有害字符進行攻擊的技術。盡管非常容易防范,但因特網上仍然有驚人數量的存儲系統容易受到這種攻擊。這篇文章的目的是指導專業安全組織了解這種技術,並告訴他們正確的,用來防范SQL注射的辦法,以及處理各種常見的,由於非法輸入引起的問題.
1.2背景
在讀這篇文章之前,你應該對數據庫如何工作,以及SQL如何被用來訪問數據庫有一些基礎的了解。我建議您閱讀eXtropia.com的文章“Introduction to Databases for WebDevelopers”。
(網址:http://www.extropia.com/tutorials/sql/toc.Html)
1.3字符編碼
在大多數的網絡浏覽器中,標點符號和許多其它符號在用於一個網絡請求前需要把URL編碼,以便被適當地編譯(interpret)。在本文中的例子和截圖中我使用了固定的ASCII字符以保證最大的可讀性。然而,在實際應用中,你需要在HTTP請求中用%25來代替百分號(%),用%2B來代替加號(+)等等。。。
3.2.5 LIKE語句查詢
另一個大的災難是陷入一個LIKE子句的陷阱.(Seeing the LIKE keyWord or percent signs cited in an error message are indications of this situation.)大多數的web搜索程序使用LIKE子句來查詢數據庫,比如下面這個:
SQLString = "SELECT FirstName, LastName, Title FROM Employees WHERE LastName LIKE '%" & strLastNameSearch & "%'"
這裡面的%是通配符,在這個例子裡,WHERE子句會返回TRUE,只要LASTNAME裡有字符串含有strLastNameSearch.為了阻止SQL Server返回預計中的記錄,你構造的SQL語句裡必須含有LASTNAME裡沒有的字符串.web搜索程序搜索的字符串來自於用戶的輸入.通常有一個'和一個%在輸入的字符串之前,因此我們構造字符串時,需要在WHERE子句中匹配它們.如果你提交了NULL作為搜索字符串,那麼LIKE的參數會變成"%%",這是一個全匹配,會返回所有的記錄.