PDA

View Full Version : سوال: Validation of viewstate MAC failed



finalcut
جمعه 14 تیر 1387, 09:28 صبح
سلام
من در یکی از صفحه های سایتم گاهی با این خطا مواجه میشم:
Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
این طور که من متوجه شدم مواقعه ای که صفحه کامل لود نشده و کاربر مثلاً جستجو را کلیک میکنه یا وقتی که چند بار به سرعت جستجو میکنه این خطا رخ میده
در سایت های دیگه حرف از یک باگ در .net بود کسی اطلاعاتی در این مورد داره و راه حل چیه؟؟؟

Behrouz_Rad
جمعه 14 تیر 1387, 10:06 صبح
باگ که چه عرض کنم... نمیشه دقیقا اسمش رو باگ گذاشت.
ASP.NET برای اطمینان به صحت وضعیت کنترل هایی که حالت اونها را در ViewState ذخیره می کنه، یک عبارت کد شده به ViewState اضافه می کنه و اون رو در انتهای صفحه در یک Input مخفی قرار میده.
زمانی که صفحه به طور کامل لود نشده و Input وجود نداره، اگر کاربر اقدام به PostBack کنه، ASP.NET نمی تونه مقدار اون عبارت کد شده رو پیدا کنه و در نتیجه با این احتمال که ViewState توسط فرد بدخواهی دستکاری شده، خطا می گیره. البته منظور، حالت خاصی از رمزنگاری برای کنترل هایی هست که مقادیر حساسی رو همراه با خودشون دارند. مثل GridView که خاصیت DataKeyNames داره.
خطای مشابه دیگه ای هم ممکنه دریافت کنی و دلیل اون باز هم به عدم پیدا شدن یک Input که برای Validate کردن Event (که قابلیت جدیدی در ASP.NET 2.0 هست) بر می گرده که توضیحش مفصله.


در نهایت دو راه برای حل این مشکل وجود داره.
1) مقدار خاصیت enableEventValidation در دایرکتیو Page رو برابر با false و مقدار viewStateEncryptionMode رو برابر با Never قرار بدی که البته مشکلات امنیتی داره.
2) فیلتری با استفاده از HttpModule برای Stream خروجی بنویسی تا مقدار Input های EVENTVALIDATION__ و EVENTTARGET__ و VIEWSTATEENCRYPTED__ به جای اینکه در انتهای صفحه قرار بگیره در ابتدای صفحه ایجاد بشه.

موفق باشید.

finalcut
جمعه 14 تیر 1387, 12:58 عصر
ممنون جناب راد، راه حل اول خوب صورت مسئله رو پاک میکنه و شاید برای این سایت من مشکلی ایجاد نکنه ولی برای سایت های مهمتر این مشکلات امنیتی شاید مسئله ساز بشه

در مورد راه حل دوم هم که بنظر مناسب می آید این مطلب و پیدا کردم
http://blogs.msdn.com/tom/archive/2008/03/14/validation-of-viewstate-mac-failed-error.aspx

Behrouz_Rad
جمعه 14 تیر 1387, 13:16 عصر
در واقعه انگار بروز این مشکل همیشه قطعی نیست و فقط گاهی برای بعضی سایت ها بروز می کنه

این مورد بستگی به کنترلی داره که استفاده می کنید. عرض کردم که:


البته منظور، حالت خاصی از رمزنگاری برای کنترل هایی هست که مقادیر حساسی رو همراه با خودشون دارند. مثل GridView که خاصیت DataKeyNames داره.

تمامی کنترل ها مقادیری ندارند که نیاز به Encrypt شدن داشته باشند و یا تمامی کنترل ها نیاز به Event Validation ندارند.


در مورد راه حل دوم که اطلاعات من کافی نیست اگه مرجع مناسبی دارید لطف کنید معرفی کنید

در مورد viewstate+httpmodule+asp.net در گوگل جستجو کن.

موفق باشید.

rezaei manesh
شنبه 21 آذر 1388, 15:19 عصر
سلام
من هم همین خطا رو دارم
اما واسه من زمانی خطا رخ می ده که مثلا چند دقیقه تو اون صفحه بمونم و بعد بخوام کاری رو روی اون صفحه انجام بدم ؟
البته من تو کد نویسی از ویو استیت استفاده می کنم
چکار کنم ؟که امنیت هم داشته باشم