很多在目前看起來OK的程式,或許在半年後、兩三年後,都會變成漏洞百出。
因為我們不是駭客(怪客),不會天天去想著防補漏洞。
但.....目前已經知悉的問題,最好還是有自己的一套解決方法來因應。
日前發表一段程式,忘了提醒初學者 SQL Injection(資料隱碼攻擊)的觀念與作法,
幸好有兩位前輩提醒我。
首先,我對於網頁程式設計最常遇見的 SQL Injection(資料隱碼攻擊)與 XSS攻擊,
推薦這份文件給大家觀賞,更建議您下載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檔
- 程式上的漏洞,則需自己想辦法解決。....目前已經知悉的問題,最好還是有自己的一套解決方法來因應。
以下是幾篇淺顯易懂的說明:
- 游擊式的SQL Injection攻擊 http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/05/22/hit-and-run-sql-injection-attack.aspx
- 你的網站正在裸奔嗎? http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/05/07/are-your-website-naked.aspx
- [Demo]利用SQL Injection將惡意連結寫入資料庫 http://anti-hacker.blogspot.com/2007/04/demosql-injection.html
- 小測微軟SQL Injection漏洞掃瞄工具 http://blog.darkthread.net/blogs/darkthreadtw/archive/2008/08/01/sql-injection-asp-scanner.aspx
- [SQL]淺談SQL Injection發生後 http://www.dotblogs.com.tw/dotjum/archive/2009/08/02/9808.aspx
這幾篇文章很不錯,推薦一下!
相關文章:
Microsoft Anti-XSS (Anti-Cross Site Scripting Library) 避免XSS攻擊
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
線上課程教學,遠距教學 (Web Form 約 51hr) https://dotblogs.com.tw/mis2000lab/2016/02/01/aspnet_online_learning_distance_education_VS2015
線上課程教學,遠距教學 (ASP.NET MVC 約 140hr) https://dotblogs.com.tw/mis2000lab/2018/08/14/ASPnet_MVC_Online_Learning_MIS2000Lab
寫信給我,不要私訊 -- mis2000lab (at) yahoo.com.tw 或 school (at) mis2000lab.net
(1) 第一天 ASP.NET MVC5 完整影片(5.5小時 / .NET 4.x版)免費試聽。影片 https://youtu.be/9spaHik87-A
(2) 第一天 ASP.NET Core MVC 完整影片(3小時 / .NET Core 6.0~8.0)免費試聽。影片 https://youtu.be/TSmwpT-Bx4I
[學員感言] mis2000lab課程評價 - ASP.NET MVC , WebForm 。 https://mis2000lab.medium.com/%E5%AD%B8%E5%93%A1%E6%84%9F%E8%A8%80-mis2000lab%E8%AA%B2%E7%A8%8B%E8%A9%95%E5%83%B9-asp-net-mvc-webform-77903ce9680b
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 MVC => .NET Core MVC 線上教學 ...... 第一天課程 完整內容 "免費"讓您評估 / 試聽
[遠距教學、教學影片] ASP.NET (Web Form) 課程 上線了!MIS2000Lab.主講 事先錄好的影片,並非上課側錄! 觀看時,有如「一對一」面對面講課。