的外部控制(对不起,如果这是一个愚蠢的问题....)系统或配置设置
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管理员才能访问以更改连接字符串” –
在大多数情况下,我认为是。 :) –