Безопасные файлы для скачивания

Я хочу иметь папку, позволяющую вызывать ее docs, которая содержит документы, которые могут загружать пользователи. У них очень чувствительная информация. Как лучше всего защитить папку. Я исхожу из фона PHP, поэтому хочу знать, не упустил ли я что-либо.

Я буду защищать папку с .htaccess, а также когда пользователи нажимают кнопку загрузки, они никогда не отображаются в папке. Загрузка осуществляется через php, удаляя имя папки.

Конечно, чтобы защитить область пользователей, я внедряю санитарию и проверку на всех входных полях, а также наблюдаю за SQLInjections. Использование SSL-соединения. Выключили все предупреждения php. Защищенная область использует переменные SESSION для контроля доступа и повторной проверки пользователей для выполнения особых задач, таких как смена паролей. Кроме того, функция тайм-аута составляет 10 минут, после чего пользователь должен повторно вводить данные.

Я стараюсь быть настолько тщательным, насколько это возможно, поэтому любой совет, какой бы малой он ни был встречен.

Поместите файлы за пределы webroot. Затем, используя PHP, передайте файл, хотя скрипт. Таким образом, никто не может напрямую ссылаться на файл и обходить ваши элементы управления. (Естественно убедитесь, что скрипт, который делает это только после проверки пользователя, имеет разрешение на получение этого файла).

Пример 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; ?> 

Помимо Джона Конде, вы можете переписать URL-адрес dl в другую нечувствительную папку для 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>