مشكلة Validation of viewstate MAC failed

machine-
مرحبًا بك أيها المبرمج العربي 🙂

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

Validation of viewstate MAC failed


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

ما فائدتها ؟

ان وظيفة التحقق 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="EAA61E7B9FA6AC8A07D74504D1FC32E04FAC26AE6E7C5FF13F195B0015EDC94EAFBB743B6D1DEC53AF495E2D7    E0F1304452B33A4A1CF08418A81BD7D6B66D2A4"
		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>

تحياتنا لكم