Jest to zablokowane bezpośrednio na poziomie jądra IIS. Jako test wyciągnąłem każdy moduł w IIS, aby nie miał nawet statycznego modułu obsługi strony i nadal wyświetlał komunikat o błędzie 400.
Nie sądzę, aby IIS mógł to obejść. Wspomniane ustawienia rejestru dotyczą innych typów znaków zastrzeżonych. Nie widziałem dźwigni do zmiany tej funkcjonalności.
Jaki jest twój cel, aby tego uniknąć? Powoduje to szersze otwarcie powierzchni ataku i nie wyobrażam sobie, aby prawdziwy użytkownik został utracony w wyniku zablokowania niekompletnych sekwencji ucieczki adresów URL.
Aktualizacja 2:
Oto trzy świetne linki na ten temat. Zarówno Nazim Lala, jak i Wade Hilmo z zespołu IIS pisali o tym na blogu z powodu dyskusji wokół twojego pytania. Również Scott Hanselman ma świetny post na temat querystring w .NET:
Aktualizacja:
skontaktowałem się z członkiem zespołu IIS, aby uzyskać wiarygodną odpowiedź. Wspomniał, że% jest uważany za niebezpieczny znak zgodnie z RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ).
Oto właściwy tekst:
Niebezpieczny:
Znaki mogą być niebezpieczne z wielu powodów. Znak spacji jest niebezpieczny, ponieważ znaczące spacje mogą zniknąć, a nieznaczne spacje mogą zostać wprowadzone, gdy adresy URL są transkrybowane, składane lub poddawane obróbce programów do edycji tekstu. Znaki „<” i „>” są niebezpieczne, ponieważ są używane jako ograniczniki wokół adresów URL w tekście swobodnym; znak cudzysłowu („” „) jest używany do ograniczania adresów URL w niektórych systemach. Znak„ # ”jest niebezpieczny i zawsze powinien być kodowany, ponieważ jest używany w sieci WWW i innych systemach do ograniczania adresu URL z fragmentu / kotwicy identyfikator, który może za nim podążać. Znak „%” jest niebezpieczny, ponieważ jest używany do kodowania innych znaków. Inne znaki są niebezpieczne, ponieważ wiadomo, że bramy i inne środki transportu modyfikują takie znaki. Te znaki to „{”, „}”, „|”, „\”, „^”, „~”, „[”, „]” i „'”.
Wszystkie niebezpieczne znaki muszą zawsze być zakodowane w adresie URL. Na przykład znak „#” musi być zakodowany w adresach URL, nawet w systemach, które normalnie nie obsługują fragmentów lub identyfikatorów zakotwiczenia, aby w przypadku skopiowania adresu URL do innego systemu, który ich używa, nie trzeba zmieniać Kodowanie adresów URL.
IIS aktywnie blokuje to na poziomie podstawowym, proaktywny środek bezpieczeństwa w celu zminimalizowania powierzchni ataku.