2

特定のサーバーに問題があります。アプリケーションに投稿されたすべてのプラス記号は、スペースに置き換えられます。これは、POST と GET、およびそのサイトのすべてのページにあります。
テストケースとして、私はこの小さなページを持っています (これは ASP サーバーです):

<html>
<body>
  <form method="post">
    <input type="text" name="Plus" id="Plus" />
    <input type="submit" />
  </form>
  Previous Value: <%= request("Plus") %><br />
  Query String: <%= request.querystring %>
</body>
</html>

他のすべてのサーバーではこれはうまく機能しますが、あるサーバーではプラスがスペースに置き換えられます。
例: 入力 " 1 2+3" の場合 - request("Plus") は " 1 2 3" で、クエリ文字列は " 1+2+3" です。ダメ。他の文字は正しくデコードされているようです。
誰かが攻撃に対してこのサーバーを「強化」しようとしたため、あいまいな IIS オプションがオンになっている可能性があります (ただし、ISAPI フィルターは削除されています)。
ありがとう。


更新: http://www.codeplex.com/IIS6SQLInjectionの SQL インジェクション フィルター ISPIClipSQLInjection.dll という別のフィルターがインストールされていることがわかりました。
フィルターはバグがあります - POST と GET からの有効な文字を置き換えます:

  1. プラス記号はスペースに置き換えられます: "1%2B2" -> "1+2"、"1 2" と同じ
  2. セミコロンはコンマに置き換えられます: "hello;" ->「こんにちは」

フィルターの新しいバージョン (2.0b) ではこれは修正されませんが、特定のページを除外できます。実稼働環境にインストールされているため、フィルターを削除しないことにしました。javascript を使用して、すべてのプラス記号を"&#43 "(セミコロンではなくスペースを使用して) に変更しました。
最適な解決策ではありませんが、それが上司の望みでした。

4

2 に答える 2

1

Ascii コードを検討してください。プラス記号の代わりに、ASCII コードを使用します。chr(43) になります。asp と sql の両方がこれを理解します。

これはすべてのASCIIコードの表です。 http://www.asciitable.com/

于 2009-05-11T16:50:34.943 に答える