2009-10-09 9 views
10

मैं एक वेब फार्म है और मैं PHP का उपयोग कर रहा हूँ। मुझे पता है कि रूपों का उपयोग किया जा सकता है (मुझे विश्वास है कि इसे रीप्ले हमले या मैन-इन-द-बीच हमले कहा जाता है)। तो मैं एक छिपे हुए क्षेत्र के रूप में कुछ प्रामाणिकता टोकन का उपयोग करना चाहता हूं।कैसे को रोकने के लिए प्रपत्र पुनरावृत्ति/मैन-इन-द-मिडल पीएचपी, CSRF में हमला, XSRF

खतरा संभावनाओं है कि मैं के बारे में पता कर रहा हूँ कर रहे हैं:

  • हमलावर वैध उपयोगकर्ता के रूप hijacks
  • वैध उपयोगकर्ता खुद को है (यह मेरा मानना ​​है कि मैन-इन-द-मिडल हमला है) हमलावर: वह, प्रपत्र हो जाता है टोकन पढ़ता है लेकिन खतरनाक डेटा भेजने के लिए इसे इस्तेमाल करता है

इससे पहले कि मैं सवाल पर आते हैं, तो कृपया मुझे सही कर अगर कुछ भी मैं अब तक है कहा (यह मेरा मानना ​​है कि पुनरावृत्ति हमला है) गलत, क्योंकि शायद मेरी समझ त्रुटिपूर्ण है।

अब सवाल:

  • क्या सबसे अच्छा अभ्यास इस टोकन उत्पन्न करने के लिए इतना है कि यह बिना प्रपत्र को अस्वीकार कर दिया जाता है (उदाहरण के लिए, नमक मिलाना?)।
  • यह सुनिश्चित करने के लिए लोग क्या करते हैं कि टोकन को फिर से नहीं चलाया जा रहा है। टिप्पणी के आधार पर

नए छोटे सवाल:

  • सत्र अपहरण मैन-इन-मध्यम हमले के रूप में ही है?
+0

किसी कारण से मैं सोच रहा हूं कि आप इस प्रक्रिया को अधिक जटिल बना रहे हैं। डेटा सत्यापन पर्याप्त क्यों नहीं होगा? क्या आप अपहृत फॉर्म डेटा से चिंतित हैं कि कोई सबमिट करेगा? और यह बदल गया है? या लॉगिन प्रकार के रूप? (जिसे मैन-इन-द-मिडल-हमले को खत्म करने के लिए एसएसएल पर किया जा सकता है)। – Jakub

+0

शायद मैं इसे अधिक जटिल कर रहा हूं, मुझे नहीं पता। जब मैं इसके बारे में पढ़ रहा था तो यह बहुत जटिल और जटिल था। लेकिन प्रश्न 1 अभी भी मान्य है क्योंकि मुझे नहीं पता कि टोकन उत्पन्न करने का सबसे अच्छा अभ्यास क्या है :) प्रश्न 2 (टोकन को फिर से चलाने के बारे में सवाल) वैध है या नहीं, कि मैं भी समझने की उम्मीद कर रहा हूं। – Chris

+0

आप निश्चित रूप से गलत कथन का उपयोग कर रहे हैं। ऐसा लगता है कि आप ज्यादातर डेटा सत्यापन के बारे में बात कर रहे हैं। –

उत्तर

4

आपने शीर्षक में सीएसआरएफ का उल्लेख किया लेकिन वास्तव में इसे कवर नहीं किया आपका प्रश्न।

आप इसे online में विस्तार से पढ़ सकते हैं, लेकिन सीएसआरएफ मूल रूप से एक हमला है जो एक वैध उपयोगकर्ता को अनजाने में साइट पर सबमिट करने देता है। उदाहरण के लिए, यदि एसओ इस तरह के हमलों के खिलाफ सुरक्षा नहीं कर रहा था, तो मैं एक ऐसा फॉर्म तैयार कर सकता हूं जो आपके एसओ प्रोफाइल की जानकारी को बदलता है जब आप मेरे इस बुरे रूप पर क्लिक करते हैं, और कुछ और होने की उम्मीद करते हैं ("एक लाख रुपये जीतें !! यहां क्लिक करे!!")। यह फ़ॉर्म आपकी ब्राउज़र कुकीज़ का उपयोग SO के साथ आपको करने के लिए करेगा और इसे SO में दिखाई देगा कि आप कानूनी रूप से अपनी प्रोफ़ाइल के अपडेट सबमिट कर रहे थे।

इस के खिलाफ की रक्षा करने के लिए, तुम सच में ऐसा करने के लिए चीजों की एक जोड़ी हैं: का उपयोग कर एक उपयोगकर्ता के प्रोफ़ाइल के लिए एक नया स्थिति अद्यतन पोस्ट न करें,

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

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

+0

मैंने केवल शीर्षक में सीएसआरएफ का उल्लेख किया, क्योंकि मुझे लगा कि यह किसी भी तरह से फॉर्म प्रामाणिकता टोकन से संबंधित था, बस यह सुनिश्चित नहीं है कि कैसे। – Chris

+0

यह निश्चित रूप से है - उम्मीद है कि मेरी प्रतिक्रिया कितनी/क्यों के बारे में पर्याप्त स्पष्ट थी। – psychotik

+0

हाँ, अब यह स्पष्ट हो रहा है, उत्तर के लिए धन्यवाद। मैंने इसे – Chris

3

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

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

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

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

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

+2

पर रिकॉर्ड जोड़ें या कुछ शब्दों में: बस SSL का उपयोग करें। –

+3

नहीं, एसएसएल एक्सएसआरएफ हमलों को रोकने के लिए कुछ भी नहीं करता है, इसलिए "बस एसएसएल का उपयोग करें" इसमें शामिल नहीं है। – erickson

+2

यह सत्र अपहरण के खिलाफ सुरक्षा करता है, जो क्रिस की दूसरी चिंता है। एक्सएसआरएफ सिर्फ इतना बड़ा जोखिम नहीं है जब तक आप चीजों को बदलने की इजाजत देकर मनोविज्ञान नियमों का उल्लंघन नहीं करते हैं। –

1

उस टोकन को उत्पन्न करने के लिए, यहां एक ऐसी रणनीति है जिसका मैं उपयोग करता हूं जो अच्छी तरह से काम करता है।

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

[आप सीएसआरएफ के खिलाफ सुरक्षा के लिए कुकीज़ का उपयोग नहीं कर सकते हैं] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_ (CSRF) _Prevention_Cheat_Sheet # Using_a_Secret_Cookie) – Domi

0

CSRF-जादू CSRF टोकन के लिए एक महान वर्ग है, यह स्वतः ही अपने पेज में उन्हें डालता है

से मेल खाता है http://csrf.htmlpurifier.org/

"CSRF-जादू PHP के उत्पादन बफरिंग क्षमताओं का उपयोग करता गतिशील रूपों और अपने दस्तावेज़ में स्क्रिप्ट के पुनर्लेखन के लिए यह भी पोस्ट अनुरोध रोकना और उनके टोकन जाँच (विभिन्न एल्गोरिदम उपयोग किया जाता है जाएगा;। कुछ nonces उत्पन्न करते हैं, कुछ उपयोगकर्ता-विशिष्ट टोकन उत्पन्न)। इसका मतलब है, पारंपरिक डब्ल्यू के लिए फॉर्म के साथ ebsite, आप अपने आवेदन में csrf-magic ड्रॉप कर सकते हैं और इसके बारे में भूल जाओ! "

संबंधित मुद्दे