2010-10-26 14 views
5

मैं Post-Redirect-Get pattern इस तरह के साथ एक ही पृष्ठ पर पोस्ट करें डेटा भेजने के बारे में एक सवाल पर एक प्रतिक्रिया कल था:PHP सुरक्षा: उसी URL पर खराब भेजें = खराब?

if (isset($_POST['Submit'])) { 
    // prevent resending data 
    header("Location: " . $_SERVER['PHP_SELF']); 
} 

किसी ने जवाब दिया: sending data to same PHP page from Javascript, no AJAX or forms

यह वेब के प्रयोजनों के लिए अत्यंत महत्वपूर्ण है सुरक्षा कि एक पोस्ट एक साधारण यूआरएल के माध्यम से नहीं भेजा जा सकता है।

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

+1

मुझे यकीन नहीं है कि मैं समझता हूं कि व्यक्ति का क्या अर्थ है जब वे कहते हैं कि POST के लिए यह महत्वपूर्ण है कि "सरल" यूआरएल के माध्यम से भेजा न जाए। –

+0

यहां लिंक है: http://stackoverflow.com/questions/4016968/sending-data-to-same-php-page-from-javascript-no-ajax-or-forms व्यक्ति की 26K प्रतिष्ठा है। – FFish

+0

एसओ पर प्रतिष्ठा का मतलब यह नहीं है कि * * * बहुत ... (25K इस लेखन के रूप में);) – deceze

उत्तर

6

यह वेब सुरक्षा के प्रयोजनों है कि एक पोस्ट एक सरल यूआरएल द्वारा नहीं भेजा जा सकता लिए अत्यंत महत्वपूर्ण है।

मुझे लगता है कि जिस व्यक्ति ने यह कहा है वह आपको या वेब सुरक्षा को गलत समझा सकता है।

अलग अनुरोध तरीकों (GET, POST, PUT, DELETE, HEAD आदि) के लिए एक ही URL का उपयोग कर के साथ गलत कुछ भी नहीं है। वास्तव में, यह एक बहुत अच्छा विचार है।

+0

मैंने लिंक – FFish

+4

+1 जोड़ा ... असल में, यह है कि कैसे काम करना चाहिए। – deceze

0

ऐसा लगता है कि प्रतिलिपि ने अपनी प्रतिक्रिया को नहीं सोचा था। मुझे लगता है कि वह सोच रहा था कि $ _SERVER ["PHP_SELF"] का उपयोग करके कुछ सुरक्षा समस्याएं होंगी, लेकिन मैं नहीं देख सकता कि इस मामले में कैसे।

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

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

1

वेब सुरक्षा के प्रयोजनों के लिए यह बेहद महत्वपूर्ण है कि एक पोस्ट को एक साधारण यूआरएल के माध्यम से नहीं भेजा जा सकता है।

मैं इस वाक्य की व्याख्या करता हूं कि यह संभव नहीं होना चाहिए कि एक ही यूआरएल पर एक जीईटी अनुरोध POST अनुरोध के समान नहीं होता है। इसलिए की जांच करने के बजाय $_POST['submit'] या $_SERVER['REQUEST_METHOD'] की जांच करने के बजाय उल्लंघन हो सकता है।

शायद लेखक का यह भी अर्थ था कि फ़ॉर्म कुछ बार प्रमाणीकरण टोकन का उपयोग करता है ताकि केवल प्रमाणीकृत अनुरोधों की अनुमति हो।

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