PHP + nginx बंडल की घुमावदार विन्यास के साथ कमजोरता

सारांश



घोषित: 2010-05-20

क्रेडिट: 80 सेकेंड

प्रभावित करता है: fastcgi_pass के साथ निर्देशिकाओं में फ़ाइलों को अपलोड करने की क्षमता के साथ ngnix + php पर साइटें








पृष्ठभूमि



अक्सर, कैसे-कैसे php-fpm / php-cgi के साथ एक nginx बंडल सेट करने पर समान लाइनें होती हैं:



location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
      
      







समस्या का वर्णन



हालाँकि, यदि आप सर्वर से example.com/1px.gif/test.php देने के लिए कहते हैं, तो URI 1px.gif/test.php



जैसा दिखेगा, जो location \.php$



SCRIPT_FILENAME



location \.php$



सूट करता है, और SCRIPT_FILENAME



बराबर हो जाता है। /scripts/1px.gif/test.php







इसके अलावा, अगर cgi.fix_pathinfo == 1



(डिफ़ॉल्ट रूप से), तो SCRIPT_FILENAME



बराबर हो जाता है, और PATH_INFO



बराबर test.php



हो जाएगा।



नायब! कुछ कॉन्फ़िगरेशन में, भेद्यता 1px.gif%00test.php



जैसे URL को ट्रिगर 1px.gif%00test.php







परिणामस्वरूप, php दुभाषिया / /scripts/1px.gif



को संसाधित करेगा। वह है,



प्रभाव



कोई भी उपयोगकर्ता सर्वर (उदाहरण के लिए, अवतार) के लिए फाइल अपलोड करने में सक्षम होगा, फिर एक विशेष छवि बना रहा है जो एक साथ जीडी आकारों को मान्य करेगा और पीएचपी दुभाषिया द्वारा निष्पादित किया जाएगा और सर्वर पर मनमाने ढंग से कोड को निष्पादित करने का अधिकार होगा।



वैकल्पिक हल



php.ini







 cgi.fix_pathinfo=0
      
      







या nginx.conf कॉन्फ़िगरेशन के माध्यम से

 location ~ \.php$ { try_files $fastcgi_script_name =404; fastcgi_index index.php; fastcgi_param script_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; }
      
      





यह वास्तव में सभी गैर-मौजूदा .php



फ़ाइलों तक पहुंच को बंद कर देगा



All Articles