Tôi đang cố bật mã hóa Viewstate Luôn luôn làm biện pháp bảo mật cho trang web ASP.NET 3.5 được lưu trữ trong IIS6. Chúng tôi đã tắt ViewState nhưng vẫn thấy một số "controlstate" trong chuỗi này. Trong một môi trường thử nghiệm tôi có thể chỉ cần đặt sau trong web.config và tôi có thể base64 không còn giải mã ViewState để bán bản rõ:asp.net Viewstate encryption issue
<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">
Tôi thậm chí còn nói thêm như sau (genereated bởi machine key generater) để Machine.config và vẫn mã hóa tốt ViewState trên máy chủ thử nghiệm của tôi:
<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />
môi trường không thử nghiệm của tôi dường như không nhận những thay đổi trên như tôi có thể giải mã luôn base64 ViewState để văn bản đơn giản với các cài đặt ở trên. Tôi luôn luôn iisreset sau khi tôi thực hiện bất kỳ thay đổi.
Một số thông tin về máy chủ web không thử nghiệm của tôi:
- Web Farm/cân bằng tải (nhưng chỉ có một máy chủ lên để thử nghiệm ngay bây giờ)
- Sql phiên Nhà nước (machinekey trong machine.config ban đầu cần thiết để thiết lập này)
- Machine.config: triển khai bán lẻ = "true"
bất cứ ai có thể đề xuất nơi để tìm kiếm các thiết lập bổ sung mà có thể can thiệp vào mã hóa asp.net ViewState? EDIT: Bây giờ trên máy chủ kiểm tra iis của tôi, tôi không thể hoàn tác cài đặt viewStateEncryptionMode vì nó đang mã hóa ViewState ngay cả khi tôi đặt nó thành "Không bao giờ" và không có trang web nào khác của tôi có vẻ giữ cài đặt này. Tôi có thể nhìn thấy nơi tài sản này bị ghi đè ở đâu? Có bất kỳ bộ nhớ cache nơi cài đặt này được lưu trữ mà cần phải được xóa bên cạnh những gì sẽ được thực hiện khi tôi iisreset/stop www service/touch machine.config?
EDIT CUỐI CÙNG: Sau ngày học tập tin cấu hình, tôi đã từ bỏ và thực hiện điều này thông qua mã. Tôi đã có một mô-đun bảo mật được gắn vào các sự kiện trang vì vậy trong Page_Load tôi đã thêm: Page.RegisterRequiresViewStateEncryption();
Tôi thực sự muốn biết điều gì đã ngăn cản cài đặt này nhận được trên IIS6 immediatley. Khi tôi chạy cassini cục bộ nếu tôi đặt viewStateEncryptionMode thành "Always" qua nút trang, tôi sẽ ngay lập tức thấy nó mã hóa ViewState và hiển thị trường ẩn bổ sung với id = "__ VIEWSTATEENCRYPTED". Khi tôi sau đó đặt nó thành "Không bao giờ" tôi sẽ ngay lập tức thấy mã hóa tắt. Nếu tôi thực hiện cùng một thay đổi chính xác cho trang web trên trang web lưu trữ IIS6 của tôi, nó sẽ không có hiệu lực ngay lập tức nhưng nếu tôi cho phép thiết lập ở lại đó, nó cuối cùng sẽ giữ. Tôi sẽ ngừng/bắt đầu dịch vụ www, thiết lập lại iis, bộ nhớ cache tạm thời ASPNET nhưng tôi không biết những gì khác để thử? Hy vọng bài đăng này có thể ROT trong một thời gian và một người nào đó trong tương lai sẽ thấy hành vi tương tự mà tôi đã trải nghiệm và chúng tôi có thể tìm hiểu thêm điều này!
Hóa ra RegisterRequiresViewStateEncryption cũng bật xác thực ViewstateMAC mặc dù tôi đã đặt rõ ràng điều này thành false trong web.config của mình. Vì trang web của tôi là một "MVC" tùy chỉnh nằm trên đầu trang của WebForms, nơi tôi chuyển hướng đến các trang khác nhau đôi khi trên POSTS tôi không thể xác thực MAC. Tôi nghĩ rằng các thiết lập web.config của ViewStateMAC = false và ViewStateEncryption = true không phải là một sự kết hợp tốt. – felickz