1

的外部控制(對不起,如果這是一個愚蠢的問題....)系統或配置設置

Veracode的報道我的網站有它涉及到使用連接字符串從web.config中的一個安全問題。

這是我的代碼。

Public Function ExecuteScalar(ByVal sql As String) As Object 
    Dim obj As Object = Nothing 

    Try 
     Dim connStr as String = ConfigurationManager.ConnectionStrings("mydatabase").ConnectionString 
     Using conn As New SqlConnection(connStr) '''Veracode reports the issue come from this line 
      conn.Open() 
      If conn IsNot Nothing Then 
       '''execute my sql 
      End If 
     End Using 

    Catch ex As Exception 
     Throw ex 
    End Try 

    Return obj 
End Function 

Veracode的說:!

這次調用 system_data_dll.System.Data.SqlClient.SqlConnection newinit_0_1() 允許的系統設置外部控制。 函數的參數是使用用戶提供的輸入構建的,這可能會中斷服務或導致應用程序以意想不到的方式運行。 !newinit_0_1()的第一個參數包含來自 變量connStr的污染數據。被感染的數據來源於早期的呼叫 system_web_dll.system.web.httprequest.get_item, system_data_dll.system.data.common.dbdataadapter.fill, system_data_dll.system.data.sqlclient.sqlcommand.executescalar和 fmmobile8_dll.virtualcontroller .vc_wcfentry。

修復:

決不允許用戶提供的或以其他方式不可信數據來控制 系統級設置。始終驗證用戶提供的輸入以確保 符合預期格式,並儘可能使用集中式數據 驗證例程。

同樣isuse報道由CWE:http://cwe.mitre.org/data/definitions/15.html

OK,從Veracode的建議說我應該用它來創建SqlConnection對象之前檢查連接字符串的格式。

我還問過谷歌教授關於如何檢查連接字符串的格式。但是返回的結果表示我們應該創建SqlConnection對象,然後打開它。

如果響應正常,則連接字符串也表示有效的格式。否則,連接字符串無效。

不幸的是,Veracode不接受這個答案。

所以,我的問題是:

我們應該創建SqlConnection對象(如Veracode的說)之前檢查連接字符串的格式?如果是,如何?

回答

0

問題不在於連接字符串的格式,而在於它可能被某人無意控制。例如,攻擊者可能能夠更改您的web.config並讓您的應用程序連接到假數據庫來提供假數據。請注意,這樣的攻擊者可能在您的組織內部(一位心懷不滿的IT操作員工),或者已經獲得某種級別訪問權限的外部攻擊者。

所以問題是你是否信任你的web.config文件根據你的威​​脅模型。可能你有幾個原因(你有良好的流程來降低風險),在這種情況下,這將在Veracode條款中「通過設計減輕」。

基本上,這只是一個警告,提醒您注意web.config在您的應用程序外部是一種意義上的外部感覺,可以被更多人改變,而不是您最初想到的,並且通過意外的人改變它可能會導致不需要的結果。

+0

你是對的,@Gabor。在這種情況下,我應該提出一個緩解措施,例如「連接字符串來自web.config文件 - 只有FMI管理員才能訪問以更改連接字符串」 –

+0

在大多數情況下,我認爲是。 :) –