CSRF टोकन क्या है? इसका महत्व क्या है और यह कैसे काम करता है?


628

मैं एक आवेदन लिख रहा हूं (Django, ऐसा होता है) और मैं सिर्फ एक विचार चाहता हूं कि वास्तव में "सीएसआरएफ टोकन" क्या है और यह डेटा की सुरक्षा कैसे करता है। यदि आप CSRF टोकन का उपयोग नहीं करते हैं तो क्या पोस्ट डेटा सुरक्षित नहीं है?


13
यह क्रॉस-साइट अनुरोध बलों को रोकने के लिए सभी फॉर्म सबमिशन और साइड-इफ़ेक्ट यूआरएल में एक गुप्त, उपयोगकर्ता-विशिष्ट टोकन है। यहाँ अधिक जानकारी: en.wikipedia.org/wiki/Cross-site_request_forgery
रॉबर्ट हार्वे

1
ऐसा लगता है कि किसी प्रश्न की रक्षा और बहुत व्यापक होने के लिए उस पर प्रतिबंध लगाने के बीच एक महीन रेखा है : D
anton1980

2
से OWASP पार साइट अनुरोध जालसाजी (CSRF) रोकथाम चीट शीट : " क्रॉस-साइट स्क्रिप्टिंग नहीं आवश्यक CSRF के लिए काम करने के लिए है हालांकि, किसी भी क्रॉस-साइट स्क्रिप्टिंग भेद्यता सभी CSRF शमन तकनीक को हराने के लिए इस्तेमाल किया जा सकता [...]।। इसका कारण यह है कि एक XSS पेलोड बस XMLHttpRequest [...] का उपयोग करके साइट पर किसी भी पृष्ठ को पढ़ सकता है। यह जरूरी है कि कोई भी XSS कमजोरियां यह सुनिश्चित करने के लिए मौजूद नहीं हैं कि CSRF सुरक्षा को दरकिनार नहीं किया जा सकता है। "
Toraritte

जवाबों:


1497

सरल शब्दों में क्रॉस-साइट रिक्वेस्ट फोर्जरी (CSRF)

  • मान लें कि आप वर्तमान में अपने ऑनलाइन बैंकिंग में लॉग इन हैं www.mybank.com
  • मान लें कि धन हस्तांतरण से mybank.com(वैचारिक रूप से) फॉर्म का अनुरोध होगा http://www.mybank.com/transfer?to=<SomeAccountnumber>;amount=<SomeAmount>। (आपका खाता नंबर आवश्यक नहीं है, क्योंकि यह आपके लॉगिन से निहित है।)
  • आप यात्रा करते हैं www.cute-cat-pictures.org, यह नहीं जानते कि यह एक दुर्भावनापूर्ण साइट है।
  • यदि उस साइट का स्वामी उपरोक्त अनुरोध (आसान!) के रूप को जानता है और सही ढंग से अनुमान लगाता है कि आप लॉग इन हैं mybank.com(कुछ भाग्य की आवश्यकता है!), तो वे अपने पेज पर अनुरोध शामिल कर सकते हैं जैसे http://www.mybank.com/transfer?to=123456;amount=10000( 123456उनके केमैन आइलैंड्स खाते की संख्या कहां है) और 10000एक राशि है जिसे आपने पहले सोचा था कि आपके पास खुशी थी)।
  • आपने उस www.cute-cat-pictures.orgपृष्ठ को पुनः प्राप्त कर लिया है , इसलिए आपका ब्राउज़र वह अनुरोध कर देगा।
  • आपका बैंक अनुरोध के इस मूल को नहीं पहचान सकता है: आपका वेब ब्राउज़र आपके www.mybank.comकुकी के साथ अनुरोध भेजेगा और यह पूरी तरह से वैध लगेगा। वहाँ तुम्हारा पैसा जाता है!

यह CSRF टोकन के बिना दुनिया है ।

अब CSRF टोकन के साथ बेहतर के लिए :

  • स्थानांतरण अनुरोध को तीसरे तर्क के साथ बढ़ाया गया है http://www.mybank.com/transfer?to=123456;amount=10000;token=31415926535897932384626433832795028841971:।
  • यह टोकन एक विशाल, असंभव-से-यादृच्छिक रैंडम संख्या है जो कि आपके mybank.comस्वयं के वेब पेज पर शामिल होगी जब वे इसे आपको प्रदान करेंगे। यह हर बार अलग होता है कि वे किसी भी पेज को किसी को भी परोसते हैं।
  • हमलावर टोकन का अनुमान लगाने में सक्षम नहीं है, आपके वेब ब्राउज़र को इसे आत्मसमर्पण करने के लिए मनाने में सक्षम नहीं है (यदि ब्राउज़र सही तरीके से काम करता है ...), और इसलिए हमलावर एक वैध अनुरोध नहीं बना पाएगा, क्योंकि अनुरोधों के साथ गलत टोकन (या टोकन नहीं) द्वारा मना कर दिया जाएगा www.mybank.com

परिणाम: आप अपनी 10000मौद्रिक इकाइयाँ रखते हैं। मेरा सुझाव है कि आप इसमें से कुछ विकिपीडिया को दान करें।

(आपकी माइलेज भिन्न हो सकती है।)

पढ़ने लायक टिप्पणी से EDIT:

यह ध्यान देने योग्य होगा कि HTTP एक्सेस कंट्रोल के कारण स्क्रिप्ट www.cute-cat-pictures.orgआमतौर पर आपके एंटी-सीएसआरएफ टोकन तक नहीं पहुंच पाती है www.mybank.com। यह नोट कुछ लोगों के लिए महत्वपूर्ण है जो अनुचित रूप से Access-Control-Allow-Origin: *हर वेबसाइट की प्रतिक्रिया के लिए हेडर भेजते हैं, बिना यह जाने कि यह किस लिए है, क्योंकि वे किसी अन्य वेबसाइट से एपीआई का उपयोग नहीं कर सकते हैं।


36
और स्पष्ट रूप से टोकन को आदर्श रूप से एंटी -सीएसआरएफ टोकन का नाम दिया जाएगा , लेकिन नाम संभवतः उतना ही जटिल है जितना कि यह है।
लुत्ज प्रेचल

3
@LutzPrechelt धन्यवाद। जावास्क्रिप्ट ब्राउज़र से कोई प्रामाणिकता टोकन प्राप्त करने में सक्षम क्यों नहीं हो सकता है?
BKSpurgeon

72
यह ध्यान देने योग्य होगा कि HTTP एक्सेस कंट्रोल के कारण स्क्रिप्ट www.cute-cat-pictures.orgआमतौर पर आपके एंटी-सीएसआरएफ टोकन तक नहीं पहुंच पाती है www.mybank.com। यह नोट कुछ लोगों के लिए महत्वपूर्ण है जो अनुचित रूप से Access-Control-Allow-Origin: *हर वेबसाइट की प्रतिक्रिया के लिए हेडर भेजते हैं, बिना यह जाने कि यह किस लिए है, क्योंकि वे किसी अन्य वेबसाइट से एपीआई का उपयोग नहीं कर सकते हैं।
SOFe

9
@AugustinRiedinger यदि हमलावर अपने कंप्यूटर पर वेबपेज खोलता है - क्योंकि उनके पास उपयोगकर्ता में लॉग इन की कुकी नहीं है - तो उन्हें संबंधित सीएसआरएफ टोकन प्राप्त नहीं होगा (प्रत्येक सीएसआरएफ टोकन केवल विशिष्ट उपयोगकर्ता सत्र के लिए मान्य होना चाहिए)। यदि हमलावर उपयोगकर्ता के कंप्यूटर पर टोकन युक्त वेबपृष्ठ को लोड करने का प्रयास करता है, तो प्यारा-बिल्ली-चित्र वाली वेबसाइट में रखी गई स्क्रिप्ट के साथ, ब्राउज़र उसे www.mybank.com (और टोकन) पढ़ने से रोक देगा क्योंकि एक ही मूल नीति।
मार्सेल

13
@LutzPrechelt मुझे लगता है कि यह पर्याप्त नहीं है कि टोकन हमेशा अलग होता है, इसे एक सत्र के साथ जोड़ा जाना होता है और सर्वर को यह जांचना होता है कि यह प्राप्त टोकन एक सत्र के लिए उत्पन्न किया गया था जिसे सर्वर प्राप्त कुकी द्वारा पहचानता है। अन्यथा, हैकर सिर्फ mybank को स्वयं देख सकता है और कुछ वैध टोकन प्राप्त कर सकता है। इसलिए यदि आप हर फॉर्म के साथ एक नया टोकन इस्तेमाल करते हैं, तो आपको इसे सर्वर पर सेशन के साथ रखा जाना चाहिए। शायद प्रति सत्र एक ही टोकन का उपयोग करना आसान है।
मार्सेल

222

हां, पोस्ट डेटा सुरक्षित है। लेकिन उस डेटा की उत्पत्ति नहीं है। इस तरह से कोई व्यक्ति जेएस के साथ उपयोगकर्ता को आपकी साइट पर लॉग इन करते समय हमला कर सकता है, जबकि हमलावर का वेब पेज ब्राउज़ कर रहा है।

इसे रोकने के लिए, django कुकी में एक यादृच्छिक कुंजी भेजेगा, और डेटा बनाएगा। फिर, जब उपयोगकर्ता POST करते हैं, तो यह जांच करेगा कि क्या दो कुंजी समान हैं। ऐसे मामले में जहां उपयोगकर्ता को बरगलाया जाता है, तीसरी पार्टी की वेबसाइट आपकी साइट की कुकीज़ प्राप्त नहीं कर सकती है, इस प्रकार यह त्रुटि उत्पन्न करती है।


@DmitryShevchenko हाय, यह समझने की कोशिश कर रहा है कि कुकी का यह तरीका + फॉर्म-इनपुट कैसे सर्वर साइड पर रेफरर को मान्य करने से अलग है? मुझे मिलने वाले सभी उदाहरण उपयोगकर्ता को अपनी साइट से वास्तविक साइट पर पोस्ट करने के लिए धोखा देने वाले हैकर से संबंधित हैं।
ईथन

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

4
रेफरल बदलना आसान है, मैं यह नहीं कहूंगा कि यह एक विश्वसनीय जानकारी है। CSRF टोकन, हालांकि, सर्वर गुप्त कुंजी का उपयोग करके उत्पन्न होता है और आमतौर पर उपयोगकर्ता के लिए बंधा होता है
दिमित्री शेवचेंको

1
मैं वास्तव में नहीं समझता कि यह सुरक्षा के लिए खतरा क्यों है। उपयोगकर्ता को किसी अन्य साइट में लॉग इन किया जाएगा ... लेकिन मूल साइट के पास उस जानकारी को पुनः प्राप्त करने का कोई तरीका नहीं होगा। सही?
आकिल फर्नांडिस

6
ठीक है, मान लीजिए कि मैं Facebook.com में " bank.com/transfer?from=x&to=y " का एक दुर्भावनापूर्ण iframe कहता हूं, Facebook.com। यदि आप bank.com के ग्राहक हैं और आप Facebook पर जाते हैं, तो वह iframe आपके कूकीज़ (क्योंकि ब्राउज़र उन्हें एक ज्ञात डोमेन पर भेज देगा) के साथ बैंक पेज लोड करेगा और धन हस्तांतरण करेगा। बिना कुछ जाने।
दिमित्री शेवचेंको

74

जब यह प्रपत्र पृष्ठ बनाता है तो साइट एक अद्वितीय टोकन उत्पन्न करती है। यह टोकन सर्वर पर डेटा वापस पोस्ट / प्राप्त करने के लिए आवश्यक है।

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


9
क्या कोई उपयोगकर्ता स्रोत के भीतर टोकन आउटपुट को ले सकता है, उन्हें भेजे गए कुकी को हड़प सकता है और फिर एक 3 पार्टी साइट सबमिट से?
जैक मार्शेट्टी

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

3
मेरे पास @JackMarchetti जैसा ही प्रश्न है, जो स्पष्ट नहीं है - यदि CSRF टोकन प्रत्येक लॉगिन पर बदलता है। यदि यह समान रहता है, तो हमलावर को पहले लॉग इन करने, अनुरोध टोकन को हथियाने और फिर हमले में उस टोकन को डालने से क्या रोका जाएगा?
पॉल प्रीबिस्क

7
@PaPPreibisch इसे प्रत्येक पृष्ठ लोड पर बदलना चाहिए - प्रत्येक लॉगिन पर नहीं। इस तरह से हमलावर को पेज सबमिट करने के लिए हर बार अनुरोध करना होगा। इसे और अधिक कठिन बनाता है।
tkone

8
@tkone, यह वास्तव में इसे और अधिक कठिन नहीं बनाता है। अगर बस प्रयास और समय की मात्रा दोगुनी हो जाए। यह किसी भी प्रकार के निषेधात्मक प्रसंस्करण को नहीं जोड़ता है। चाल CSRF टोकन को एक डोमेन-विशिष्ट कुकी के साथ जोड़ रही है, और इस कुकी को फ़ॉर्म के साथ भेज रही है। कुकी और फ़ॉर्म पोस्ट डेटा दोनों को POST अनुरोध पर सर्वर को भेजना होगा। इस तरह एक कुकी-हाइजैकिंग हमले की आवश्यकता होगी जो एक वैध अनुरोध का अनुकरण करने में सक्षम हो।
पेड्रो कॉर्डियारो

55

क्लाउड अंडर ब्लॉग में CSRF टोकन की अच्छी व्याख्या है।

कल्पना कीजिए कि आपके पास एक वेबसाइट थी, जो एक सरलीकृत ट्विटर की तरह थी, जिसे एक.com पर होस्ट किया गया था। उपयोगकर्ताओं में हस्ताक्षर किए गए कुछ पाठ (एक ट्वीट) को एक फॉर्म में दर्ज कर सकते हैं जो सर्वर पर एक पोस्ट अनुरोध के रूप में भेजा जा रहा है और सबमिट बटन पर हिट होने पर प्रकाशित होता है। सर्वर पर उपयोगकर्ता को उनके अद्वितीय सत्र आईडी वाले कुकी द्वारा पहचाना जाता है, इसलिए आपका सर्वर जानता है कि ट्वीट किसने पोस्ट किया है।

फार्म उतना ही सरल हो सकता है:

 <form action="http://a.com/tweet" method="POST">
   <input type="text" name="tweet">
   <input type="submit">
 </form> 

अब कल्पना कीजिए, एक बुरा आदमी अपनी दुर्भावनापूर्ण वेबसाइट पर इस फॉर्म को कॉपी और पेस्ट करता है, आइए b.com कहते हैं। पर्चा अभी भी काम करेगा। जब तक किसी उपयोगकर्ता को आपके ट्विटर पर साइन इन किया जाता है (यानी उन्हें a.com के लिए एक वैध सत्र कुकी मिल जाती है), तब तक POST अनुरोध भेजा http://a.com/tweetऔर संसाधित किया जाएगा जब उपयोगकर्ता सबमिट बटन पर क्लिक करता है।

अब तक यह एक बड़ा मुद्दा नहीं है जब तक कि उपयोगकर्ता को इस बारे में अवगत कराया जाता है कि फॉर्म वास्तव में क्या करता है, लेकिन क्या होगा यदि हमारा बुरा आदमी इस तरह से फॉर्म को ट्विस्ट करता है:

 <form action="https://example.com/tweet" method="POST">
   <input type="hidden" name="tweet" value="Buy great products at http://b.com/#iambad">
   <input type="submit" value="Click to win!">
 </form> 

अब, यदि आपका कोई उपयोगकर्ता बुरे आदमी की वेबसाइट पर समाप्त होता है और "जीतने के लिए क्लिक करें" हिट करता है! बटन, प्रपत्र आपकी वेबसाइट पर प्रस्तुत किया जाता है, उपयोगकर्ता कुकी में सत्र आईडी द्वारा सही ढंग से पहचाना जाता है और छिपा हुआ ट्वीट प्रकाशित हो जाता है।

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

एक फॉर्म आसानी से हर जगह से हर जगह जमा किया जा सकता है। आम तौर पर यह एक सामान्य विशेषता है, लेकिन कई और मामले हैं जहां यह महत्वपूर्ण है कि केवल उस फॉर्म को डोमेन से सबमिट किया जाए जहां वह है।

यदि आपका वेब एप्लिकेशन POST और GET अनुरोधों (जैसे PHP में $ _POST के बजाय $ _REQUEST का उपयोग करके) के बीच अंतर नहीं करता है, तो हालात और भी बदतर हैं। ऐसा मत करो! <img src="http://a.com/tweet?tweet=This+is+really+bad">दुर्भावनापूर्ण वेबसाइट या यहां तक ​​कि ईमेल में एम्बेड किए गए डेटा परिवर्तन अनुरोधों को जितना आसान हो सके प्रस्तुत किया जा सकता है ।

मैं यह कैसे सुनिश्चित कर सकता हूं कि कोई फॉर्म केवल मेरी अपनी वेबसाइट से सबमिट किया जा सकता है? यह वह जगह है जहाँ CSRF टोकन आता है। CSRF टोकन एक यादृच्छिक, कठोर-से-अनुमानित स्ट्रिंग है। आपके द्वारा सुरक्षित किए जाने वाले फ़ॉर्म वाले पृष्ठ पर, सर्वर एक यादृच्छिक स्ट्रिंग, CSRF टोकन उत्पन्न करेगा, इसे एक छिपे हुए फ़ील्ड के रूप में जोड़ें और इसे किसी तरह याद भी रखें, या तो इसे सत्र में संग्रहीत करके या कुकी सेट करके मान युक्त। अब फॉर्म इस तरह दिखेगा:

    <form action="https://example.com/tweet" method="POST">
      <input type="hidden" name="csrf-token" value="nc98P987bcpncYhoadjoiydc9ajDlcn">
      <input type="text" name="tweet">
      <input type="submit">
    </form> 

जब उपयोगकर्ता प्रपत्र सबमिट करता है, तो सर्वर को केवल सर्वर द्वारा याद किए गए CSRF टोकन के साथ पोस्ट किए गए फ़ील्ड csrf-token (नाम से कोई फर्क नहीं पड़ता) के मूल्य की तुलना करनी होती है। यदि दोनों स्ट्रिंग्स समान हैं, तो सर्वर प्रपत्र को संसाधित करना जारी रख सकता है। अन्यथा सर्वर को तुरंत फॉर्म को संसाधित करना बंद कर देना चाहिए और एक त्रुटि के साथ जवाब देना चाहिए।

यह काम क्यों करता है? ऊपर हमारे उदाहरण से खराब आदमी CSRF टोकन प्राप्त करने में असमर्थ होने के कई कारण हैं:

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

क्योंकि बुरे आदमी का दुर्भावनापूर्ण पृष्ठ आपके उपयोगकर्ता के ब्राउज़र द्वारा किसी भिन्न डोमेन (a.com के बजाय b.com) से लोड किया गया है, बुरे व्यक्ति के पास जावास्क्रिप्ट कोड करने का कोई मौका नहीं है, जिससे सामग्री लोड होती है और इसलिए हमारे उपयोगकर्ता के वर्तमान CSRF टोकन से आपका वेबसाइट। ऐसा इसलिए है क्योंकि वेब ब्राउज़र डिफ़ॉल्ट रूप से क्रॉस-डोमेन AJAX अनुरोधों की अनुमति नहीं देते हैं।

खराब आदमी आपके सर्वर द्वारा कुकी सेट तक पहुंचने में असमर्थ है, क्योंकि डोमेन मेल नहीं खाते।

मुझे क्रॉस-साइट अनुरोध जालसाजी के खिलाफ कब रक्षा करनी चाहिए? यदि आप यह सुनिश्चित कर सकते हैं कि आप ऊपर वर्णित के रूप में GET, POST और अन्य अनुरोध विधियों को नहीं मिलाते हैं, तो डिफ़ॉल्ट रूप से सभी POST अनुरोधों की सुरक्षा के लिए एक अच्छी शुरुआत होगी।

आपको PUT और DELETE अनुरोधों की रक्षा करने की आवश्यकता नहीं है, क्योंकि जैसा कि ऊपर बताया गया है, उन तरीकों का उपयोग करके ब्राउज़र द्वारा एक मानक HTML फॉर्म जमा नहीं किया जा सकता है।

दूसरी ओर जावास्क्रिप्ट वास्तव में अन्य प्रकार के अनुरोध कर सकती है, जैसे jQuery के $ .ajax () फ़ंक्शन का उपयोग करना, लेकिन याद रखें, AJAX के अनुरोधों के लिए डोमेन से मेल खाना चाहिए (जब तक आप स्पष्ट रूप से अपने वेब सर्वर को अन्यथा कॉन्फ़िगर नहीं करते हैं) ।

इसका मतलब है, अक्सर आपको AJAX अनुरोधों में CSRF टोकन जोड़ने की आवश्यकता नहीं होती है, भले ही वे POST अनुरोध हों, लेकिन आपको यह सुनिश्चित करना होगा कि आप अपने वेब अनुप्रयोग में केवल CSRF चेक को बायपास करें यदि POST अनुरोध वास्तव में है AJAX का अनुरोध। आप एक्स-रिक्वेस्टेड-विथ हेडर की उपस्थिति की तलाश कर सकते हैं, जिसमें AJAX के अनुरोध आमतौर पर शामिल होते हैं। आप एक अन्य कस्टम हेडर भी सेट कर सकते हैं और सर्वर साइड पर इसकी उपस्थिति के लिए जाँच कर सकते हैं। यह सुरक्षित है, क्योंकि एक ब्राउज़र नियमित HTML फॉर्म सबमिशन (ऊपर देखें) में कस्टम हेडर नहीं जोड़ेगा, इसलिए श्री बैड गाइ के लिए इस व्यवहार को एक फॉर्म के साथ अनुकरण करने का कोई मौका नहीं है।

यदि आप AJAX अनुरोधों के बारे में संदेह में हैं, क्योंकि किसी कारण से आप X-Requested-With जैसे शीर्ष लेख के लिए जाँच नहीं कर सकते हैं, तो बस अपने CSRF उत्पन्न किए गए CSRF को अपने जावास्क्रिप्ट में पास करें और AJAX अनुरोध में टोकन जोड़ें। इसे करने के कई तरीके हैं; या तो इसे नियमित रूप से HTML फॉर्म की तरह पेलोड में जोड़ें, या AJAX अनुरोध में एक कस्टम हेडर जोड़ें। जब तक आपका सर्वर जानता है कि आने वाले अनुरोध में उसे कहां देखना है और वह इसे उस मूल मूल्य से तुलना करने में सक्षम है जिसे वह सत्र या कुकी से याद करता है, तो आप क्रमबद्ध हैं।


विस्तृत जानकारी के लिए धन्यवाद। पोस्ट अनुरोध के दौरान, साइट को सर्वर में सीएसआरएफ टोकन भेजना होता है, इसलिए क्लाइंट इस सीएसआरएफ टोकन को सर्वर पर कब भेजेगा? क्या यह प्रीफ़्लाइट विकल्प अनुरोध करते समय है? कृपया इस भाग पर ध्यान दें ..
Sm श्रीकांत

@Dan कैसे आ सकता है b.com किसी अन्य साइट के कुकीज़ तक पहुँच सकता है?
ज़ाकिर

8

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


7
रेफर हेडर पर भरोसा न करें, इसे आसानी से फेक किया जा सकता है।
काग

3
यह सही जवाब है! टोकन को सर्वर पर एक सत्र से जोड़ा जाना चाहिए। कुकी + फॉर्म डेटा की तुलना करना, जो सबसे अधिक वोट किए गए उत्तर का सुझाव देता है, पूरी तरह से गलत है। ये घटक अनुरोध का हिस्सा बनते हैं, जिसे ग्राहक बनाता है।
ली डेविस

3
दरअसल नहीं। टोकन प्रत्येक सर्वर के लिए आवश्यक होना चाहिए। यदि आप इसे केवल सत्र के लिए टाई करते हैं, तो आप सत्र के टोकन को चुराने वाले किसी व्यक्ति के जोखिम को चलाते हैं और उस टोकन के साथ एक अनुरोध सबमिट करते हैं। इसलिए अधिकतम सुरक्षा के लिए टोकन को प्रत्येक http अपेक्षित के साथ बांधा जाना चाहिए।
क्रिसल08
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.