2016-02-22 24 views
6

Wyobraź sobie zabawną aplikację PHP podatną na bezwzględne lokalne włączanie plików, np.Dlaczego funkcja include ('php: // input') nie działa?

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

Próbowałem następującą prośbę, aby ją wykorzystać:

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

foo 

To skutecznie realizuje include('php://input'); z życzeniem ciała foo, więc byłoby oczekiwać, że drukowanie foo. Jednak pojawia się następujący komunikat o błędzie:

Na czym polega problem? Czy to jest funkcja zabezpieczeń PHP? Jeśli tak, to czy ktoś może wskazać odpowiedzialną część kodu źródłowego PHP, która to łagodzi?

+0

Co o niestandardowych strumienie? Używając 'stream_wrapper_register' i całego tego jazzu? – Halcyon

+2

Sprawdź wartość tej opcji w swojej konfiguracji http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek

+0

@Halcyon Słucham. Nie ma możliwości, by znalazłem to wykorzystywać na nowoczesnych ustawieniach LAMPU, chyba że masz prymitywny zapis pliku (taki jak 'session_start()' lub rejestrowanie specyficzne dla aplikacji itp.) –

Odpowiedz

2

Znalazłem odpowiedź przy pomocy Gustek. Widocznie php://input podlega restrction z allow_url_include, podczas gdy na przykład php://filter nie:

Ograniczone allow_url_include: php: // wejścia, php: // stdin, php: // pamięć i php: // tylko temp .

Źródło: Docs for php:// URL handler

Powiązane problemy