پیشنهاد من این است:
فایل ها رو در فولدری که بیرون فولدر ریشه سایت قرار داره ذخیره کنید. مثلاً اگه فولدر ریشه سایت C:\InetPub\WWWRoot باشه فایل ها رو در C:\InetPub\Files قرار بدید. بدین ترتیب هیچ کسی نمی تونه آدرس Url فایل رو مثلاً در مرورگرش تایپ کنه و فایل رو دانلود کنه. چون فایل ها اساساً در سایت قرار ندارن.

بعد یه صفحه درست کنید و دسترسی بهش رو منوط به Login کنید. توی این صفحه با استفاده از شیء Scripting.FileSystemObject می تونید لیست فایل های دایرکتوری C:\InetPub\Files رو بخونید و به کاربر نشون بدید. برای دانلود کردن هر فایل هم کافیه با استفاده از شیء ADODB.Stream فایل رو لود کنید و محتویات درون Stream رو با Response.BinaryWrite توی صفحه بنویسید.

البته اگه چندین User دارید و می خواهید دسترسی هر کدوم به فایل ها هم متفاوت باشه، توصیه می کنم به ازای هر کاربر یه ساب- فولدر درست کنید (مثلاً C:\InetPub\Files\[Username]) بعد موقع نشون دادن فایل ها، فقط فایل های مخصوص هر کاربر رو بهش نشون بدید.

می دونید. جای ابتکار خیلی هست و خیلی کار می شه کرد.