Безопасные файлы для скачивания
Я хочу иметь папку, позволяющую вызывать ее docs, которая содержит документы, которые могут загружать пользователи. У них очень чувствительная информация. Как лучше всего защитить папку. Я исхожу из фона PHP, поэтому хочу знать, не упустил ли я что-нибудь.
Я буду защищать папку с .htaccess, а также когда пользователи нажимают кнопку загрузки, они никогда не отображаются в папке. Загрузка осуществляется через них с помощью php, удаляя имя папки.
Конечно, чтобы защитить область пользователей, я внедряю санитарию и проверку на все поля ввода, а также наблюдаю за SQLInjections. Использование SSL-соединения. Выключили все предупреждения php. Защищенная область использует переменные SESSION для контроля доступа и повторной проверки пользователей для выполнения особых задач, таких как смена паролей. Кроме того, функция тайм-аута составляет 10 минут, после чего пользователь должен повторно вводить данные.
Я стараюсь быть настолько тщательным, насколько это возможно, поэтому любой совет, какой бы небольшой он ни был, приветствуется.
Ответы
Ответ 1
Поместите файлы за пределы webroot. Затем, используя PHP, передайте файл, но script. Таким образом, никто не может напрямую ссылаться на файл и обходить ваши элементы управления. (Естественно убедитесь, что script, который делает это только после проверки, что у пользователя есть разрешение на получение этого файла).
Пример PHP:
<?php
if (!isset($_SESSION['authenticated']))
{
exit;
}
$file = '/path/to/file/outside/www/secret.pdf';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
?>
Ответ 2
В дополнение к John Conde вы можете переписать dl-url в другую нечувствительную папку для honeypot пользователя, который пытается преодолеть их доступ.
И добавьте этот тип правил в свой htaccess
Options -Indexes
<files .htaccess>
order allow,deny
deny from all
</files>
#Add all file you want to protect except the one you share...
<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$">
Order Allow,Deny
Deny from all
</FilesMatch>