1

的外部控制(对不起,如果这是一个愚蠢的问题....)系统或配置设置

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的说)之前检查连接字符串的格式?如果是,如何?

回答

0

问题不在于连接字符串的格式,而在于它可能被某人无意控制。例如,攻击者可能能够更改您的web.config并让您的应用程序连接到假数据库来提供假数据。请注意,这样的攻击者可能在您的组织内部(一位心怀不满的IT操作员工),或者已经获得某种级别访问权限的外部攻击者。

所以问题是你是否信任你的web.config文件根据你的威​​胁模型。可能你有几个原因(你有良好的流程来降低风险),在这种情况下,这将在Veracode条款中“通过设计减轻”。

基本上,这只是一个警告,提醒您注意web.config在您的应用程序外部是一种意义上的外部感觉,可以被更多人改变,而不是您最初想到的,并且通过意外的人改变它可能会导致不需要的结果。

+0

你是对的,@Gabor。在这种情况下,我应该提出一个缓解措施,例如“连接字符串来自web.config文件 - 只有FMI管理员才能访问以更改连接字符串” –

+0

在大多数情况下,我认为是。 :) –