задачка нетривиальна.
Что-же в ней нетривиального? Всего две небольшие функции.
Перед выводом ссылки в браузере генерируем какой-то случайный идентификатор (например, хеш от имени файла + идентификатор сессии + соль)
Записываем в сессию этот хеш как ключ, и оригинальный путь к файлу как значение. Выводим ссылку примерно так: "/myFileloader.php?hash=1SD3F5G..."
И делаем функцию которая отдает эти файлы:
Ищем этот хеш в сессии, если там есть путь к файлу - выдаем его в браузер. Если нет - показываем 404.
Всё.