特定のサーバーに問題があります。アプリケーションに投稿されたすべてのプラス記号は、スペースに置き換えられます。これは、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%2B2" -> "1+2"、"1 2" と同じ
- セミコロンはコンマに置き換えられます: "hello;" ->「こんにちは」
フィルターの新しいバージョン (2.0b) ではこれは修正されませんが、特定のページを除外できます。実稼働環境にインストールされているため、フィルターを削除しないことにしました。javascript を使用して、すべてのプラス記号を"+ "
(セミコロンではなくスペースを使用して) に変更しました。
最適な解決策ではありませんが、それが上司の望みでした。