的外部控制(對不起,如果這是一個愚蠢的問題....)系統或配置設置
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的說)之前檢查連接字符串的格式?如果是,如何?
你是對的,@Gabor。在這種情況下,我應該提出一個緩解措施,例如「連接字符串來自web.config文件 - 只有FMI管理員才能訪問以更改連接字符串」 –
在大多數情況下,我認爲是。 :) –