Как я могу "заблокировать" файлы, пока они не куплены пользователем? - PullRequest
1 голос
/ 23 февраля 2011

Я создаю сайт, на котором пользователи могут приобретать файлы MP3, которые они могут загружать из своей области входа в систему.

В предыдущих разработанных мною приложениях я позволил бы администратору загружать файл и егобудет храниться в "/Uploads/MP3s/filename.mp3".Однако мне нужно сделать это безопасным, чтобы пользователи не могли получить доступ к этим файлам до тех пор, пока они их не приобрели.

Какой самый лучший и самый безопасный способ сделать это?

Ответы [ 2 ]

5 голосов
/ 23 февраля 2011

У вас должна быть база данных, где вы храните, какой пользователь купил какой mp3. Загруженные mp3-файлы не должны храниться в общедоступной папке. Сохраните их в другой папке, а затем в http-папке, но убедитесь, что ваш iis имеет доступ к этой папке. Таким образом, никто не может угадать путь к файлу, потому что он не находится под http-корнем.

Используйте страницу загрузки, которая проверяет разрешения на загрузку и только затем отправляет mp3 пользователю с Response.WriteFile(filename) и правильным MIME-типом и т. Д.

Protected Sub ServeMP3(ByVal f As FileInfo)
    Response.Clear()
    Response.ContentType = "audio/mpeg3"
    Response.AddHeader("content-disposition", "inline; filename=" & f.Name) 
    Response.WriteFile(f.FullName)
    Response.End()
End Sub

Вместо «inline» (потоковая передача и воспроизведение) вы можете использовать «attachment» для принудительной загрузки файла

3 голосов
/ 23 февраля 2011

Скройте их за обработчиком HTTP, модулем, веб-службой или страницей, которые могут проверить правильность запроса, а затем передайте файл в потоковом режиме или отобразите сообщение об ошибке / перенаправьте на страницу покупки.

Это будет иметь преимущество полного абстрагирования реальных путей для файлов тоже ... безопасность через неизвестность (:

...