В течение последних 3 месяцев мой сайт использовал обработчик файлов PHP в сочетании с htaccess.
Пользователи, имеющие доступ к папке загрузки сайта, будут перенаправлены на обработчик следующим образом:
RewriteRule ^(.+)\.*$ downloader.php?f=%{REQUEST_FILENAME} [L]
Назначение обработчика файла - псевдокодирование, за которым следует фактический код.
//Check if file exists and user is downloading from uploads directory; True.
//Check against a file type white list and set the mime type(); $ctype = mime type;
header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
Со вчерашнего дня обработчик начал возвращать искаженные файлы, нечитаемые изображения и должен был быть обойден. Мне интересно, какие настройки могли пойти не так, чтобы вызвать это.
-EDIT-
Проблема найдена, но не решена. Включение пути к библиотеке php, которую я использовал для интеграции с Wordpress, приводило к повреждению файлов. Удаление этого блока кода решает проблему повреждения, но оставляет файлы доступными без требуемой аутентификации.
@include_once($_SERVER['DOCUMENT_ROOT'].'/wp-blog-header.php');
if(!is_user_logged_in())
{
auth_redirect(); //Kicks the user to a login page.
}
//resume download script