ASP.NET網站程式開發注意事項

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

 

Leave a Reply

Your email address will not be published. Required fields are marked *