• 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

     

    Posted by Tony @ 9:04 pm

    Tags: , , ,

  • Leave a Reply

    Your email address will not be published.