Поместите каталог загрузки где-нибудь вне корневого веб-каталога.Например, если Apache (или любой другой веб-сервер, который вы используете) настроен с веб-корнем / var / www, но загруженные файлы, например, в / var / uploads, гарантируют, что никто не сможет напрямую загрузить их (по крайней мере,через ваш веб-сервер).
Затем используйте PHP-скрипт в качестве резервного прокси-сервера, который сначала проверяет, что пользователь прошел аутентификацию и авторизацию, а затем, например, использует функцию passthru()
(после установки соответствующих заголовков, конечно,), чтобы позволить пользователю загрузить файл.