টিএল; ডিআর - ফিক্সটি (যা আপনার এমনকি প্রয়োজন নাও হতে পারে) হ'ল খুব সহজ এবং এই উত্তরের শেষে।
আমি আপনার নির্দিষ্ট প্রশ্নগুলিকে সম্বোধন করার চেষ্টা করব, তবে PATH_INFO কী তা সম্পর্কে আপনার ভুল ধারণা প্রশ্নগুলি নিজেরাই কিছুটা ভুল করে wrong
প্রথম প্রশ্নটি হওয়া উচিত "এই পথের তথ্য ব্যবসাটি কী?"
আপনার পরবর্তী প্রশ্নটি হওয়া উচিত ছিল: "পিএইচপি কীভাবে PATH_INFO
এবং কীভাবে তা নির্ধারণ করে SCRIPT_FILENAME
?"
- পিএইচপি এর পূর্ববর্তী সংস্করণগুলি নিষ্পাপ ছিল এবং প্রযুক্তিগতভাবে এমনকি সমর্থন করে না
PATH_INFO
, তাই যা যা করার কথা PATH_INFO
ছিল তা হ'ল SCRIPT_FILENAME
, যা হ্যাঁ, অনেক ক্ষেত্রেই ভেঙে গেছে। পরীক্ষার জন্য আমার কাছে পিএইচপি-র পুরোনো পর্যাপ্ত সংস্করণ নেই, তবে আমি বিশ্বাস করি এটি SCRIPT_FILENAME
পুরো শেবাংয়ের মতো দেখেছিল : উপরের উদাহরণে "/path/to/script.php/THIS/IS/PATH/INFO" (এর সাথে উপসর্গীকৃত যথারীতি ডোক্রোট)।
- সিজি.ফিক্স_প্যাথিনফো সক্ষম করে, পিএইচপি এখন উপরের উদাহরণের জন্য সঠিকভাবে "/ THIS / IS / PATH / INFO" সন্ধান করে
PATH_INFO
এবং SCRIPT_FILENAME
এতে লিখিত অনুরোধ করা স্ক্রিপ্টের দিকে নির্দেশ করে এমন অংশটি পায় (অবশ্যই ডક્ર্রোটের সাথে উপসর্গযুক্ত)।
- দ্রষ্টব্য: যখন পিএইচপি প্রকৃত পক্ষে সমর্থন পেয়েছে
PATH_INFO
তখন তাদের নতুন বৈশিষ্ট্যের জন্য একটি কনফিগারেশন সেটিংস যুক্ত করতে হয়েছিল যাতে পুরাতন আচরণের উপর নির্ভরশীল লোকেরা নতুন পিএইচপি সংস্করণ চালাতে পারে। এজন্য এমনকি এটির জন্য একটি কনফিগারেশন সুইচও রয়েছে। এটি শুরু থেকেই অন্তর্নির্মিত হওয়া উচিত ছিল ("বিপজ্জনক" আচরণের সাথে)।
তবে পিএইচপি কীভাবে জানবে যে স্ক্রিপ্টটি কোন অংশ এবং এটি কী তথ্য সম্পর্কিত? ইউআরআই যদি এমন কিছু হয় তবে:
http://example.com/path/to/script.php/THIS/IS/PATH/INFO.php?q=foo
- এটি কিছু পরিবেশে একটি জটিল প্রশ্ন হতে পারে। পিএইচপি-তে যা ঘটে তা হ'ল এটি ইউআরআই পথের প্রথম অংশটি সন্ধান করে যা সার্ভারের ডক্রোটের আওতায় থাকা কোনও কিছুর সাথে মিলে না। এই উদাহরণের জন্য, এটি দেখতে পাবে যে আপনার সার্ভারে আপনার কাছে "/docroot/path/to/script.php/THIS" নেই তবে আপনার কাছে অবশ্যই "/docroot/path/to/script.php" আছে তাই এখন
SCRIPT_FILENAME
নির্ধারিত হয়েছে এবং PATH_INFO
বাকিটি পেয়েছে।
- সুতরাং এখন বিপদটির উত্তম উদাহরণ যা এনগিনেক্স ডক্সে এবং হ্রভোজিপ্পলজারের উত্তর (যে আপনি এরকম স্পষ্ট উদাহরণ সম্পর্কে উদ্বিগ্ন হতে পারেন না) এ আরও স্পষ্ট হয়ে উঠছেন : প্রদত্ত হারভোজের উদাহরণ (" http: // উদাহরণ)। com / foo.jpg / nonexistance.php "), পিএইচপি আপনার ডক্রুট" /foo.jpg "এ একটি ফাইল দেখে তবে এটি" /foo.jpg/nonexistance.php "বলে" কিছুই
SCRIPT_FILENAME
পায় না "/foo.jpg" (আবার, ডক্রোটের সাথে উপসর্গযুক্ত) এবং PATH_INFO
"/nonexistance.php" পাওয়া যায়।
কেন এবং কীভাবে এটি বিপজ্জনক হতে পারে তা এখন পরিষ্কার হওয়া উচিত:
- ওয়েব সার্ভারটি সত্যই দোষের নয় - এটি নিছক ইউআরআইকে পিএইচপি-তে প্রক্সিং করছে, যা নির্দোষভাবে আবিষ্কার করে যে "foo.jpg" আসলে পিএইচপি সামগ্রী রয়েছে, সুতরাং এটি কার্যকর করে (এখন আপনি বন্ধ হয়ে গেছেন!)। এটি প্রতি সেগুনে এনগিনেক্সের পক্ষে বিশেষ নয় ।
- বাস্তব সমস্যা হল আপনাকে ভেতরে যেতে অবিশ্বস্ত বিষয়বস্তু sanitizing ছাড়া কোথাও আপলোড করা এবং আপনার একই অবস্থানে, যা পিএইচপি সুখে যখন এটা করতে পারেন executes অন্যান্য নির্বিচারে অনুরোধ অনুমতি নেই।
এই কৌতুকটি ব্যবহার করে অনুরোধ রোধ করার জন্য এনগিনেক্স এবং অ্যাপাচি নির্মিত বা কনফিগার করা যেতে পারে এবং ব্যবহারকারীর 2372674 এর উত্তর সহ এটি কীভাবে করা যায় তার জন্য প্রচুর উদাহরণ রয়েছে । এই ব্লগ নিবন্ধটি সমস্যাটি সুন্দরভাবে ব্যাখ্যা করেছে, তবে এটি সঠিক সমাধানটি হারিয়েছে।
তবে সর্বোত্তম সমাধানটি হ'ল পিএইচপি-এফপিএম সঠিকভাবে কনফিগার করা হয়েছে তা নিশ্চিত করা যাতে এটি "। Php" দিয়ে শেষ না হয়ে কোনও ফাইল কখনই চালিত করতে পারে না। এটি লক্ষণীয় যে পিএইচপি-এফপিএম (~ 5.3.9 +?) এর সাম্প্রতিক সংস্করণগুলির এটি ডিফল্ট হিসাবে রয়েছে, তাই এই বিপদটি আর কোনও সমস্যা হয় না।
সমাধান
আপনার যদি পিএইচপি-এফপিএম (~ 5.3.9 +?) এর সাম্প্রতিক সংস্করণ থাকে তবে আপনাকে কিছুই করতে হবে না, কারণ নীচের নিরাপদ আচরণটি ইতিমধ্যে ডিফল্ট।
অন্যথায়, পিএইচপি-এফপিএম এর www.conf
ফাইল (সম্ভবত /etc/php-fpm.d/www.conf
, আপনার সিস্টেমে নির্ভর করে) সন্ধান করুন। আপনার এটি আছে তা নিশ্চিত করুন:
security.limit_extensions = .php
আবার, আজকাল অনেক জায়গায় এটি ডিফল্ট।
নোট করুন যে এটি কোনও আক্রমণকারীকে একটি "। Php" ফাইলটি ওয়ার্ডপ্রেস আপলোড ফোল্ডারে আপলোড করা থেকে একই কৌশল ব্যবহার করে চালানো থেকে বিরত রাখে না। আপনার অ্যাপ্লিকেশনগুলির জন্য আপনার এখনও ভাল সুরক্ষা থাকা দরকার।