2008-09-19 11 views
9

इस कोड को ले लो:पीएचपी: Get-डेटा स्वचालित रूप से चर के रूप में घोषित किया गया

<?php 
if (isset($_POST['action']) && !empty($_POST['action'])) { 
    $action = $_POST['action']; 
} 

if ($action) { 
    echo $action; 
} 
else { 
    echo 'No variable'; 
} 
?> 

और फिर कार्रवाई के साथ फ़ाइल का उपयोग = परीक्षण वहाँ स्वचालित रूप से प्राप्त द्वारा घोषित किए जाने से $ कार्रवाई को रोकने का कोई तरीका है ? पाठ्यक्रम के अलावा

&& !isset($_GET['action']) 

मैं चर के लिए चर घोषित क्यों करना चाहूंगा?

उत्तर

27

register_globals सेटिंग के लिए अपनी php.ini देखें। यह शायद चालू है, आप इसे बंद करना चाहते हैं।

मैं चर के लिए चर घोषित क्यों करना चाहूंगा?

You don't. यह एक भयानक सुरक्षा जोखिम है। यह पर्यावरण, GET, POST, कुकी और सर्वर चर वैश्विक बनाता है (PHP manual)। ये PHP में reserved variables का मुट्ठी भर हैं।

+0

उत्तर के लिए धन्यवाद, यह वही है जो मैं खोज रहा हूं। लेकिन क्या मेरा उदाहरण एकमात्र चीज रजिस्टर_ग्लोबल्स प्रभावित करती है? – Eikern

+0

मैंने ऊपर दिए गए उत्तर में थोड़ा और पोस्ट किया - यह पर्यावरण, प्राप्त, पोस्ट, कुकी और सर्वर को प्रभावित करता है। – owenmarshall

4

आपके php.ini में register_globals जैसा अपराधी है। आपको इसे बंद करना चाहिए। यह भी एक बड़ा सुरक्षा जोखिम है इसे चालू करने के लिए।

यदि आप साझा होस्टिंग पर हैं और php.ini को संशोधित नहीं कर सकते हैं, तो आप register_globals बंद करने के लिए ini_set() का उपयोग कर सकते हैं।

1

आप

error_reporting = E_ALL 

आपका कोड स्निपेट के लिए अब परीक्षण कर सकते हैं php.ini में पीएचपी लॉग-स्तर बदल कर कि क्या सभी चर ठीक से घोषित किया गया है एक नोटिस उत्पन्न करनी चाहिए।

1

PHP के इतिहास में किसी बिंदु पर उन्होंने डिफ़ॉल्ट रूप से register_globals को बंद करने का विवादास्पद निर्णय लिया क्योंकि यह एक बड़ी सुरक्षा खतरे थी। यह किसी को आपके कोड में चर इंजेक्ट करने की क्षमता देता है, अचूक परिणाम बना देता है! यह "फीचर" भी php6

में हटा दिया गया है यदि आप देखते हैं कि यह आपके व्यवस्थापक से संपर्क करने के लिए संपर्क में है।

2

आप php.ini, php स्क्रिप्ट के साथ काम नहीं करेगा (चर पहले से ही घोषित कर रहे हैं) एक .htacces रों में एक ini_set('register_globals', false) के लिए उपयोग नहीं है, तो:

php_flag register_globals Off 

कभी-कभी मदद कर सकता है।

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