Остановить доступ к файлам через доменное имя
Через доменное имя мои файлы доступны, у меня есть аналогичный URL (ниже), который делает мои файлы доступными.
URL:
https://www.domainname/ParentFolder/SubFolder/File.doc
Я проверил разрешение на ParentFolder, SubFolders, только немногие люди имеют доступ к этим папкам, но меня беспокоит, почему эти файлы доступны и другим людям. Пожалуйста, порекомендуйте.
Кроме того, я использую приложение ASP.NET (веб-формы), поэтому в файле web.config требуется какая-либо конфигурация для удаления этой уязвимости, поскольку этот URL не попадает ни на одну страницу в моем исходном коде. Благодарю.
1 ответ
Если вы не хотите, чтобы файл был общедоступным, не размещайте его в общедоступном месте.
только несколько человек имеют доступ к этим папкам
Является ли веб-сервер доступным для него? Если так, то любой в Интернете имеет к нему доступ. Потому что все они получают к нему доступ через веб-сервер.
Кроме того, я использую приложение ASP.NET (веб-формы), поэтому в файле web.config требуется какая-либо конфигурация для удаления этой уязвимости, поскольку этот URL не попадает ни на одну страницу в моем исходном коде.
Ну да и нет. Если вы хотите, чтобы ваше приложение ASP.NET контролировало доступ к файлу, то вы хотите удалить файл из его общедоступного местоположения и поместить его где-нибудь, чтобы приложение могло получить к нему доступ, а общедоступное - нет. Тогда вы можете использовать приложение для контроля доступа к нему.
Удалите файл из его общего расположения и поместите его где-нибудь за пределами структуры каталогов веб-сервера. Просто в другом месте на сервере. Затем создайте обработчик HTTP (.ashx
) или даже страницу, если хотите (.aspx
), хотя обработчик, как правило, предпочтителен для этого, поскольку страница будет включать в себя ненужные накладные расходы, и использовать этот обработчик / страницу для передачи файла через код.
Сам код может быть таким простым:
context.Response.Clear();
context.Response.ContentType = "application/pdf";
context.Response.AddHeader("Content-Disposition", "attachment; filename=File.doc");
context.Response.TransmitFile("C:\Some\Path\To\File.doc");
context.Response.End();
Вы можете иметь один обработчик, возвращающий любой файл, указанный, скажем, с параметром строки запроса. Тем не менее, будьте осторожны при проверке запроса на файл, чтобы пользователи не могли просто загрузить любой файл из всей вашей файловой системы. Но, конечно же, проверка запроса - это именно то, о чем вы спрашиваете.
Таким образом, вы можете использовать механизмы аутентификации / авторизации в вашем веб-приложении для проверки пользователя и запроса перед возвратом файла. По сути, приложение ASP.NET становится своего рода барьером между пользователем и файлом.