Khắc phục lỗi Validation of viewstate MAC failed ... trong asp.net
Hầu hết các website bằng asp.net thường mắc lỗi. Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
Khi ta chạy website viết bằng ASP.NET trên web-hosting mà có nhiều website cùng chạy, mỗi khi ta cập nhật thư viện, assembly, mã nguồn mới (các file cs), khi đó nếu người dùng submit lên từ một trang được sinh ra từ code cũ có thể sẽ gặp phải lỗi “Validation of viewstate MAC failed”. Trong bài viết này tôi sẽ hướng dẫn cách khắc phục triệt để lỗi trên.
Cách giải quyết thứ nhất:
Thêm đoạn cấu hình sau vào trong thẻ trong file web.config
Hoặc thêm dòng:
Tuy nhiên, với việc disable các tính năng trên, ta cũng sẽ mất một số tính năng phòng vệ trước kỹ thuật tấn công Cross-site Request Forgery mà framework đã hỗ trợ sẵn.
Sinh machineKey cho site
Để tránh gặp phải lỗi “Validation of viewstate MAC failed”, ta cung cấp các key cho việc validate viewState thay vì để cho IIS tự sinh (AutoGenerate) bằng cách cấu hình thẻ machineKey trong system.web ở file web.config.
<machinekey
validationKey=”AutoGenerate,IsolateApps” [String]
decryptionKey=”AutoGenerate,IsolateApps” [String]
validation=”HMACSHA256″ [SHA1 | MD5 | 3DES | AES | HMACSHA256 |
HMACSHA384 | HMACSHA512 | alg:algorithm_name]
decryption=”Auto” [Auto | DES | 3DES | AES | alg:algorithm_name]
/>
Trong đó:
decryption: nhận một trong các thuật toán sau: Auto | DES | 3DES | AES | alg:algorithm_name
validation: nhận một trong các hàm băm, mã hóa sau: SHA1 | MD5 | 3DES | AES | HMACSHA256 | HMACSHA384 | HMACSHA512
decryptionKey: 64 bit nếu decryption là DES; 192bit nếu là 3DES; 128, 192 hoặc 256 bit nếu là AES
validationKey: 128 bit nếu validation là MD5; 160 bit nếu là SHA1; 192 bit nếu là DES; 256 nếu là AES hoặc HMACSHA256; 384bit nếu là HMACSHA384; 512bit nếu là HMACSHA512
Ví dụ như:
Xem thêm cách thông tin machineKey tại MSDN: machineKey Element
Để sinh machineKey bạn có thể sử dụng Tool sinh machineKey online
</machinekey
Chú ý: Khi phát hành lại bài viết này bạn phải ghi nguồn tin http://itexpressvn.net. Nếu không ghi nguồn là bạn đã vi phạm bản quyền bài viết
Ý kiến bạn đọc