系统或配置设置的外部控制
External Control of System or Configuration Setting
(抱歉,如果这是一个愚蠢的问题....)
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 说:
This call to
system_data_dll.System.Data.SqlClient.SqlConnection.!newinit_0_1()
allows external control of system settings. The argument to the
function is constructed using user-supplied input, which can disrupt
service or cause an application to behave in unexpected ways. The
first argument to !newinit_0_1() contains tainted data from the
variable connStr. The tainted data originated from earlier calls to
system_web_dll.system.web.httprequest.get_item,
system_data_dll.system.data.common.dbdataadapter.fill,
system_data_dll.system.data.sqlclient.sqlcommand.executescalar, and
fmmobile8_dll.virtualcontroller.vc_wcfentry.
修复:
Never allow user-supplied or otherwise untrusted data to control
system-level settings. Always validate user-supplied input to ensure
that it conforms to the expected format, using centralized data
validation routines when possible.
CWE 报告了相同的使用情况:http://cwe.mitre.org/data/definitions/15.html
好的,Veracode 的建议说我应该在使用它创建 SqlConnection 对象之前检查连接字符串的格式。
我也问过Google教授如何检查连接字符串的格式。但是返回的结果说我们应该创建SqlConnection对象,然后打开它。
如果响应正常,则连接字符串也表示格式有效。否则,连接字符串无效。
很遗憾,Veracode 不接受这个答案。
那么,我的问题是:
我们是否应该在创建 SqlConnection 对象之前检查连接字符串的格式(如 Veracode 所说)?如果是,如何?
问题不在于连接字符串的格式,而在于它可能被无意中的人控制了。例如,攻击者可能能够更改您的 web.config 并让您的应用程序连接到虚假数据库以提供虚假数据。请注意,此类攻击者可能是您组织的内部人员(心怀不满的 IT 运维人员),或者是已经获得一定级别访问权限的外部攻击者。
所以问题是根据您的威胁模型,您是否信任您的 web.config 文件。可能你这样做有几个原因(你有良好的流程来降低风险),在这种情况下,用 Veracode 术语来说就是 "mitigated by design"。
基本上,它只是一个警告,以引起注意 web.config 在某种意义上是您的应用程序之外的,并且可以由比您最初想象的更多的人更改,并且由非预期的人更改它可能会导致不需要的结果。
我在使用 Veracode 时遇到了类似的问题,他们告诉我确保 Web.config 文件已加密。
您可以在部署应用程序的服务器上通过一些命令行提示操作来执行此操作。
aspnet_regiis -pe "connectionStrings" -app "/" -site 1
或者如果您想将安全性扩展到应用程序设置部分
aspnet_regiis -pe "appSettings" -app "/" -site 1
您可以通过打开 IIS 并转到站点的“高级设置”来获取站点编号。它是标记为 "ID"
的字段
这里有一篇 MSDN 文章更详细地解释了:
https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx
(抱歉,如果这是一个愚蠢的问题....)
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 说:
This call to system_data_dll.System.Data.SqlClient.SqlConnection.!newinit_0_1() allows external control of system settings. The argument to the function is constructed using user-supplied input, which can disrupt service or cause an application to behave in unexpected ways. The first argument to !newinit_0_1() contains tainted data from the variable connStr. The tainted data originated from earlier calls to system_web_dll.system.web.httprequest.get_item, system_data_dll.system.data.common.dbdataadapter.fill, system_data_dll.system.data.sqlclient.sqlcommand.executescalar, and fmmobile8_dll.virtualcontroller.vc_wcfentry.
修复:
Never allow user-supplied or otherwise untrusted data to control system-level settings. Always validate user-supplied input to ensure that it conforms to the expected format, using centralized data validation routines when possible.
CWE 报告了相同的使用情况:http://cwe.mitre.org/data/definitions/15.html
好的,Veracode 的建议说我应该在使用它创建 SqlConnection 对象之前检查连接字符串的格式。
我也问过Google教授如何检查连接字符串的格式。但是返回的结果说我们应该创建SqlConnection对象,然后打开它。
如果响应正常,则连接字符串也表示格式有效。否则,连接字符串无效。
很遗憾,Veracode 不接受这个答案。
那么,我的问题是:
我们是否应该在创建 SqlConnection 对象之前检查连接字符串的格式(如 Veracode 所说)?如果是,如何?
问题不在于连接字符串的格式,而在于它可能被无意中的人控制了。例如,攻击者可能能够更改您的 web.config 并让您的应用程序连接到虚假数据库以提供虚假数据。请注意,此类攻击者可能是您组织的内部人员(心怀不满的 IT 运维人员),或者是已经获得一定级别访问权限的外部攻击者。
所以问题是根据您的威胁模型,您是否信任您的 web.config 文件。可能你这样做有几个原因(你有良好的流程来降低风险),在这种情况下,用 Veracode 术语来说就是 "mitigated by design"。
基本上,它只是一个警告,以引起注意 web.config 在某种意义上是您的应用程序之外的,并且可以由比您最初想象的更多的人更改,并且由非预期的人更改它可能会导致不需要的结果。
我在使用 Veracode 时遇到了类似的问题,他们告诉我确保 Web.config 文件已加密。
您可以在部署应用程序的服务器上通过一些命令行提示操作来执行此操作。
aspnet_regiis -pe "connectionStrings" -app "/" -site 1
或者如果您想将安全性扩展到应用程序设置部分
aspnet_regiis -pe "appSettings" -app "/" -site 1
您可以通过打开 IIS 并转到站点的“高级设置”来获取站点编号。它是标记为 "ID"
的字段这里有一篇 MSDN 文章更详细地解释了: https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx