Điều này bị chặn ngay trong cấp nhân IIS. Để kiểm tra, tôi đã rút ra mọi mô-đun trong IIS để nó thậm chí không có trình xử lý trang tĩnh và nó vẫn hiển thị thông báo lỗi 400.
Tôi không tin rằng IIS có thể khắc phục điều đó. Các cài đặt đăng ký mà bạn đề cập là dành cho các loại ký tự bị hạn chế khác. Tôi chưa thấy một đòn bẩy để thay đổi chức năng đó.
Mục tiêu của bạn là gì để tránh điều đó? Nó mở ra bề mặt tấn công của bạn rộng hơn và tôi không thể tưởng tượng được một khách truy cập hợp pháp bị mất do bị chặn các chuỗi thoát URL không hoàn chỉnh.
Update2:
Đây là ba liên kết tuyệt vời về điều này. Cả Nazim Lala và Wade Hilmo từ nhóm IIS đã viết blog về điều này vì các cuộc thảo luận xung quanh câu hỏi của bạn. Ngoài ra Scott Hanselman có một bài viết tuyệt vời về phần chuỗi truy vấn trong .NET:
Cập nhật:
Tôi đã kiểm tra với một thành viên của nhóm IIS để nhận được câu trả lời có thẩm quyền. Ông đã đề cập rằng% được coi là một ký tự không an toàn theo RFC 1738 ( http://www.ietf.org/rfc/rfc1738.txt ).
Đây là văn bản có liên quan:
Không an toàn:
Nhân vật có thể không an toàn vì một số lý do. Ký tự khoảng trắng không an toàn vì các khoảng trắng đáng kể có thể biến mất và các khoảng trắng không đáng kể có thể được đưa vào khi URL được sao chép hoặc sắp chữ hoặc chịu sự điều trị của các chương trình xử lý văn bản. Các ký tự "<" và ">" không an toàn vì chúng được sử dụng làm dấu phân cách xung quanh các URL trong văn bản miễn phí; dấu ngoặc kép ("" ") được sử dụng để phân định URL trong một số hệ thống. Ký tự" # "không an toàn và phải luôn được mã hóa vì nó được sử dụng trong World Wide Web và trong các hệ thống khác để phân định URL từ một đoạn / neo định danh có thể theo nó. Ký tự "%" không an toàn vì được sử dụng để mã hóa các ký tự khác. Các ký tự khác không an toàn vì các cổng và các tác nhân vận chuyển khác đôi khi được biết là sửa đổi các ký tự đó. Các ký tự này là "{", "}", "|", "\", "^", "~", "[", "]" và "` ".
Tất cả các ký tự không an toàn phải luôn được mã hóa trong một URL. Ví dụ: ký tự "#" phải được mã hóa trong các URL ngay cả trong các hệ thống thường không xử lý các mã định danh phân đoạn hoặc neo, do đó, nếu URL được sao chép vào một hệ thống khác sử dụng chúng, sẽ không cần thiết phải thay đổi Mã hóa URL.
Vì vậy, IIS chủ động chặn điều này ở cấp độ cốt lõi, một biện pháp bảo mật chủ động để giảm thiểu bề mặt tấn công của họ.