1

(すみません、これがばかげた質問であれば....)

Veracode は、私の Web サイトに、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

ベラコードは次のように述べています。

この 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

OK、Veracode からの提案によると、接続文字列を使用して SqlConnection オブジェクトを作成する前に、その形式を確認する必要があります。

また、接続文字列の形式を確認する方法について、Google の教授に尋ねました。しかし、返された結果は、SqlConnection オブジェクトを作成してから開く必要があることを示しています。

応答が OK の場合、接続文字列も有効な形式を意味します。それ以外の場合、接続文字列は無効です。

残念ながら、Veracode はこの回答を受け入れません。

だから、私の質問はそれです:

SqlConnection オブジェクトを作成する前に、接続文字列の形式を確認する必要がありますか (Veracode が言ったように)。はいの場合、どのように?

4

2 に答える 2

2

問題は接続文字列の形式ではなく、意図しない誰かによって制御される可能性があることです。たとえば、攻撃者は web.config を変更し、アプリケーションを偽のデータベースに接続して偽のデータを提供できる可能性があります。このような攻撃者は、組織の内部 (不満を持った IT 運用担当者) であるか、またはすでにある程度のアクセス権を取得している外部の攻撃者である可能性があることに注意してください。

したがって、問題は、脅威モデルに従って web.config ファイルを信頼するかどうかです。おそらくいくつかの理由でそうするでしょう (リスクを軽減するための適切なプロセスがある)。その場合、これは Veracode 用語で「設計により軽減」されます。

基本的に、web.config はある意味でアプリケーションの外部にあり、最初に考えていたよりも多くの人が変更する可能性があり、意図しない人が変更すると、望ましくない結果が生じる可能性があることに注意を喚起するための単なる警告です。

于 2016-11-28T11:25:39.147 に答える