2016-02-22 11 views
6

कल्पना करें कि एक खिलौना PHP एप्लिकेशन पूर्ण स्थानीय फ़ाइल समावेशन के लिए कमजोर है, उदा।क्यों शामिल है ('php: // input') काम नहीं करता है?

<?php include($_GET['action']); 

मैं इसे का फायदा उठाने के लिए निम्न अनुरोध करने की कोशिश की:

POST /?action=php://input HTTP/1.1 
Host: XXXXXXXXXXXXXXXXX 
Content-Length: 3 

foo 

यह प्रभावी ढंग से कार्यान्वित अनुरोध शरीर foo साथ include('php://input');, तो मैं यह foo मुद्रित करने के लिए उम्मीद करेंगे। हालांकि, मुझे निम्न त्रुटि

<br /> 
<b>Warning</b>: include(php://input): failed to open stream: operation failed in <b>XXXXXXXXXXXXXXXXX</b> on line <b>12</b><br /> 
<br /> 
<b>Warning</b>: include(): Failed opening 'php://input' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in <b>XXXXXXXXXXXXXXXXXXX</b> on line <b>12</b><br /> 

यहां समस्या क्या है? क्या यह एक PHP सुरक्षा सुविधा है? यदि हां, तो क्या कोई PHP स्रोत कोड के जिम्मेदार हिस्से को इंगित कर सकता है जो इसे कम करता है?

+0

के बारे में क्या कस्टम धाराओं? 'Stream_wrapper_register' और वह जैज़ का उपयोग करना? – Halcyon

+2

अपनी कॉन्फ़िगरेशन में इस विकल्प का मान देखें http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek

+0

@ हेलिसन मैं सुन रहा हूं। यदि आपके पास फ़ाइल-लेखन आदिम (जैसे 'session_start()' या एप्लिकेशन-विशिष्ट लॉगिंग इत्यादि) –

उत्तर

2

मुझे Gustek की मदद से उत्तर मिला। जाहिर है php://input, allow_url_include की restrction के अंतर्गत आता है, जबकि उदाहरण के लिए php://filter नहीं करता है: php: // इनपुट, php:

द्वारा allow_url_include प्रतिबंधित // stdin, php: // स्मृति और php: // अस्थायी केवल ।

स्रोत: Docs for php:// URL handler

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