2008-12-15 10 views
8

इस तथ्य के अलावा कि $_REQUEST कुकीज से पढ़ता है, क्या $_REQUEST के बजाय मुझे $_GET और $_POST का उपयोग करने का कोई कारण है? ऐसा करने के लिए सैद्धांतिक और व्यावहारिक कारण क्या हैं?

उत्तर

8

मैं $ _REQUEST का उपयोग करता हूं जब मैं बस कुछ डेटा वापस करने के लिए उपयोगकर्ता से कुछ डेटा चाहता हूं।

अनुरोध के साइड इफेक्ट्स होने पर $ _REQUEST का कभी भी उपयोग न करें। साइड इफेक्ट्स उत्पन्न करने वाले अनुरोध POST (अर्थात् कारणों से, और मूलभूत सीएसआरएफ सामानों के कारण भी होना चाहिए, एक झूठी आईएमजी टैग उपयोगकर्ता के बिना किसी भी जीईटी एंडपॉइंट को मार सकता है)।

$ _GET का उपयोग तब किया जाना चाहिए जब किसी पृष्ठ पर GETING या POSTING अलग-अलग परिणाम देगा।

+4

बधाई हो, आपको अभी अपना पहला स्वीकार्य उत्तर मिला है :) stackoverflow.com में आपका स्वागत है! – Tom

4

$ _REQUEST का उपयोग आपके आवेदन में कुछ हमले वैक्टर खोलता है जहां चर को ओवरराइट किया जा सकता है जहां आप ऐसा नहीं करना चाहते हैं।

ऑर्डर जीपीसी (प्राप्त करें, पोस्ट, कुकी) पर भी विचार करें जिस पर $ _REQUEST भर जाएगा।

के साथ एक अनुरोध यानी

:

$_GET['foo'] = 'bar' 
$_POST['foo'] = 'baz' 

$_REQUEST['foo'] == 'bar'

+0

ध्यान दें कि आप अनुरोध चर बदल सकते हैं, यदि आप php.ini – gnud

+1

को नियंत्रित करते हैं, तो क्या यह सिर्फ मुझे है या POST आपके उदाहरण में प्राप्त करने के बाद आएगा, इस प्रकार चर की सामग्री ओवरराइट की जा रही है? यकीन नहीं है, यही कारण है कि मैं पूछ रहा हूँ ... – Franz

5

आप पहले से ही जवाब में से एक दे दी है में परिणाम होगा, तो मैं एक और दे देंगे:

यह एक स्टाइलिस्ट पसंद के अधिक। उदाहरण के लिए, आप आमतौर पर ऐसी जानकारी नहीं चाहते हैं जो सर्वर पर स्थिति को कैश करने योग्य हो, इसलिए आप इसे $_POST चरों तक सीमित करना चाहते हैं।

+0

उत्कृष्ट जवाब! मुझे इनमें से अधिक देखने की उम्मीद है। – Tom

2

$ _REQUEST की अक्सर उल्लिखित असुरक्षा फर्जी है। ये सभी उपयोगकर्ता से डेटा प्राप्त करने के तरीके हैं, जिनमें एक गैर-सुरक्षित मशीन है। आपको हमेशा इनपुट को स्वच्छ करना होगा, इसलिए किसी एक का उपयोग करने से कोई वास्तविक सुरक्षा लाभ नहीं है।

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

+0

बहुत सच है, लोग चिल्लाते हैं कि अनुरोध कुछ बड़ा सुरक्षा छेद है, लेकिन यहां तक ​​कि जीईटी और पोस्ट भी उतना ही असुरक्षित हैं, उनमें शरारती बिट्स को इंजेक्ट करना आसान है, आपको हमेशा अपने डेटा से आने वाली सामग्री को सभी डेटा को स्वच्छ करने की आवश्यकता है । – TravisO

8

तथ्य यह है कि $ _REQUEST कुकीज़

तथ्य यह है कि इस अपरिभाषित है (यह एक प्रति-स्थापना स्तर पर विन्यास है) इसके अलावा से पढ़ता है इसके अलावा, $_REQUEST का उपयोग कर समस्या यह है कि बातों पर-सरल करता है । जीईटी अनुरोध और एक पोस्ट अनुरोध के बीच एक अर्थपूर्ण अंतर है (या होना चाहिए)। इस प्रकार यदि आप एक स्रोत या दूसरे से इनपुट प्राप्त करते हैं तो यह आपके आवेदन पर महत्वपूर्ण होना चाहिए। इस प्रकार HTTP प्रोटोकॉल को परिभाषित किया गया है, इसलिए इसे अनदेखा करके, आप प्रोटोकॉल को कमजोर कर रहे हैं, जो आपके एप्लिकेशन को कम अंतःक्रियाशील बनाता है। यह वही प्रकार का तर्क है जिसे प्रस्तुति उन्मुख मार्कअप के बजाय अर्थपूर्ण HTML मार्कअप का उपयोग करने के लिए बनाया जा सकता है। या अधिक आम तौर पर, कंक्रीट की स्थिति में जो भी काम करता है, उसके बजाए प्रोटोकॉल के इरादे के बाद।

2

HTTP जीईटी का अर्थ है कि एक पृष्ठ लाने के लिए उपयोग किया जाना चाहिए, जबकि पोस्ट का तर्क दिया जा सकता है कि जब उपयोग किया जाता है, तो आप उम्मीद करेंगे कि किसी प्रकार का राज्य बदल जाएगा।

उदाहरण के लिए, एक उम्मीद है कि एक ही पैरामीटर के साथ जीईटी का उपयोग करके पीओएसटी का उपयोग करते समय कई बार समान परिणाम मिलते हैं, वे नहीं कर सकते हैं।

जब आप समस्याओं का सामना करना चाहते हैं तो POST का उपयोग नहीं कर रहे हैं। मुझे लगता है कि रेल पर रूबी AJAX पुस्तकालयों ने POST के बजाय GET का उपयोग किया, और वेब मकड़ियों द्वारा स्पर्श किए जाने पर बहुत से डेटा खोने का कारण बन गया।

इसलिए, आपको शायद $ _REQUEST का उपयोग करने से बचना चाहिए। आपको पृष्ठ के उद्देश्यों के बारे में पता होना चाहिए, और जीईटी अनुरोध का उत्तर कैसे देना है, और POST अनुरोध का उत्तर कैसे देना है, इस बारे में निर्णय लेना चाहिए।

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