2009-06-22 29 views
5

Trong Podcast 58 (khoảng 20 phút trong), Jeff phàn nàn về những vấn đề của HTML.Encode() và Joel nói về việc sử dụng hệ thống kiểu có dây thông thường và HTMLStrings:Ngăn ngừa XSS khai thác về lỗ bằng cách sử dụng hệ thống kiểu như Joel gợi ý

  • Một lời răn chính trị ngắn gọn về cái ác của các công cụ xem không tuân theo HTML mã hóa theo mặc định. Vấn đề với lựa chọn thiết kế này là không phải là "an toàn theo mặc định", luôn là lựa chọn sai cho một khung hoặc API . Hãy quên mã hóa một số dữ liệu do người dùng nhập vào một địa điểm đơn lẻ trong ứng dụng web của bạn và bạn sẽ hoàn toàn thuộc sở hữu của XSS. Tin tưởng. Tôi biết vì đó là đã xảy ra với chúng tôi. Nhiều lần!

  • Joel cho rằng, với một ngôn ngữ mạnh mẽ, đánh máy và khuôn khổ đúng, nó có thể (về mặt lý thuyết) để loại bỏ hoàn toàn XSS - này đòi hỏi phải sử dụng một dữ liệu cụ thể loại, một loại đó là duy nhất của bạn đường đến gửi dữ liệu đến trình duyệt. Dữ liệu đó sẽ được xác thực tại thời điểm biên dịch .

Nhận xét tại bài đăng trên blog đề cập đến sử dụng phân tích tĩnh để tìm điểm yếu tiềm ẩn. transcript Wiki chưa hoàn tất.

Có thể triển khai đề xuất của Joel mà không có khung ASP.NET mới không?

Có thể thực hiện nó đơn giản bằng cách phân lớp phụ mọi điều khiển và thực thi các giao diện mới dựa trên HTMLString? Nếu hầu hết mọi người đã kiểm soát phân lớp để có thể tiêm các chức năng cụ thể của trang web tốt hơn, điều này sẽ không dễ thực hiện?

Bạn có nên làm điều này thay vì đầu tư vào phân tích tĩnh không?

Trả lời

2

Để sử dụng HtmlString ở khắp mọi nơi, về cơ bản bạn sẽ phải viết lại mọi thuộc tính và phương pháp của mọi điều khiển web. System.String được niêm phong, vì vậy bạn không thể phân lớp nó.

Cách tiếp cận dễ dàng hơn (nhưng vẫn rất tốn thời gian) là sử dụng bộ điều hợp để thay thế các điều khiển web bằng các lựa chọn thay thế an toàn. Trong trường hợp này, bạn sẽ phân lớp mỗi điều khiển web và ghi đè lên các phương thức Render để mã hóa nội dung động HTML.

+0

Tôi đoán đó là quan điểm của tôi. Trong nhiều ứng dụng ASP.NET tôi đã sử dụng kiểm soát MỌI đã được phân lớp kể từ khi chúng tôi thực hiện I18n và phần mở rộng đặc biệt để xác nhận và những thứ khác. –

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