2008-11-21 23 views
30

Tôi có một ứng dụng ASP.NET 2.0 hoạt động tốt trong môi trường cục bộ của chúng tôi. Khi được xuất bản lên máy chủ thử nghiệm, chúng tôi sẽ gặp lỗi liên tục trên máy chủ."Đệm không hợp lệ và không thể xóa" ngoại lệ trên WebResource.axd

Đây là thông dụng phổ biến nhất:

Đệm không hợp lệ và không thể xóa. Mô tả: Một ngoại lệ không được xử lý xảy ra trong khi thực hiện yêu cầu web hiện tại. Vui lòng xem lại dấu vết ngăn xếp để biết thêm thông tin về lỗi và vị trí bắt nguồn từ mã.

Exception Details: System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[CryptographicException: Padding is invalid and cannot be removed.]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +257
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo) +164
System.Web.UI.Page.DecryptString(String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64

Điều này xảy ra theo yêu cầu cho yêu cầu WebResource.axd cụ thể.

Các lỗi khác mà chúng ta đang thấy là thế này:

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. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: 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.

Lỗi này xảy ra thường xuyên trong khi đăng một biểu mẫu.

Bây giờ trước khi bạn nhảy vào và nói với tôi (bình thường) trả lời rõ ràng lỗi này, hãy xem xét điều này:

  • Ứng dụng này được triển khai Windows Server 2003 trên IIS6
  • Đó là KHÔNG trên web nông trại. Chỉ một máy chủ web được sử dụng tại đây.
  • Nhận dạng hồ bơi ứng dụng là tài khoản dịch vụ tùy chỉnh và tôi đã chạy aspnet_regiss -ga <username> trên máy chủ. Không có hiệu lực.
+1

Thêm một câu trả lời rõ ràng cho điều này, kiểm tra xem nó ra :) – eglasius

+0

Bất kỳ loại giải pháp nào Ben? Tôi có 15 báo cáo Ngoại lệ trong 25 phút về lỗi đầu tiên bạn báo cáo. Rackspace đã được * cho phép * để khởi động lại đêm qua sau khi cài đặt fx3.5 sp1 và tôi nghĩ rằng đây là từ đó. Tuy nhiên, tôi chỉ phát hiện ra họ "quên" để khởi động lại nó trên mỗi vé của chúng tôi. Đây là liên kết đến một trong các báo cáo của chúng tôi về lỗi - http://exceptioneer.com/Share/Summary.aspx?e5dca865-cb2c-4292-af3f-e9d645a081a7. –

+1

Tôi chưa bao giờ giải quyết vấn đề này. Nó không bao giờ nằm ​​ở đầu danh sách ưu tiên của chúng tôi. Bây giờ tôi đang ở trên một dự án khác, vì vậy ... không có nhiều sự giúp đỡ tôi biết. –

Trả lời

24

Lỗi là do tên miền ứng dụng của bạn đã được tái chế/khởi động lại. Khi điều đó xảy ra, ứng dụng và phím máy được đặt thành tự động, nó sẽ thay đổi. Điều đó ảnh hưởng đến việc giải mã thông tin trong url của url tài nguyên (.axd). Thiết lập khóa máy cố định sẽ ngăn không cho nó xảy ra lần nữa.

Vui lòng kiểm tra này để biết thêm về một trường hợp tương tự (giải thích là với một vấn đề với xác nhận ViewState, nhưng nguyên nhân là như nhau một): http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+Validate+Data+Error.aspx

Tôi cũng đã tự hỏi về nó cho khá trong một . Sau khi tôi nhìn thấy câu hỏi này nó đã cho tôi trên nó một lần nữa: Is this an attempt to break my ASP.Net site's security? ... mà tôi chỉ trả lời với rất nhiều như nhau.Tôi có cảm giác đó là xung quanh việc khởi động lại thứ gì đó, bởi vì khi chúng tôi xuất bản thứ gì đó tái chế ứng dụng lỗi hiển thị trong nhật ký, nhưng tôi không có bất kỳ nguồn nào khác cho biết mối quan hệ của nó (hôm nay tôi thấy trường hợp đó trên invalidviewstate vì thay đổi machinekey :))

Ps. ở trên cuối cùng giải thích nó trên máy chủ duy nhất :)

+0

Tôi sẽ thực hiện một số điều tra, nhưng tôi không nghĩ đây là vấn đề. Nếu máy chủ có khóa máy được chỉ định trong machine.config thì máy chủ sẽ không bao giờ thay đổi. Cảm ơn những lời khuyên mặc dù, tôi sẽ xem xét nó. –

+0

bạn là chính xác, nếu bạn chỉ định khóa máy, nó sẽ không thay đổi (đó là sửa chữa nhưng hầu như mọi nguồn chỉ áp dụng/giải thích nó cho nhiều máy chủ), chỉ nghĩ rằng bạn đang sử dụng tự động cho khóa như bạn đã nhấn mạnh vào "Nó KHÔNG ở trên trang web. Chỉ một máy chủ web được sử dụng tại đây ". ... – eglasius

+0

nhìn lại vấn đề này, điều này rất có thể là kịch bản –

1

Sự cố này xuất hiện khi bài đăng được tạo trước khi trang được tải hoàn toàn trong trình duyệt. Hãy xem câu hỏi this.

+0

đó là những gì tôi đã suy nghĩ cho vấn đề thứ cấp, tuy nhiên nó xảy ra thường xuyên hơn là thoải mái. Điều này không giải thích được lỗi đầu tiên, nghiêm trọng hơn nhiều trong trường hợp của chúng tôi. –

+0

bạn có đang sử dụng HTTP hoặc HTTPS không? –

+0

Tất cả HTTP. [] –

0

Ben,

Đối với vấn đề đầu tiên của bạn, tôi thấy điều này mà có vẻ là nhiều hơn một chút để quan điểm của những gì bạn đang nhìn thấy trong đó các vấn đề được thỉnh thoảng xảy ra. Bạn sẽ có thể tìm thấy giải thích đầy đủ về điều này tại http://www.codeproject.com/KB/security/Cryptor.aspx#aes.

Điều bạn thực sự cần làm là đặt RijndaelAlg.Padding thành PaddingMode.ISO10126, PaddingMode.PKCS7 hoặc PaddingMode.ANSIX923. Bất kỳ một trong 3 giá trị này sẽ hoạt động, miễn là bạn sử dụng cùng một giá trị khi mã hóa và giải mã. Các giá trị khác sẽ hoạt động với một số dữ liệu, nhưng không phải với tất cả dữ liệu. URL trên giải thích lý do.

Điều tôi không hiểu là lý do Microsoft cung cấp các tùy chọn đôi khi không hoạt động hoặc ít nhất là lý do tại sao chúng không mặc định cho tùy chọn đáng tin cậy.

+0

Tôi không tự mình nén hoặc mã hóa, đó là lý do tại sao điều này gây nhầm lẫn. Điều này chỉ xảy ra trên một yêu cầu đến các URL WebResource.axd khác nhau. –

+0

Bạn có đang sử dụng bất kỳ thành phần nào của bên thứ 3 không? – JohnL

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