ValidateAntiForgeryToken उद्देश्य, स्पष्टीकरण और उदाहरण


310

क्या आप समझाएँगे ValidateAntiForgeryToken उद्देश्य की और मुझे ValidateAntiForgeryTokenMVC 4 के बारे में उदाहरण दिखा सकते हैं ?

मुझे कोई उदाहरण नहीं मिला जो इस विशेषता की व्याख्या करता हो?


8
इस पोस्ट को गौरवशाली ढंग से
archive/

1
वैसे, मैं वास्तव में यह नहीं समझता कि एमएस ने .BeginFormहेल्पर के अंदर यह अधिकार क्यों नहीं रखा है । तो यह बात अपने आप होती है, जैसे रेल
जैजकैट

जवाबों:


350

MVC के एंटी-जालसाजी समर्थन एक HTTP- केवल कुकी के लिए एक अद्वितीय मान लिखते हैं और फिर उसी मान को प्रपत्र में लिखा जाता है। जब पृष्ठ प्रस्तुत किया जाता है, तो एक त्रुटि उठाई जाती है यदि कुकी मान फॉर्म मूल्य से मेल नहीं खाता है।

यह ध्यान रखना महत्वपूर्ण है कि सुविधा क्रॉस साइट अनुरोध forgeries को रोकती है । अर्थात्, किसी अन्य साइट से एक फ़ॉर्म जो एक प्रमाणित उपयोगकर्ता की प्रमाणिकता का उपयोग करके छिपी हुई सामग्री को प्रस्तुत करने के प्रयास में आपकी साइट पर पोस्ट करता है। हमले में उपयोगकर्ता को एक फ़ॉर्म सबमिट करने में लॉग इन करना शामिल है, या जब पृष्ठ लोड होता है, तो केवल प्रोग्राम को प्रपत्र ट्रिगर करके।

सुविधा किसी अन्य प्रकार के डेटा जालसाजी या छेड़छाड़ आधारित हमलों को नहीं रोकती है।

इसका उपयोग करने के लिए, एक्शन विधि या नियंत्रक को ValidateAntiForgeryTokenविशेषता के साथ सजाएं और @Html.AntiForgeryToken()विधि पोस्ट करने वाले रूपों में कॉल करें ।


5
@ क्रिस यह दोनों है। मेरे जवाब के अनुसार: "एक HTTP- केवल कुकी के लिए एक अनूठा मूल्य लिखते हैं और फिर उसी मूल्य को फॉर्म में लिखा जाता है "
रिचर्ड शेजले

21
यह डिफ़ॉल्ट रूप से सेट क्यों नहीं है?
ईसाई हैगेलिड

12
@ क्रिसियन क्योंकि यह रूबी ऑन रेल्स नहीं है। ;-)
मार्टिन कैपोडिसी

6
ऐसा लगता है कि फॉर्म __RequestVerificationToken और कुकी __RequestVerificationToken समान नहीं हैं, वे एक जोड़ी के रूप में काम करते हैं।
वाईकिट कुंग

5
@rdans बिल्कुल नहीं, CORS और CSRF पूरी तरह से अलग हैं। कॉर्स अन्य डोमेन को आपके सर्वर पर एपीआई का उपयोग करने की अनुमति देने के लिए है, सीएसआरएफ यह सुनिश्चित करने के बारे में है कि आपके द्वारा अपेक्षित पेज से एक फॉर्म पोस्ट आया था।
रिचर्ड साज़ेले

52

ValidateAntiForgeryToken विशेषता का मूल उद्देश्य क्रॉस-साइट अनुरोध जालसाजी के हमलों को रोकना है।

क्रॉस-साइट अनुरोध जालसाजी एक हमला है जिसमें एक हानिकारक स्क्रिप्ट तत्व, दुर्भावनापूर्ण आदेश, या कोड एक विश्वसनीय उपयोगकर्ता के ब्राउज़र से भेजा जाता है। इस बारे में अधिक जानकारी के लिए कृपया http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages पर जाएं

यह उपयोग करने के लिए सरल है, आपको नीचे के रूप में ValidateAntiForgeryToken विशेषता के साथ विधि को सजाने की आवश्यकता है:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult CreateProduct(Product product)  
{
  if (ModelState.IsValid)  
  {
    //your logic 
  }
  return View(ModelName);
}

यह System.Web.Mvc नामस्थान से लिया गया है।

और आपके विचार में, टोकन जोड़ने के लिए इस कोड को जोड़ें ताकि इसे सबमिट करने पर फ़ॉर्म को मान्य किया जाए।

@Html.AntiForgeryToken()

हां, आप सही हैं, आपको अपने फॉर्म से @ Html.AntiForgeryToken () कॉल करना होगा और उस ऐक्टिव विधि में ValidateAntiForgeryTokenAttribute को जोड़ना होगा जिसे आप सुरक्षित करना चाहते हैं।
चंद्र मल्ल

इस सरल उत्तर को समझने के लिए धन्यवाद :)
noobprogrammer

4

ASP.Net में कोर विरोधी जालसाजी टोकन स्वचालित रूप से प्रपत्रों में जोड़ा जाता है, इसलिए @Html.AntiForgeryToken()यदि आप रेजर फॉर्म तत्व का उपयोग करते हैं या यदि आप IHtmlHelper.BeginForm का उपयोग करते हैं और यदि फॉर्म की विधि GET नहीं है , तो आपको जोड़ने की आवश्यकता नहीं है।

यह आपके फॉर्म के लिए इसी तरह इनपुट तत्व उत्पन्न करेगा: <input name="__RequestVerificationToken" type="hidden" value="CfDJ8HSQ_cdnkvBPo-jales205VCq9ISkg9BilG0VXAiNm3Fl5Lyu_JGpQDA4_CLNvty28w43AL8zjeR86fNALdsR3queTfAogif9ut-Zd-fwo8SAYuT0wmZ5eZUYClvpLfYm4LLIVy6VllbD54UxJ8W6FA">

और जब उपयोगकर्ता सबमिट करता है तो यह टोकन सर्वर सक्षम होने पर सत्यापित किया जाता है यदि सत्यापन सक्षम है।

[ValidateAntiForgeryToken]विशेषताओं का उपयोग क्रियाओं के विरुद्ध किया जा सकता है। जब तक इस फ़िल्टर को लागू किया जाता है, तब तक किए गए अनुरोधों को अवरुद्ध कर दिया जाता है, जब तक कि अनुरोध में एक वैध एंटिफर्गरी टोकन शामिल नहीं होता है।

[AutoValidateAntiforgeryToken]नियंत्रक के खिलाफ विशेषता का उपयोग किया जा सकता है। यह विशेषता मान्य रूप से ValidateAntiForgeryToken विशेषता के लिए काम करती है, सिवाय इसके कि निम्न HTTP विधियों का उपयोग करके किए गए अनुरोधों के लिए टोकन की आवश्यकता नहीं है: GET HEAD OPTIONS TRACE

अतिरिक्त जानकारी: https://docs.microsoft.com/pl-pl/aspnet/core/security/ant-request-forgery


2

Microsoft हमें अंतर्निहित कार्यक्षमता प्रदान करता है जिसका उपयोग हम अपने अनुप्रयोगों में सुरक्षा उद्देश्यों के लिए करते हैं, इसलिए कोई भी हमारी साइट को हैक नहीं कर सकता है या कुछ महत्वपूर्ण जानकारी पर आक्रमण नहीं कर सकता है।

हरप्रीत सिंह द्वारा MVC आवेदन में ValidateAntiForgeryToken के उद्देश्य से :

ValidateAntiForgeryToken का उपयोग

आइए इस अवधारणा को समझने के लिए एक सरल उदाहरण के साथ प्रयास करें। मैं इसे बहुत जटिल नहीं बनाना चाहता, इसीलिए मैं एक MVC एप्लिकेशन के टेम्पलेट का उपयोग करने जा रहा हूं, जो पहले से ही Visual Studio में उपलब्ध है। हम इस कदम को चरणबद्ध तरीके से करेंगे। चलो शुरू करते हैं।

  1. चरण 1 - डिफ़ॉल्ट इंटरनेट टेम्प्लेट के साथ दो एमवीसी एप्लिकेशन बनाएं और क्रमशः क्रोससाइट_रैवेस्टफेर्गरी और अटैक_ऐप्लिकेशन के नाम दें।

  2. अब, CrossSite_RequestForgery एप्लिकेशन का वेब कॉन्फ़िगरेशन खोलें और नीचे दिए गए एक के साथ कनेक्शन स्ट्रिंग को बदलें और फिर सहेजें।

`

<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF;
Integrated Security=true;" providerName="System.Data.SqlClient" /> 
 </connectionStrings>
  1. अब, Tools >> NuGet Package Manager, फिर पैकेज मैनेजर कंसोल पर क्लिक करें

  2. अब डेटाबेस बनाने के लिए पैकेज मैनेजर कंसोल में नीचे बताई गई तीन कमांड चलाएं।

सक्षम करें-माइग्रेशन पहला अपडेट-डेटाबेस ऐड-माइग्रेशन

महत्वपूर्ण नोट्स - मैंने कोड पहले दृष्टिकोण के साथ डेटाबेस बनाया है क्योंकि मैं इस उदाहरण को डेवलपर्स के काम करने के तरीके से बनाना चाहता हूं। आप मैन्युअल रूप से भी डेटाबेस बना सकते हैं। यह तुम्हारी पसंद है।

  1. अब, खाता नियंत्रक खोलें। यहां, आपको एक रजिस्टर विधि दिखाई देगी जिसका प्रकार पोस्ट है। इस विधि के ऊपर, [ValidateAntiForgeryToken] के रूप में एक विशेषता उपलब्ध होनी चाहिए। इस विशेषता पर टिप्पणी करें। अब, रजिस्टर पर राइट क्लिक करें और व्यू पर जाएं पर क्लिक करें। वहाँ फिर से, आप @ Html.AntiForgeryToken () के रूप में एक html सहायक पाएंगे। यह भी एक टिप्पणी करें। एप्लिकेशन चलाएं और रजिस्टर बटन पर क्लिक करें। URL इस प्रकार खुलेगा:

http: // localhost: 52,269 / खाता / पंजीकरण

नोट्स - मुझे पता है कि अब सभी पाठकों के मन में यह सवाल उठ रहा है कि इन दो सहायकों को टिप्पणी करने की आवश्यकता क्यों है, क्योंकि सभी जानते हैं कि इनका उपयोग अनुरोध को मान्य करने के लिए किया जाता है। फिर, मैं आप सभी को बताना चाहता हूं कि यह सिर्फ इसलिए है क्योंकि मैं इन सहायकों को लागू करने से पहले और बाद में अंतर दिखाना चाहता हूं।

  1. अब, दूसरा एप्लिकेशन खोलें जो Attack_Application है। फिर, खाता नियंत्रक का रजिस्टर तरीका खोलें। बस नीचे दिखाए गए सरल के साथ POST विधि को बदलें।

    पंजीकरण फॉर्म
    1. @ Html.LabelFor (m => m.UserName) @ Html.TextBoxFor (m => m.UserName)
    2. @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
    3. @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)

7.अब, मान लीजिए कि आप एक हैकर हैं और आपको वह URL पता है जहाँ से आप उपयोगकर्ता को CrossSite_RequestForgery एप्लिकेशन में पंजीकृत कर सकते हैं। अब, आपने एक Forgery साइट को Attacker_Application के रूप में बनाया और बस उसी URL को पोस्ट विधि में रखा।

8. अब इस एप्लिकेशन को देखें और रजिस्टर फ़ील्ड भरें और रजिस्टर पर क्लिक करें। आप देखेंगे कि आप CrossSite_RequestForgery एप्लिकेशन में पंजीकृत हैं। यदि आप CrossSite_RequestForgery एप्लिकेशन के डेटाबेस की जांच करते हैं, तो आप देखेंगे और आपके द्वारा दर्ज की गई प्रविष्टि।

  1. महत्वपूर्ण - अब, CrossSite_RequestForgery एप्लिकेशन खोलें और खाता नियंत्रक में टोकन की टिप्पणी करें और दृश्य दर्ज करें। उसी प्रक्रिया के साथ फिर से पंजीकरण करने का प्रयास करें। फिर, नीचे एक त्रुटि होगी।

/ 'अनुप्रयोग में सर्वर त्रुटि ________________________________________ आवश्यक एंटी-फर्जी कुकी "__RequestVerificationToken" मौजूद नहीं है।

यह अवधारणा कहती है। हम View अर्थात @ Html.AntiForgeryToken () में लोड समय पर __RequestVerificationToken और [ValidateAntiForgeryToken] नियंत्रक विधि पर उपलब्ध है। इस टोकन को पोस्ट टाइम पर मिलान करें। यदि टोकन समान है, तो इसका मतलब है कि यह एक वैध अनुरोध है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.