0

私はコーディングの世界では初心者です。

いくつかのテキスト ボックスを含む大規模な Web サイトを構築したので、次のような方法で SQL サーバーにデータを挿入する危険な方法を使用していることに気付きました。

execSQL("insert into Dossier(ID_Dossier,Nom_Giac) values(" & id_dossier.text & "," Nom_gaic.text & "')")

 Public Function execSQL(ByVal req As String, Optional ByVal type As String = "r")
        cmd = New SqlCommand
        cmd.CommandText = req
        cmd.Connection = con
        openCon()
        If type = "r" Then
            Return cmd.ExecuteReader(CommandBehavior.CloseConnection)
        Else
            Return cmd.ExecuteNonQuery
        End If
        closeCon()
    End Function  

Web サイト全体でこの問題を解決する簡単な方法があるかどうかを知りたいだけです。

4

3 に答える 3

4

私はあなたがあなたのサイトからSQLインジェクションの可能性を排除したいという事実を称賛します。

とは言うものの、迅速で魔法のような「私の脆弱なコードの検索と置換」機能はありません。システムにアクセスして、そのような呼び出しをパラメーター化されたクエリで更新する必要があります。

于 2013-01-23T13:46:44.923 に答える
2

SQLインジェクションを防ぐには、パラメータ化されたクエリが必要です。この質問から抜粋した例を次に示します。パラメーター化されたSQLクエリを作成するにはどうすればよいですか。どして私がこんな事に?

Public Function GetBarFooByBaz(ByVal Baz As String) As String
    Dim sql As String = "SELECT foo FROM bar WHERE baz= @Baz"

    Using cn As New SqlConnection("Your connection string here"), _
        cmd As New SqlCommand(sql, cn)

        cmd.Parameters.Add("@Baz", SqlDbTypes.VarChar, 50).Value = Baz
        Return cmd.ExecuteScalar().ToString()
    End Using
End Function
于 2013-01-23T13:48:23.683 に答える
1

LINQ to SQLを使用すると、次のようにパラメーター化することで、SQLインジェクション攻撃を防ぐことができます。

LINQ to SQLは、SQLパラメータを介してすべてのデータをデータベースに渡します。したがって、SQLクエリは動的に構成されますが、値は、SQLインジェクション攻撃の最も一般的な原因から保護するパラメーターによってサーバー側で置き換えられます。

詳しくはこちらをご覧ください。

于 2013-01-23T13:49:42.550 に答える