(对不起,如果这是一个愚蠢的问题......)
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 所说)?如果是,如何?