2012-07-02 13 views
9

Tôi đã kiểm tra ứng dụng web của mình bằng tính năng Kiểm tra trong các công cụ dành cho nhà phát triển Google Chrome.Cách hiểu cảnh báo bảo mật trong google chrome cho tài nguyên tĩnh được cung cấp bởi Asp.net

Trước tiên, tôi nhận được cảnh báo, cho biết rằng chúng tôi đang phân phát nội dung tĩnh không thể lưu vào bộ nhớ cache của chúng tôi: "Các tài nguyên sau đây rõ ràng là không thể lưu vào bộ nhớ cache. Hãy cân nhắc tạo bộ nhớ cache nếu có thể".

Để sửa lỗi này tôi đã thêm đoạn mã này để chúng tôi web-config

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" /> 
</staticContent> 

theo khuyến cáo trong bài đăng blog này: http://blogs.msdn.com/b/carlosag/archive/2009/06/09/are-you-caching-your-images-and-scripts-iis-seo-can-tell-you.aspx

Nếu bây giờ tôi bắt đầu một cuộc kiểm toán mới trong google chrome, tôi nhận được một cảnh báo mới:

Các tài nguyên có thể lưu vào bộ nhớ công khai sau đây chứa tiêu đề Set-Cookie . Lỗ hổng bảo mật này có thể khiến cookie được chia sẻ bởi nhiều người dùng.

Bạn có thể giải thích mối đe dọa bảo mật tiềm ẩn và giải pháp có thể có trong Asp.net không?

[Cập nhật]

Sau khi một số nghiên cứu nhiều hơn, tôi đoán đây có thể liên quan đến câu hỏi này:

Why is ASP.NET forms authentication setting cookies on a static image request?

Nhưng tôi không thể đặt các câu đố với nhau. Tình hình không hoàn toàn giống nhau, trong khi ứng dụng của chúng tôi có thể được cấu hình để sử dụng xác thực biểu mẫu, tôi nhận được cảnh báo trong khi sử dụng xác thực cửa sổ.

+0

Bạn có chắc chắn hai sự kiện được kết nối không? Mối đe dọa bảo mật là khá rõ ràng, cùng một cookie có thể được sử dụng bởi nhiều người dùng, điều này không phải là một vấn đề trên một máy tính người dùng duy nhất của khóa học. –

+0

@Ramhound Ít nhất các công cụ chrome nghĩ rằng có một kết nối.Nếu tôi loại bỏ các hướng dẫn bộ nhớ cache từ webconfig tôi nhận được một cảnh báo thay vào đó: Các tài nguyên sau đây là rõ ràng không thể lưu trữ. Hãy xem xét làm cho chúng có thể lưu vào bộ nhớ cache nếu có thể: –

+0

Bạn có thể thêm tiêu đề 'Cache-Control' với giá trị 'riêng tư', cho biết tài nguyên chỉ có thể được lưu vào bộ nhớ cache bởi máy khách chứ không phải bởi các máy trung gian. Bằng cách này, cùng một cookie không được trả về cho các máy khách khác nhau. –

Trả lời

4

Có vẻ như vấn đề thực sự liên quan đến xác thực biểu mẫu. Sau khi xác thực người dùng, chúng tôi đặt một coockie xác thực biểu mẫu. Coockie này không có đường dẫn nào được đặt, vì vậy nó sẽ được gửi cho mọi yêu cầu, ngay cả đối với hình ảnh tĩnh.

Dường như tôi vẫn có tập hợp coockie từ phiên gỡ lỗi trước mặc dù tôi đã thử nghiệm xác thực cửa sổ.

Tôi nghĩ giải pháp tốt nhất là đặt đường dẫn cho coockie để ngăn không cho nó được gửi cho tài nguyên tĩnh. Thật không may tôi không thể xác định một con đường cho tất cả các yêu cầu dịch vụ của chúng tôi, bởi vì chúng tôi đang sử dụng dịch vụ WCF Ria và các dịch vụ có một con đường ảo tạo ra một thời gian chạy.

Giải pháp hiện tại chỉ đặt coockie trong trình duyệt. Mục được cập nhật trong cấu hình web là:

<staticContent> 
    <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="7.00:00:00" cacheControlCustom="private"/> 
</staticContent> 

Phần quan trọng là bộ nhớ cache mớiControlTùy chọn tùy chỉnh.

Tôi đoán điều này vẫn có thể là vấn đề bảo mật, nếu trình duyệt được nhiều người dùng chia sẻ (ví dụ: trong quán cà phê Internet?), Nhưng đây không phải là kịch bản hợp lệ cho dự án của chúng tôi.