2016-02-22 26 views
6

Mutlak yerel dosya eklemeye karşı savunmasız bir oyuncak PHP uygulamasını düşünün. Neden dahil ('php: // input') çalışmıyor?

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

bunu istismar aşağıdaki isteği çalıştı:

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

foo 

Bu etkin istek gövdesinin foo ile include('php://input'); çalıştırır, bu yüzden foo yazdırmak için beklenebilir. Ancak, aşağıdaki hatayı alıyorum:

Buradaki sorun nedir? Bu bir PHP güvenlik özelliği mi? Eğer öyleyse, birileri PHP kaynak kodunun sorumlu bölümünü işaret eder mi?

+0

Ne hakkında özel akışları? 'Stream_wrapper_register' ve tüm bu cazın kullanılması? – Halcyon

+2

Yapılandırmanızdaki bu seçeneğin değerini kontrol edin http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-include – Gustek

+0

@Halcyon Dinliyorum. Dosya-yazma ilkeliniz ('session_start()' veya uygulamaya özel günlüğe kaydetme vb. Gibi) haricinde, bunu modern LAMP kurulumunda kullanamaz bulmanın hiçbir yolu yoktur. –

cevap

2

Cevabı Gustek yardımı ile buldum. php: // girişi, php: allow_url_include göre

Kısıtlı: // Standart girdi, php: // bellek ve php: örneğin php://filter için değil Görünüşe göre php://input, allow_url_include arasında restrction altına düştüğünde // geçici ancak .

Kaynak: Docs for php:// URL handler