4

log4net adoプロバイダーを使用し、SQLインジェクションを防ぐための受け入れられた方法はありますか?手巻きのスクラブ方法は自分でできますが、それは危険です。

「DontLetPeopleOwnMyDatabase」=true設定のようなものはありますか?

現在の危険な構成:

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  <threshold value="ERROR"/>
  <bufferSize value="1"/>
  <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
  <connectionString value="server=myDBServer; uid=myuserName; pwd=myPassword; database=myDatabase"/>
  <commandText value="INSERT INTO errorlog([message], [ServerName], [ApplicationName]) VALUES(@message, 'myServer', 'myApp')" />
  <parameter>

    <parameterName value="@message"/>

    <dbType value="String"/>

    <size value="4000"/>

    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%message"/>
    </layout>

  </parameter>
</appender>
4

1 に答える 1

4

たぶん私は間違っていますが、あなたはすでにパラメータを使用しているので、SQLインジェクションのリスクはありません。@message文字列の連結ではなく、log4netによって個別のSQLパラメータとして渡されます。

しかし、SQLインジェクションを恐れているのであれば、ストアドプロシージャを使用するのはどうでしょうか...?

恐れることはもうありません、親愛なるOP。log4netロギングメカニズムがSQLインジェクションに対して安全であるという欠落している証拠は次のとおりです。

レコードは、プリペアドステートメントまたはストアドプロシージャのいずれかを使用してデータベースに書き込まれます。CommandTypeプロパティをText(System.Data.CommandType.Text)に設定して準備済みステートメントを指定するか、StoredProcedure(System.Data.CommandType.StoredProcedure)に設定してストアドプロシージャを指定します。

したがって、準備->プリコンパイル->安全なパラメータ割り当て。

さらに情報が必要な場合は、ここで見つけることができます。

于 2011-02-21T17:23:44.190 に答える