Kontroller harakati Nusxalash
[ActionName("ItemEdit"), AcceptVerbs(HttpVerbs.Post)] umumiy virtual obyekt SaveEdit(PostAddress postAddress, Post postInput) { Post post = postService.GetPost(postAddress); ValidationStateDictionary validationState; postService.EditPost(post, postInput, out validationState); agar (!validationState.IsValid) { ModelState.AddModelErrors(validationState); Qaytish Edit (postAddress); } return Redirect(Url.Post(postInput)); }
Ko'rinib turibdiki, Oxite jamoasi ushbu nazoratchi harakatini qayta tiklash uchun biroz vaqt sarflagan. Barcha tekshirish mantig'i va munosabatlarni boshqarish IPostService ob'ekti orqasida yashirinib, nazoratchi so'rovda vositachi sifatidagi roliga e'tibor qaratish uchun erkin qoldiradi. Nazoratchi harakati uchun yaxshi qoida shundan iboratki, harakat usuli 10 dan 15 gacha kod qatoridan oshib ketgandan so'ng, oddiyroq harakat usulini ishlab chiqarish uchun refaktoringni ko'rib chiqish kerak. Ko'pincha amaldagi qo'shimcha kod satrlari biznes ob'ektlaringiz ichida baxtli hayotga olib keladigan biznes mantig'ini ifodalashini ko'rasiz.
Nazoratchilar va xavfsizlik
Bizning asosiy e'tiborimiz soddalikka qaratilgan bo'lsa-da, agar men kontrollerlar uchun xavfsizlik bilan bog'liq ba'zi muhim tamoyillarni kiritmasam, adashgan bo'lardim. Birinchidan, nazoratchi saytlararo so'rovni soxtalashtirishdan (CSRF) qochishda rol o'ynashi kerak. ASP.NET jamoasining dastur menejeri Fil Xak yaqinda o'zining " Saytlararo so'rov soxtalashtirish hujumi anatomiyasi " maqolasida ushbu mavzu bo'yicha blog yozdi. U hujumdan qochish uchun boshqaruvchi va ko'rish qanday ishlashi mumkinligini batafsil bayon qildi. Filning postini umumlashtirish uchun: Agar autentifikatsiya qilingan foydalanuvchilar chaqirishi mumkin bo'lgan harakatlaringiz bo'lsa, siz mijozga antiforgery tokenini ko'rsatadigan ko'rinishga ega bo'lishingiz kerak va kontroller harakati ValidateAntiForgeryToken atributini qo'llash orqali ushbu tokenni tasdiqlashi kerak. Ushbu yechimni amalga oshirish juda oddiy, ammo siz ushbu himoya vositalarini o'rnatishni unutmasligingiz kerak.
Ikkinchidan, boshqaruvchilar HTTP POST operatsiyalari bilan muayyan harakatlarni cheklash uchun AcceptVerbs atributidan foydalanishlari kerak. Buyurtmani Buyurtmalar jadvalidan o'chirish kabi ma'lumotlarni o'zgartiruvchi nazoratchi harakati faqat HTTP POST operatsiyasi vaqtida bajarilishiga ruxsat berishi kerak va HTTP GET operatsiyasi paytida hech qachon amalga oshirilmasligi kerak. HTTP GET operatsiyasi bilan amal uchun zarur bo'lgan parametrlar URL manzilida yashaydi. Bu shuni anglatadiki, zararli foydalanuvchi sizga rasm bilan elektron pochta xabarini yuborishi va tasvirning manbasini yozuvlarni o'chirishi mumkin bo'lgan URL manziliga yo'naltirishi mumkin. Hech qanday tugmachani bosishingiz shart emas. Yozuvni o'chirish uchun faqat rasmni ko'rishingiz kerak. Stiven Uolter o'zining blog postida ushbu stsenariy bo'yicha qo'shimcha ma'lumotlarni o'z ichiga oladi,