‫۱۲ سال و ۶ ماه قبل، شنبه ۱۹ فروردین ۱۳۹۱، ساعت ۱۶:۵۳
- صفحه تعویض پسورد کاربر، چک باکس IsAdmin را ندارد. اما چون Model کامل کاربر در پشت صحنه آپدیت می‌شود، اگر با جعل صفحه یا درخواست ارسالی به سرور، اطلاعات IsAdmin هم ارسال شود، آنگاه Model binder که با model کامل User کار می‌کند، اطلاعات IsAdmin اضافی را هم دریافت کرده و پردازش می‌کند. بنابراین به نحوی باید سطح کلی در معرض عموم قرارگیری model را کاهش داد که روش‌های آن هم ذکر شد.
- در مورد نحوه انجام این حمله توضیحی نخواهم داد... فقط بدونید که سایت github چند وقت قبل بر همین اساس هک شد و سر و صدای زیادی هم به پا کرد: (^)
‫۱۲ سال و ۶ ماه قبل، شنبه ۱۹ فروردین ۱۳۹۱، ساعت ۱۶:۲۶
یک راه دوم یا راه بکارگیری صریح امکانات هستند. model binder پیش‌فرض در پشت صحنه همین متدها را به صورت خودکار فراخوانی می‌کند. بنابراین ضرورتی ندارد که دستی این‌ متدها را فراخوانی کرد. UpdateModel در صورت بروز مشکلی یک استثناء را صادر می‌کند (InvalidOperationException) اما TryUpdateModel خیر و فرصت خواهید داشت تا با بررسی نتیجه اعتبار سنجی، تصمیم بهتری را اتخاذ کنید.
کلا هرجایی در دات نت Try دیدید، هدفش همین مساله است. مثلا int.Parse داریم و int.TryParse. در مورد سایر نوع‌های عددی هم این دو نوع متد وجود دارند. متد Parse اگر نتواند تبدیل را انجام دهد، یک استثناء را صادر می‌کند، اما متد TryParse سعی خودش را خواهد کرد. اگر نشد، فقط false بر می‌گرداند.
‫۱۲ سال و ۶ ماه قبل، شنبه ۱۹ فروردین ۱۳۹۱، ساعت ۱۳:۴۰
بعید می‌دونم. علتش به توسعه پذیری SharePoint بر می‌گرده که بر اساس معماری وب فرم‌ها از ابتدا طراحی شده. اگر بروند سراغ MVC تمام افزونه‌های قبلی از کار می‌افته یا به شدت مشکل پیدا می‌کنند. ضمن اینکه SharePoint پلتفرم واقعا عظیمی است. خیلی هزینه‌بر است تبدیل آن.
برای مثال شاید همین سوال در مورد IE هم باشد. چرا IE رو با دات نت نمی‌نویسند؟ علتش این است که بعد از این همه سال میلیون‌ها دلار خرج code base آن شده. دور ریختن و دل کندن از آن واقعا سخت است.
‫۱۲ سال و ۶ ماه قبل، شنبه ۱۹ فروردین ۱۳۹۱، ساعت ۰۵:۱۳
الگو که همان view state خودش یک الگو است. از این افزونه استفاده کنید تا حجم view state را هم مشاهده کنید: (^).
به عبارتی اگر وب سرور IIS بود و View State هم حجمی را نمایش داد، سایت 100 درصد بر مبنای ASP.NET Web forms است.
‫۱۲ سال و ۶ ماه قبل، شنبه ۱۹ فروردین ۱۳۹۱، ساعت ۲۰:۴۴
سورس MVC3 در دسترس است: (^)
روشی که در متد TryUpdateModel بکارگرفته شده (در فایل Controller.cs) که مبتنی بر کار با اینترفیس IModelBinder است، در قسمت‌های دیگر هم بکار رفته. بنابراین مکانیزم کلی یکی است. نام متدها شاید فرق کند.
‫۱۲ سال و ۶ ماه قبل، جمعه ۱۸ فروردین ۱۳۹۱، ساعت ۲۰:۵۶
بله. ویژگی‌های HttpPost و HttpGet مقدم نیستند بر اصول زبان مورد استفاده. اصول زبان مورد استفاده حین تعریف امضای متدها باید رعایت شوند (هر overloadایی رو نمیشه تعریف کرد). اما ... اگر ... این اصول رعایت شوند و کد شما کامپایل شود، آنگاه می‌توان دو یا چند overload را با verbهای مختلفی بدون مشکل دریافت خطای ambiguous استفاده کرد.
‫۱۲ سال و ۶ ماه قبل، جمعه ۱۸ فروردین ۱۳۹۱، ساعت ۰۶:۰۸
جهت تکمیل: می‌توان دو یا چند متد همنام در یک کنترلر داشت اگر از Verbهای مختلفی استفاده کنند. Post و Get و امثال این، Http Verb هستند.
‫۱۲ سال و ۶ ماه قبل، جمعه ۱۸ فروردین ۱۳۹۱، ساعت ۰۵:۴۶
عنوان شد که اگر از FormCollection به عنوان پارامتر استفاده بشه، می‌شود دو متد هم نام را در یک کنترلر داشت. پاسخ این است که خیر. تحت هر حالتی نمی‌تونید دو متد هم نام را در یک کنترلر داشته باشید، مگر اینکه یکی httppost باشه و یکی httpget و امثال این حالت. بررسی آن هم ساده است. دو متد هم نام درست کنید. یکی با پارامتر و یکی بدون پارامتر. هر دو هم httppost. بعد سعی کنید یک فرم را به سرور ارسال کنید. با پیغام controller type  is ambiguous مواجه خواهید شد. روش حل این مساله استفاده از ActionName است.
‫۱۲ سال و ۶ ماه قبل، پنجشنبه ۱۷ فروردین ۱۳۹۱، ساعت ۲۰:۳۳
البته این Viewها (ی create/update و غیره)  توسط scaffold template صفحه اضافه کردن view هم از روی یک مدل قابل تولید هستند (در لیست قالب‌ها هست). یعنی الزاما نیازی به EF نیست. چون EF مدل‌هاش دردسترس است این قابلیت برای اون هم وجود داره یا هر ORM دیگری.
‫۱۲ سال و ۶ ماه قبل، پنجشنبه ۱۷ فروردین ۱۳۹۱، ساعت ۱۶:۴۹
- Steven Sanderson (عضو تیم ASP.NET MVC) از روش ActionName استفاده می‌کنه (نویسنده کتاب Pro ASP.NET MVC هم هست). بنابراین روش برگزیده رو میشه این حالت درنظر گرفت. در مورد FormCollection هم در انتهای بحث توضیح دادم. Scaffold هم جهت تولید View مورد استفاده قرار می‌گیره نه کنترلر و اکشن متدهای آن. البته در این حالت strongly typed ، نیاز به مدل خواهد داشت که خارج از بحث FormCollection است؛ چون loosely typed است و نمیشه Viewایی رو از یک FormCollection استخراج کرد.
- هدف من تکمیل بحث بود. آشنایی با انواع روش‌های ممکن.
ضمن اینکه من چند سال قبل به کمک روش Request.Form که توضیح دادم، یک form generator برای ASP.NET Web forms نوشتم. زمانیکه کنترل‌های وب فرم‌ها به صورت پویا به صفحه اضافه بشن، دیگه eventها جهت دریافت مقادیر اون‌ها معنا نخواهند داشت (با توجه به اینکه کل صفحه رو بخواهیم پویا تولید کنیم و برنامه چند صد فرم پویا داشته باشد). در اینجا از همین روش Request.Form برای دریافت مقادیر کنترل‌های پویای اضافه شده به صفحه استفاده کردم.