(对不起,如果这是一个愚蠢的问题......)
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所说)?如果是,怎么样?
答案 0 :(得分:1)
问题不在于连接字符串的格式,而在于它可能是由非预期的人控制的。例如,攻击者可能能够更改您的web.config并让您的应用程序连接到虚假数据库以提供虚假数据。请注意,此类攻击者可能是您组织的内部人员(心怀不满的IT操作员工),或者已经获得某种级别访问权限的外部攻击者。
所以问题是你是否信任你的web.config文件根据你的威胁模型。可能你出于几个原因(你有很好的流程来降低风险),在这种情况下,这将在Veracode术语中“通过设计减轻”。
基本上只是警告提醒人们注意web.config在某种意义上是在您的应用程序外部,并且可以由比您最初想象的更多的人进行更改,并且由意外的人员更改它可能会导致不必要的结果。< / p>
答案 1 :(得分:0)
我在Veracode上也遇到过类似的问题,他们告诉我要确保Web.config文件已加密。
您可以通过在部署应用程序的服务器上通过一些命令行提示符操作来执行此操作。
aspnet_regiis -pe "connectionStrings" -app "/" -site 1
或者如果您想将安全性扩展到appSettings部分
aspnet_regiis -pe "appSettings" -app "/" -site 1
您可以通过打开IIS并转到站点的“高级设置”来获取站点编号。这是标有“ ID”的字段
这是MSDN文章,详细解释: https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx