Функция, которая может загрузить «не-файл на основе» данных является функция:
- обычно используется для загрузки файлов с локального диска
- , но также может получить доступ к удаленным данным через HTTP , FTP, ...
Примером такой функции является file_get_contents
, если включен allow_url_fopen
.
О «незащищенных» вещах, посмотрите на этом примере:
$file = '...';
$my_data = file_get_contents($file);
При том, что вы будете считать, что $my_data
содержит что-то загружается из локального-файла.
Теперь, если $file
создается с чем-то передается в сценарий, как $_GET
, например, вы могли бы в конечном итоге загрузки удаленного файла, а не локальный-один ... И вы понятия не имеете, что $my_data
может содержать , в такой ситуации.
Это может быть опасно только при загрузке файла ... Теперь, если вы использовали require
вместо file_get_contents
... это означает, что любой может выполнить любой код PHP на вашем сервере!
К счастью для нас, есть одна директива, чтобы позволить открытие удаленного файла (allow_url_fopen
), и еще один, чтобы позволить включение удаленного файла (allow_url_include
).
Довольно часто первый включается, потому что он полезен; а второй отключен, так как он вызывает риски, связанные с безопасностью.
На английском языке он спрашивает, что «Помните о потоках PHP, что позволяет вам (и атакующим) получать доступ к ресурсам, не связанным с файлами, с помощью URI, таких как http://example.com/badcode.txt. Убедитесь, что злоумышленники не могут включать удаленный файл, содержащий PHP-код ». означает в списке. – fire
благодарим за ваш ответ! Интересно послушать возможный выбор, чтобы установить «on» или «off» allow_url_fopen, но для моего приложения я считаю, что «on» лучше, также потому, что я не знаю глубокой разницы между curl() и fopen() и когда я могу использовать то или другое. Так что я хочу свободно использовать fopen() и проверять данные, если есть include(). –