避免 SQL Injection(資料隱碼攻擊)的幾種入門方法

很多在目前看起來OK的程式,或許在半年後、兩三年後,都會變成漏洞百出。
因為我們不是駭客(怪客),不會天天去想著防補漏洞。

但.....目前已經知悉的問題,最好還是有自己的一套解決方法來因應。



日前發表一段程式,忘了提醒初學者 SQL Injection(資料隱碼攻擊)的觀念與作法,

幸好有兩位前輩提醒我。

 

首先,我對於網頁程式設計最常遇見的 SQL Injection(資料隱碼攻擊)XSS攻擊

推薦這份文件給大家觀賞,更建議您下載PDF檔,放在手邊。

                                 HTML 版 與 PDF檔

除了解說的很白話,淺顯易懂之外。

也整理了很多關鍵字

如果您寫程式的時候,把這些關鍵字都阻擋下來,就可以避免很多類似的攻擊了。(但不可能是100%安全)

 

接下來是我的作法。

我個人的作法 "無法" 擔保 100%的安全,畢竟只是個人的經驗談。

1.  透過不同 DB帳號,給予不同權限。

以MS SQL Server為例,很多人開了一個新的資料庫與Table,都是透過 dbo / sa這些超級帳號(或是 db_owner權限)來存取資料。

在個人使用或程式開發的時候,或許還OK

但一旦放到網路上,那就危險了。

我的作法是,網路上的Web系統,會另外開一個 DB帳號,它的權限只能「讀(db_datareader)」與「寫(db_datawrite)」

這樣就能避免人家 Create Table / Drop Table / Truncate Table,

但是輸入 delete指令還是可以刪除資料的,這點就要您小心防範。

 

2.  可疑的關鍵字,通通過濾掉

例如:有人趁亂輸入 --、 1=1、註解符號、<script>這種怪異的HTML標籤、或是 delete這種疑似刪除資料的SQL指令等等

我們在寫入資料庫之前,都要事先過濾掉。   請參閱 [C#]VB語法的 InStr() 在C#裡面該怎麼寫?

這些關鍵字,上面的簡報提供很多,請您參考。

如果您不願意 User輸入 HTML碼,可以把 HTML標籤的前後兩個 < > ,通通改成 [ ] 符號或是 * *符號等等,讓它在瀏覽器裡面無法直接運作。這樣就算受到攻擊,至少也能初步地防範。

 

        更多的預防方法,都可以在上面那個簡報檔裡面獲取相關資訊。

 

3.  使用參數的方式來做,取代 &與+符號來組合 "SQL指令"字串:

請參考這個範例:[習題] 補充本書第14章的範例--自己撰寫SqlDataSource「新增資料」,並採用參數(InsertParameters)

 

如果DataReader 或 DataSet要使用「參數」來作,以避免初步的SQL Injection(資料隱碼)攻擊

請稍作修改如下:

            '**** 重 點!*************************************************
            '**** DataReader 改用 SqlCommand的 @參數來作
            Dim cmd As New SqlCommand("select * from test where id = @id", Conn)

            cmd.Parameters.Add("@id", SqlDbType.Int)
            cmd.Parameters("@id").Value = CType(Request("id"), Integer)


            '== 參考網址  http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlcommand.parameters.aspx
            '************************************************************

 

很多在目前看起來OK的程式,或許在半年後、兩三年後,都會變成漏洞百出。

尤其是 Web程式,放在網路上給全世界的人去使用,風險當然會大出數十倍,數百倍。

 

因為我們不是駭客(怪客),不會天天去想著防補漏洞。

程式都寫不完了,哪裡有時間去做資訊安全的系統攻防?

  • 系統上的漏洞,作業系統要常常修補與更新 Patch檔
  • 程式上的漏洞,則需自己想辦法解決。....目前已經知悉的問題,最好還是有自己的一套解決方法來因應。

 

 

以下是幾篇淺顯易懂的說明:

 

 

這幾篇文章很不錯,推薦一下!

[ASP.Net] 過濾輸入欄位,可能具有危險的字串  

善用 ASP.NET 內建功能來擊退網路攻擊

相關文章:

Microsoft Anti-XSS (Anti-Cross Site Scripting Library) 避免XSS攻擊

 

 

 

我將思想傳授他人, 他人之所得,亦無損於我之所有;

猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson

線上課程,遠距教學 (Web Form 49hr)  https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015

線上課程,遠距教學 (ASP.NET MVC 75hr)  https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab

ASP.NET MVC線上課程 第一天 免費看 (5.5小時) 

寫信給我,不要私訊 --  mis2000lab (at) yahoo.com.台灣  或  school (at) mis2000lab.net


ASP.NET遠距教學、線上課程(Web Form + MVC)。 第一天課程, "完整" 試聽。 

................   facebook社團   https://www.facebook.com/mis2000lab   ......................

................  YouTube (ASP.NET) 線上教學影片  https://www.youtube.com/channel/UC6IPPf6tvsNG8zX3u1LddvA/

 

Blog文章 "附的範例" 無法下載,請看 這裡 ...... https://dotblogs.com.tw/mis2000lab/2016/03/14/2008_2015_mis2000lab_sample_download

請看我們的「售後服務」範圍(嚴格認定)

......................................................................................................................................................

...................................................................................................................................................... 

[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講

事先錄製好的影片,並非上課時側錄!   觀看影片時,有如我「一對一」跟您面對面講課

 

ASP.NET MVC 5 線上教學

累積時數約 75小時...... 第一天(5.5小時)完整內容,"免費"讓您評估