get - trouble using preg_match and directory names with $_GET using PHP -
मेरे पास एक स्क्रिप्ट है जो $ _GET का उपयोग निर्देशिका नामों को पुनः प्राप्त करने के लिए करता है और एक फ़ोल्डर में फ़ाइलों को पुनः प्राप्त करने के लिए URL में जोड़ देता है webroot।
यहां मेरा वर्तमान कोड है:
& lt; php $ getdir = $ _GET ['dir']; $ Getdoctype = $ _GET ['doctype']; $ Dir = "/ var / www / अपलोड / $ getdir / $ getdoctype"; $ Subdir1 = स्कैंडर ($ dir); / * यह समारोह डायर्स / / $ सूची = array_diff ($ subdir1, सरणी ("।", "..", "index.php")); गूंज "& lt; ol & gt;"; विदेशी मुद्रा ($ फाइल के रूप में $ की सूची) {यदि (! आईएसआईडी ($ फ़ाइल)) गूंजती है "लियू; ली & gt; & lt; a href = 'https: //example.ca/private/download_files.php?dir = $ getdir और amp; doctype = $ getdoctype & amp; फ़ाइल नाम = $ फ़ाइल '& gt; $ फ़ाइल & lt; / a & gt; & lt; / li & gt; \ n "; } गूंज "& lt; / ol & gt;"; ? & Gt;
मैं समझता हूं कि $ _GET का उपयोग इस स्थिति में बहुत असुरक्षित है इसलिए मैं अपने $ _GET चर को एक preg_match फ़ंक्शन के साथ साफ़ करना चाहता हूं। मुझे इस फ़ंक्शन को इस बोर्ड पर एक उपयोगकर्ता से दिया गया है और इसे काम करने के लिए प्रतीत नहीं हो सकता है।
यहां फ़ंक्शन के साथ मेरा कोड है:
& lt ;? Php $ getdir = $ _GET ['dir']; $ Getdoctype = $ _GET ['doctype']; / / <[A-zA-Z0- 9] + $ / (* / $ [एक- zA-Z0- 9] + $ / ', $ getdir) ||! Preg_match (' / ^ [a-zA-Z0-9] ', $ Getdoctype)) {मर (' खराब पैरामीटर! '); } $ Dir = "/ var / www / uploads / $ getdir / $ getdoctype"; $ Subdir1 = स्कैंडर ($ dir); / * यह फ़ंक्शन, डायर्स * / $ list = array_diff ($ subdir1, ऐरे ("।", "..", "index.php")); गूंज "& lt; ol & gt;"; विदेशी मुद्रा ($ फाइल के रूप में $ की सूची) {यदि (! आईएसआईडी ($ फ़ाइल)) गूंजती है "लियू; ली & gt; & lt; a href = 'https: //example.ca/private/download_files.php?dir = $ getdir और amp; doctype = $ getdoctype & amp; फ़ाइल नाम = $ फ़ाइल '& gt; $ फ़ाइल & lt; / a & gt; & lt; / li & gt; \ n "; } गूंज "& lt; / ol & gt;"; ? & Gt;
प्राप्त चर निर्देशिका नामों में रिक्त स्थान रख सकते हैं। इसके अलावा % 20
एक http भाग्य स्ट्रिंग है जिसे भी स्वीकार किया जा सकता है। मैं सिर्फ हैकर अपने सर्वर में नहीं मिलना चाहता
मैं इस कार्यान्वयन में $ _GET के विकल्प भी स्वीकार करूँगा यदि आपके पास कोई है।
डायरेक्टरी का नाम regex के अनुसार a-zA-z
से शुरू होना चाहिए और space, _, -
भी मान्य
/ ////////////////////////////////////////// स्पष्टीकरण // \ s : नए फ़ोल्डर // \ _: new_folder // \ -: new-folder if (! Preg_match ('/ ^ [a-zA-Z] + [a-zA-Z0- 9 \ s \ _ \ -] + $ / ', Urldecode ($ getdir)) || | preg_match (' / ^ [a-zA-Z] + [a-zA-Z0- 9 \ s \ _ \ -] + $ / ', यूआरल्डएक्डेड ($ मिलर एक्टो) )) {मर ('खराब पैरामीटर!'); }
सीखना संसाधन:
Comments
Post a Comment