ASP.NET網站程式開發注意事項
這篇文章主要討論如果網站是用ASP .Net 開發網站時,
資訊安全要注意的地方,有哪些API有安全高風險盡量不要使用?
環境設定要注意什麼? 這篇文章將討論下列子主題:
- 使用者輸入有關的變數與 API
- Session 的處理
- 檔案的存取
- 資料庫的存取
- 系統指令的執行
- 環境設定
同樣的原理也可以應用在 PHP or Java 的程式語言,這篇文章主要以 ASP .NET 為例說明。
PHP 可參考這篇 http://www.qa-knowhow.com/?p=686
整體的架構安全
筆者很喜歡這張圖。
因為說明整體,用戶端瀏覽、網站、應用程式伺服器、資料庫伺服器等需要注意的安全風險。
使用者輸入相關 API
- Params: 回傳 URL query 的參數值
- QueryString: Query 的參數值
- Headers: HTTP headers
- UrlReferrer: HTTP request 中Referer的值
- Cookies:Cookie 值
- Browser UserAgent:UserAgent 的值
Session
記錄使用者連線相關資訊,相關 API 例如:
- System.Web.SessionState.HttpSessionState
- Session
- Profile
檔案存取
讀取檔案的時候,注意檔案的輸入參數,檔案位置、檔案名稱、檔案類型是否合法等。
- System.IO.FileStream
- System.IO.StreamReader
- System.IO.StreamWriter
資料庫存取
下列 API 可以用來執行 SQL statement,因此必須特別注意潛在 SQL injection的風險
- System.Data.SqlClient.SqlCommand
- System.Data.SqlClient.SqlDataAdapter
- System.Data.Oledb.OleDbCommand
- System.Data.Odbc.OdbcCommand
- System.Data.SqlServerCe.SqlCeCommand
作業系統指令執行
下列 API 會造成作業系統指令的執行,
因此盡量避免使用這樣的 API,否則會造成非預期的輸入與執行
- System.Diagnostics.Start.Process
- System.Diagnostics.Start.ProcessStartInfo
舉例來說,下列程式會就造成小畫家的執行:
string UserInputCmd = “msPaint”;
Process.Start(UserInputCmd);
環境設定
- sessionState:可以用這個值設定 timeout,讓 idle使用者在一段時間之後該 session失效。
- compilation:網站上線時建議設定為 false,將相關錯誤除錯的訊息取消。
- customErrors:當發生錯誤的時候,如何顯示相關訊息。通常建議自訂一頁制式的錯誤畫面。避免將過多的程式錯誤回傳給使用者。
- httpRuntime: enableHeaderChecking建議設定為 true。可以讓 ASP Net 檢查潛在的攻擊,例如 XSS。
摘要
這篇文章主要討論ASP.NET網站程式開發注意事項
在時間有限下,如果要做相關程式碼的檢查與驗證,就可以特別針對這些地方檢查。
- 使用者輸入有關的變數與 API
- Session 的處理
- 檔案的存取
- 資料庫的存取
- 系統指令的執行
- 環境設定
https://msdn.microsoft.com/en-us/library/ff648637.aspx