これは、IISカーネルレベルでブロックされます。テストとして、静的ページハンドラーさえも持たないようにIISのすべてのモジュールを引き出しましたが、それでも400エラーメッセージが表示されました。
IISでそれを回避できるとは思いません。あなたが言及したレジストリ設定は、他の種類の制限文字用です。その機能を変更するためのレバーを見たことはありません。
あなたの目標はそれを避けることですか?それはあなたの攻撃面をより広く開き、不完全なURLエスケープシーケンスをブロックした結果として正当な訪問者が失われることは想像できません。
Update2:
これに関する3つの素晴らしいリンクがあります。IISチームのNazim LalaとWade Hilmoの両方が、あなたの質問に関する議論のためにこれについてブログに書いています。また、Scott Hanselmanは、.NET内のクエリ文字列部分に関する素晴らしい投稿をしています。
更新:
IISチームのメンバーに確認して、信頼できる回答を得ました。彼は、RFC 1738(http://www.ietf.org/rfc/rfc1738.txt)によると、%は安全でない文字と見なされると述べました。
関連するテキストは次のとおりです。
安全でない:
文字は、いくつかの理由で安全でない場合があります。スペース文字は安全ではありません。URLが文字起こしまたはタイプセットされたり、ワープロプログラムの処理が行われたりすると、重要なスペースが消えたり、意味のないスペースが導入される可能性があるためです。文字「<」および「>」は、フリーテキストのURLの区切り文字として使用されるため、安全ではありません。一部のシステムでは、引用符( "" ")を使用してURLを区切ります。文字"# "は安全ではなく、World Wide Webや他のシステムでURLをフラグメント/アンカーから区切るために使用されるため、常にエンコードする必要がありますそれに従うことがあります。識別子 、それが他の文字のエンコードに使われているため、文字「%」は安全ではありません。 ゲートウェイや他のトランスポートエージェントはこのような文字を変更することがあるため、他の文字は安全ではありません。これらの文字は、「{」、「}」、「|」、「\」、「^」、「〜」、「[」、「]」、および「 `」です。
安全でない文字はすべて、常にURL内でエンコードする必要があります。たとえば、通常はフラグメントまたはアンカー識別子を処理しないシステムでも、文字「#」をURL内でエンコードする必要があります。そのため、URLを使用する別のシステムにURLをコピーしても、変更する必要はありませんURLエンコード。
したがって、IISはこれをコアレベルでプロアクティブにブロックします。これは、攻撃対象を最小限に抑えるプロアクティブなセキュリティ対策です。