【发布时间】:2017-04-11 18:28:51
【问题描述】:
(对不起,如果这是一个愚蠢的问题......)
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.
补救措施:
绝不允许用户提供或其他不受信任的数据来控制 系统级设置。始终验证用户提供的输入以确保 它符合预期的格式,使用集中的数据 尽可能的验证例程。
CWE 报告了同样的问题:http://cwe.mitre.org/data/definitions/15.html
好的,Veracode 的建议说我应该在使用它创建 SqlConnection 对象之前检查连接字符串的格式。
我还向谷歌教授询问了如何检查连接字符串的格式。但是返回的结果说我们应该创建SqlConnection对象,然后打开它。
如果响应正常,则连接字符串也表示有效格式。否则,连接字符串无效。
很遗憾,Veracode 不接受这个答案。
所以,我的问题是:
我们是否应该在创建 SqlConnection 对象之前检查连接字符串的格式(如 Veracode 所说)?如果是,怎么做?
【问题讨论】:
标签: asp.net-mvc security database-connection connection-string veracode