बहुत अजीब php व्यवहार शामिल हैं ..

I am experiencing some very strange behavior when including a PHP file.
I need to load a script that is not on the same domain as the page that will be calling it.

I have already created a system that works using cURL, but I just recently found out that many of the sites that will need to have access to this script, do not have cURL installed. I did, however, notice that these sites have allow_url_fopen set to on. With this knowledge I got started creating a new system that would let me just include the script on the remote site.

Just testing this out, I coded the script test.php as follows:

<?php 
echo("test");
?>

मैं इस स्क्रिप्ट को दूरस्थ पृष्ठ पर उपयोग कर रहा हूं:

<?php
include("http://mydomain.com/script.php");
?>

and it works no problem and "test" is printed at the top of the page.

However, if I add a function to the script and try to call the function from the page, it crashes.
To make it worse, this site has PHP errors turned off and I have no way of turning it on.

To fully make sure that I didn't just mess up the code, I made my test.php look like this:

<?php
function myfunc()
{
return "abc";
}
?>

फिर फ़ाइल सहित पेज पर:

<?php 
include("http://mydomain.com/script.php");
echo(myfunc());
?>

और यह दुर्घटनाग्रस्त हो जाता है। किसी भी विचार की बहुत प्रशंसा की जाएगी।

0
जोड़ा
विचारों: 1

3 उत्तर

मेरा अनुमान है: mydomain.com के वेब सर्वर द्वारा http://mydomain.com/script.php का PHP व्याख्या किया गया है। आप सभी सहित हैं जो उस स्क्रिप्ट के परिणाम हैं। एक साधारण <�कोड> गूंज ("परीक्षण") के लिए, यह "परीक्षण" है। कार्य किसी भी आउटपुट का उत्पादन नहीं करते हैं और सहित स्क्रिप्ट के लिए उपलब्ध नहीं कराए जाते हैं। बस अपने ब्राउज़र में http://mydomain.com/script.php पर जाकर इसकी पुष्टि करें और देखें कि आपको क्या मिलता है। आपको mydomain.com को वास्तव में PHP फ़ाइल की व्याख्या करने और इसे शुद्ध टेक्स्ट के रूप में लौटने से रोकने की आवश्यकता होगी।

But: this sounds like a bad idea to begin with. Cross-domain includes are an anti-patterns. Not only does it open you up to security problems, it also makes every page load unnecessarily slow. If cross-domain inclusions is the answer, your question is wrong.

0
जोड़ा
संभावित शोषण में शामिल हैं: सबसे पहले, परिभाषा के अनुसार, आप जिस कोड को शामिल कर रहे हैं, वह सार्वजनिक रूप से दिखाई दे रहा है। मुझे नहीं पता कि आप इस तकनीक का उपयोग किस प्रकार कर रहे हैं, लेकिन अक्सर लोग अपने सर्वर पर कुछ फाइलों को "गुप्त" रखने की कोशिश करते हैं, जो इस मामले में सटीक विपरीत प्रभाव डालते हैं। अन्य शोषण: सर्वर के खिलाफ DNS हमले जो mydomain.com पर अनुरोध को पुनर्निर्देशित करता है, आसानी से मनमाने ढंग से कोड इंजेक्शन की इजाजत देता है। या बस mydomain.com सर्वर को पहले स्थान पर अपहरण कर रहा है।
जोड़ा लेखक deceze, स्रोत
अकेले जोड़े गए विलंब से यह व्यवहार्य समाधान नहीं होगा। अन्य विवरण बस अधिक शून्य अंक जोड़ें। और मुझे नहीं पता कि अंतिम फ़ाइल में क्या शामिल किया जाएगा, लेकिन जो भी आप शामिल करना चाहते हैं, उसे स्पष्ट टेक्स्ट में HTTP पर स्थानांतरित करने की आवश्यकता होगी और कोई भी देखने के लिए यूआरएल पर जा सकता है कोड शामिल किया जा रहा है। एक एपीआई बनाएं जो केवल आवश्यक डेटा स्थानांतरित कर दे, अगर बिलकुल भी।
जोड़ा लेखक deceze, स्रोत
इस पर निर्भर करता है कि आप वास्तव में कर्ल के साथ क्या करना चाहते हैं। नेट पर मनमाने ढंग से कोड लाने और निष्पादित करने के लिए इसका उपयोग न करें, चाहे आप include या curl का उपयोग करके ऐसा करते हैं, इससे कोई फर्क नहीं पड़ता।
जोड़ा लेखक deceze, स्रोत
हाँ यह समस्या होनी चाहिए। मुझे एहसास है कि क्रॉस-डोमेन को शामिल करना बहुत अच्छा विचार नहीं है, लेकिन मुझे मुश्किल है कि मेरे मामले में इसका शोषण कैसे किया जा सकता है। मेरी स्क्रिप्ट को कॉल करने वाले सर्वर के बीच क्या अंतर है और किसी ने बस अपने ब्राउज़र में स्क्रिप्ट लोड कर रहा है? जो मैं बता सकता हूं, उससे बड़ी संख्या में कोई भी allow_url_fopen को पहले स्थान पर सेट नहीं कर रहा है, जो मैं नहीं कर रहा हूं। क्लाइंट के पास पहले से ही यह सर्वर उनके सर्वर पर है। मैं देखता हूं कि यह पृष्ठ सामान्य रूप से धीमे लोड कैसे कर सकता है। आपकी सहायताके लिए धन्यवाद!
जोड़ा लेखक Scott Haley, स्रोत
क्या होगा यदि मैं इस विशेष लिपि से कुछ भी "गुप्त" रखने में सक्षम हूं? स्क्रिप्ट एक MySQL डेटाबेस से जानकारी खींच रही है, लेकिन अगर मैं डेटाबेस को एक अलग फ़ाइल में डेटाबेस से कनेक्ट करने के लिए डालता हूं, और उस स्क्रिप्ट पर शामिल करता हूं, तो क्या वह जानकारी अभी भी छिपी नहीं जाएगी? और जानकारी के अलावा मेरे डेटाबेस से सीधे कनेक्ट करने के लिए, स्क्रिप्ट जो जानकारी खींचती है वह "गुप्त" नहीं है, और न ही यह किसी के लिए उपयोगी होगी। क्या DNS अकेले ही एक व्यावहारिक समाधान नहीं बनाने के लिए पर्याप्त शोषण कर रहे हैं?
जोड़ा लेखक Scott Haley, स्रोत
ठीक है, मैं इस विधि का उपयोग करके पराजित करने और हार मानने के लिए स्वीकार करूंगा। : पी क्या ऐसा करने के लिए curl का उपयोग कर कोई समस्या है? या क्या ऐसा कुछ है जो मुझे इस तरह curl का उपयोग करते समय सावधान रहना चाहिए?
जोड़ा लेखक Scott Haley, स्रोत
मैं वैरिएबल पास कर रहा हूं कि मेरा सर्वर डेटाबेस से जानकारी खींचने और वापस भेजने के लिए उपयोग करेगा।
जोड़ा लेखक Scott Haley, स्रोत

आप सर्वर-साइड स्रोत कोड की बजाय test.php से क्लाइंट साइड आउटपुट शामिल कर रहे हैं। स्क्रिप्ट निष्पादित करने से रोकने के लिए test.phpc पर test.php का नाम बदलें। हालांकि यह सुरक्षा बिंदु से खतरनाक है।

0
जोड़ा

यह अजीब व्यवहार नहीं है, लेकिन चूंकि आप इंटरनेट पर फ़ाइल लोड करते हैं (इस मामले में वर्ल्ड वाइड वेब), फ़ाइल को आपके शामिल फ़ंक्शन में भेजने से पहले व्याख्या की जाती है।

चूंकि स्क्रिप्ट का अर्थ है कोई फ़ंक्शन दिखाई नहीं देगा, लेकिन केवल स्क्रिप्ट का आउटपुट होगा।

या तो इसे एफ़टीपी पर लोड करें या कार्यों के लिए एक एपीआई बनाएं।

0
जोड़ा
आह, ठीक है कि समझ में आता है। मैं एक एपीआई बनाने में देखता हूँ। धन्यवाद!
जोड़ा लेखक Scott Haley, स्रोत