Привет. Есть ли проблемы с безопасностью, о которых я должен беспокоиться при использовании метода readfile
в PHP? Я хотел бы использовать метод readfile, который принимает URL-адрес файла, хранящегося на разных сторонних серверах. Затем я обслуживаю файл для пользователя. Интуитивно, казалось бы, существует риск того, что URL-адрес может указывать на любой файл. С другой стороны, я использую readfile
метод readfile
(после обработки некоторых файлов, не зависящих от файла) и не уверен, что это допустило бы что-нибудь злоумышленное на моем сервере. Кроме того, согласно руководству, кажется, что, если я хочу использовать URL-адрес с readfile
, мне нужно включить fopen wrappers
. Благодарю.
readfile
не выполняет код на вашем сервере, поэтому там нет проблемы.
Тем не менее, некоторые странные люди могут использовать ваш сервер для выполнения веб-запросов, чтобы вызвать проблемы с вашим сервером, сделав несанкционированные запросы или вызвав перегрузку, поэтому вы захотите учесть это при кодировании такого типа функций.
согласно руководству, кажется, что если я хочу использовать URL-адрес с readfile, мне нужно включить обертки fopen
Да, вы должны убедиться, что allow_url_fopen включен . если это не так, вам придется изучить использование cURL .
Самый большой риск для безопасности – это инъекция искаженного запроса на обслуживание файлов из вашего файла. То есть, проходя относительные пути.
Allow_url_fopen также представляет угрозу безопасности, если вы не будете осторожны. Он может разрешать запросы, переданные через readfile (), include () и т. Д., Интерпретировать PHP-код, если это то, что запрос вернулся.
Я думаю, вам просто нужно сосредоточиться на двух вещах:
1) Не позволяйте вашим пользователям указывать, какой файл читается readfile. (Потенциал для обхода обхода каталога и т. Д.)
2) Не разрешайте пользователям изменять файл, который читается readfile. (Потенциал для всех видов вреда!)
Сверху моей головы, они нападают на меня, как на два наиболее вероятных атак, с которыми вы столкнетесь в отношении файла readfile.