(すみません、これがばかげた質問であれば....)
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 が言ったように)。はいの場合、どのように?