2011-10-12 26 views
14

Chúng tôi vừa mới nâng cấp lên ASP.NET 4.0 và thấy rằng requestValidation không còn hoạt động nữa. Các tài liệu MSDN đề nghị chúng ta cần phải thiết lập requestValidationMode trong web.config đến 2,0:Làm cách nào để tắt xác thực yêu cầu mà không cần đặt RequestValidationMode thành 2.0?

  • 4,0 (mặc định). Đối tượng HttpRequest đặt nội bộ cờ cho biết rằng xác thực yêu cầu sẽ được kích hoạt bất cứ khi nào mọi dữ liệu yêu cầu HTTP được truy cập. Điều này đảm bảo rằng yêu cầu xác thực được kích hoạt trước khi dữ liệu như cookie và URL được truy cập trong khi yêu cầu. Cài đặt xác thực yêu cầu của thành phần trang (nếu có) trong tệp cấu hình hoặc của chỉ thị @ Page trong một trang riêng lẻ sẽ bị bỏ qua.
  • 2.0. Yêu cầu xác thực chỉ được bật cho các trang, không phải cho tất cả các yêu cầu HTTP. Ngoài ra, cài đặt xác thực yêu cầu của các phần trang (nếu có) trong tệp cấu hình hoặc của chỉ dẫn @ Page trong một trang riêng lẻ được sử dụng để xác định trang nào yêu cầu xác thực.

Điều này sẽ làm việc cho chúng tôi, tuy nhiên tôi hơi bối rối. Có vẻ như chúng tôi đang đưa điều này vào chế độ tương thích/kế thừa. Chắc chắn có thể có hành vi 4.0, nhưng vẫn có tùy chọn để tắt tính năng này trên một trang?

Trả lời

-3

Bạn có thể đặt ValidateRequest false trong chỉ thị trang:

<%@ Page ValidateRequest="false" %> 
+3

Anh ấy biết điều đó rõ ràng. Bạn đã đọc câu hỏi chưa? – Stilgar

+1

@James Johnson Cảm ơn bạn đã định dạng câu trả lời chính xác (trông giống như mã thay vì văn bản) –

+0

@Stilgar: Hiểu vấn đề thực tế sau khi bạn đặt câu hỏi cho tôi, cảm ơn: ( –

2

Dường như nó không phải là có thể tắt chức năng này hoặc tắt cho một trang trong requestValidationMode 4.0.

whitepaper các thay đổi phá vỡ phác thảo trong .Net 4.0, trong đó điều này có vẻ là một. Ngay cả những whitepaper đề nghị quay trở lại requestValidationMode 2,0

Để trở lại với hành vi của tính năng xác nhận 2.0 yêu cầu ASP.NET, thêm các thiết lập sau đây trong tập tin Web.config:

<httpRuntime requestValidationMode="2.0" />

Mặc dù cũng hữu ích đề xuất

mà bạn phân tích mọi yêu cầu xác thực lỗi để xác định liệu có tồn tại hay không Trình xử lý g, các mô-đun hoặc mã tùy chỉnh khác truy cập các đầu vào HTTP có khả năng không an toàn có thể là các vectơ tấn công XSS.

mà không đưa ra bất kỳ hướng dẫn về cách tốt nhất để giải quyết những vấn đề này

4

Tốt nhất là để ghi đè lên requestValidationType với mã của riêng bạn:

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

MSDN liên kết

+3

Có vẻ như quá mức cần thiết: ( –

+1

Tôi phải sử dụng kỹ thuật này cho ứng dụng MVC của mình. đã có một bộ điều khiển bên thứ 3 cần thiết để nhận HTML dưới dạng tham số và các câu trả lời khác ở đây không hoạt động. Cảm ơn ScottRFrost –

26

tôi tìm thấy một cách để đạt được điều này mà không cần thay đổi RequestValidationMode thành 2.0 đến toàn bộ trang web:

Bạn có thể chia thư mục con cho trang bạn muốn tắt xác thực yêu cầu và thêm web.config mới vào thư mục này với RequestValidationMode được đặt thành 2.0, theo cách này chỉ thư mục này sẽ hoạt động ở chế độ 2.0 mà không ảnh hưởng đến tất cả các yêu cầu khác sẽ hoạt động ở chế độ 4.0.

Tôi nghĩ bạn có thể thêm phần vị trí vào web.config chính của bạn chỉ định một trang, nhưng tôi chưa thử nghiệm điều này. Một cái gì đó như thế này:

<location path="Admin/Translation.aspx"> 
    <system.web> 
     <httpRuntime requestValidationMode="2.0"/> 
    </system.web> 
</location> 

Hy vọng nó sẽ giúp bạn như đã giúp tôi!

+5

Hoạt động hoàn hảo, cảm ơn Một số điều tôi đã học được: Vị trí được thêm vào dưới với tư cách anh chị em Giá trị thuộc tính đường dẫn không thể bắt đầu bằng tiền tố /. Có thể thêm một trang hoặc toàn bộ thư mục (không sử dụng dấu /) – mellodev

Các vấn đề liên quan