حل مشكلة Validation of viewstate MAC failed

مرحبًا بك أيها المبرمج العربي :)

اثناء العمل على تطوير المشاريع او حتى نشرها يظهر لنا هذا الخطأ :

Validation of viewstate MAC failed

machine-key

وغالبًا يظهر عند حدوث تأخر النقر على زر لفترة تتجاوز مدة الجلسة

ما فائدتها ؟

ان وظيفة التحقق view state validation تتحقق من المدخلات الأصلية للطلب السابق قبل معالجة المدخلات الجديدة , وتعتمد في عميلة التحقق هذه على تشفير جميع المدخلات بالإعتماد على مفتاح التشفير الذي نقوم بتزويدة للتطبيق في ملف web.config

ولها فوائد عديدة في حماية الموقع الخاص بك من ادخال الطلبات بشكل عشوائي بإستخدام http requests المباشرة حيث ان viewstate يتم تخزينها داخل بنية الصفحة HTML وبذلك لا يمكن استخدام النماذج بالإعتماد فقط على httpheaders

كما انها تتحقق في حالة قام المتصفح بتغيير أحد البيانات للنماذج بطريقة غير شرعية او التعديل على قيم غير مسموح التعديل عليها .

لذا عملية التحقق هذه مفيدة ولا يمكن اعتبار إلغاؤها حل للمشكلة , كما يذكر انها أحد مميزات تقنية ASP.NET الغير متوفرة بشكل افتراضي في لغات أخرى مثل php

كيفية حل المشكلة ؟

ببساطة نحن بحاجة إلى تزويد تطبيقنا بمفتاح تشفير ليقوم بالإعتماد عليه في عمليات تشفير المدخلات

قام فريق عرب ويندوز بتطوير أداة بسيطة تقوم بتوليد مفاتيح عشوائية خصوصًا لهذه الوظيفة

قم بزيارة هذه الأداة من هنا :

Generate ASP.NET Machine Keys

ثم قم بنسخ المفتاح ولصقة في ملف web.config

بداخل قسم system.web كالتالي :

<configuration>
  <system.web>
    <compilation targetFramework="4.0"  debug="false"/>    
	
	
	<machineKey validationKey="EAA61E7B9FA6AC8A07D74504D1FC32E04FAC26AE6E7C5FF13F195B0015EDC94EAFBB743B6D1DEC53AF495E2D7E0F1304452B33A4A1CF08418A81BD7D6B66D2A4" 
		decryptionKey="4A9C24A893EA1447AEC41E040CDD98664748CE46B9DF9F88D3874100CA5F9D6E" validation="SHA1" decryption="AES"/>
		
  </system.web>
  <system.webServer>
    <defaultDocument>
      <files>
        <clear/>
        <add value="default.aspx"/>
        <add value="index.php"/>
        <add value="index.htm"/>
        <add value="index.html"/>
        <add value="default.htm"/>
      </files>
    </defaultDocument>
  </system.webServer>
</configuration>

تحياتنا لكم