PDA

View Full Version : سوال: خطای callback argument



ariashop
شنبه 15 اسفند 1388, 23:00 عصر
دوستان یه خبرنامه دارم که ایمیل میگیره و نام و موقعی که تستش می کنم که سند کنه سریع این خطا رو میده :

Server Error in '/' Application.
Invalid postback or callback argument. Event validation is enabled using in configuration or in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.
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.ArgumentException: Invalid postback or callback argument. Event validation is enabled using in configuration or in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

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:

[ArgumentException: Invalid postback or callback argument. Event validation is enabled using in configuration or in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.]
System.Web.UI.ClientScriptManager.ValidateEvent(St ring uniqueId, String argument) +2080137
System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +106
System.Web.UI.WebControls.TextBox.LoadPostData(Str ing postDataKey, NameValueCollection postCollection) +31
System.Web.UI.WebControls.TextBox.System.Web.UI.IP ostBackDataHandler.LoadPostData(String postDataKey, NameValueCollection postCollection) +11
System.Web.UI.Page.ProcessPostData(NameValueCollec tion postData, Boolean fBeforeLoad) +408
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3776


Version Information: Microsoft .NET Framework Version:2.0.50727.42; ASP.NET Version:2.0.50727.42

mehdi.mousavi
دوشنبه 17 اسفند 1388, 23:40 عصر
دوستان یه خبرنامه دارم که ایمیل میگیره و نام و موقعی که تستش می کنم که سند کنه سریع این خطا رو میده :

Server Error in '/' Application.
Invalid postback or callback argument. Event validation is enabled using in configuration


سلام.
برای اینکه متوجه دلیل این خطا بشید، ابتدا باید بدونید که Post Injection چی هستش. فرض کنید، یک DropDownList روی صفحه هستش، که کاربر میتونه یکی از 3 آیتم موجود در لیست رو انتخاب کنه، و دکمه ای رو برای انجام عمل Postback بزنه.

حالا فرض کنیم که یک مهاجم، آیتم چهارمی که شما در لیست نذاشته اید رو دستی، سمت client توی DropDownList قرار میده و سپس فرم رو Submit میکنه. قدیما، توی Classic ASP، این خود برنامه نویس بود که باید مراقب این مسائل می بود. اما اینجا، ASP.NET مراقب این مساله هست. وقتی چنین چیزی سمت سرور تشخیص داده شد، ASP.NET بر اساس مکانیزم event validation با این مساله مبارزه میکنه و خطایی که شما عنوان کرده اید، رخ خواهد داد.

Event validation چیکار میکنه؟ در واقع توی این مکانیزم، قبل از اینکه Page Life Cycle به جریان بیفته، ASP.NET مطمئن میشه که اطلاعات ارسالی "معنادار" هستش.

متاسفانه، event validation با صفحات ajax ممکنه مشکل ساز باشه... (که قاعدتا این دلیل رخ دادن خطا برای شماست). در واقع فرض کنید که به DropDownList در مثال فوق، شما با استفاده از کد Client Side آیتم چهارمی به لیست افزوده اید و سپس صفحه رو Postback می کنید. تو چنین حالتی هم، چون اون آیتم چهارم توی لیست (از قبل) وجود نداشته، شما با خطای invalid postback or callback argument مواجه میشید.

سخن رو کوتاه میکنم. دو راه حل برای رفع این مشکل وجود داره. یک راه این هستش که به ASP.NET بفهمونید که اون آیتم چهارم آیتم معتبری است و مشکلی نخواهد داشت. برای اینکار، میتونید از Page.Client.RegisterForEventValidation استفاده کنید و مقدار مورد نظر (ID آیتم چهارم) رو به لیست مورد نظر Assign کنید:

ClientScript.RegisterForEventValidation(ddl.Unique ID, "item4_id");

این کار عموما کابوسه، چون شما اغلب از مقادیری که بصورت Dynamic ممکنه به کنترل اضافه بشه، مطلع نیستید.

روش دوم، اینه که توی Page Directive صفحه ای که توش دارید اینکارو می کنید، EventValidation رو false بذارید. اما دقت کنید که تو این حالت، باید خیلی دقیق خودتون مراقب اطلاعاتی که به سمت سرور ارسال میشه، باشید:

<%@Page EnableEventValidattion="false"%>

البته شما میتونید تو web.config کلا event validation رو برای Web Application مورد نظر غیر فعال کنید، اما چنین چیزی هرگز توصیه نمیشه.

موفق باشید.