Как безопасно ссылаться на включаемые файлы ASP classic вне веб-корня? - PullRequest
3 голосов
/ 07 ноября 2008

Я бы хотел разместить все мои включаемые файлы ASP Classic вне веб-корня. Это гарантирует, что никакие включаемые файлы не могут быть вызваны напрямую через URL.

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

Я знаю, что могу использовать виртуальный каталог для ссылки на папку включений вне корневого веб-каталога, но разве это не разрешает прямой доступ к этому каталогу через URL? Возможно, я неправильно понимаю природу виртуальных каталогов.

Ответы [ 3 ]

2 голосов
/ 07 ноября 2008

Хотя это и не рекомендуется, вы также можете включить опцию «Включить родительские пути» в IIS, которая позволит вам ссылаться на файлы за пределами корневого каталога через директиву include, а также разрешать доступ через объект файловой системы. Это, как правило, не рекомендуется, поскольку представляет угрозу безопасности.

Инструкции о том, как это сделать, можно найти в статье Включение родительских путей в MSDN .

.

Прошло много времени с тех пор, как я использовал Classic ASP, но обычно я объявлял только подпрограммы и функции во включаемых файлах, а затем вызывал их из основного кода приложения. Это приводит к непреднамеренному побочному эффекту: если кто-то угадывает путь к включаемому файлу и получает доступ к файлу напрямую через браузер, он на самом деле ничего не делает, так как код не выполняется.

2 голосов
/ 07 ноября 2008

С этой статьи :

(мне никогда не нужно было делать это самому)

Понял. Создайте виртуальный каталог «внутри» вашего веб-сайта по умолчанию, который указывает на файлы "за пределами" вашего рабочая папка. В вашем коде ссылаться на виртуальный каталог, который указывает на папку / файлы снаружи твоя нормальная структура. Например

Ваш веб-сайт по умолчанию является локальной папкой называется c: \ sites \ example.com. Под example.com, все ваши папки и файлы. Тем не менее, файлы, которые вы хотите на файловый сервер с именем FileServerA в папка с именем D: \ MyWebsiteInclude. UNC путь \ FileServerA \ D $ \ MyWebSiteIncludes или если вы создадите общий ресурс в папке, \ FileServerA \ MyWebsiteIncludes On веб-сервер, создать виртуальный каталог, который отображается на любой из дорожка. Вам нужно убедиться, что правильные учетные данные настроены на получить доступ к файлам на удаленном сервере.

0 голосов
/ 07 марта 2013

Мне удалось проверить процедуру, упомянутую в Ответ Диодея , и она действительно сработала.

Пример установки файлов / папок:

E:\includes\
           \include.asp
           \another.asp
E:\websites\
           \business-website.com\
                                \config.asp
                                \default.asp
           \personal-website.com\
                                \config.asp
                                \default.asp
           \whatever-website.com\
                                \config.asp
                                \default.asp

Настройка веб-сайта IIS

business-website.com -> E:\websites\business-website.com\
     v. dir /include -> E:\includes\
personal-website.com -> E:\websites\personal-website.com\
     v. dir /include -> E:\includes\
whatever-website.com -> E:\websites\whatever-website.com\
     v. dir /include -> E:\includes\

Примечание. Виртуальные каталоги не были преобразованы в приложения.

Что работает в default.asp

Files in current directory:
<!-- #include file="config.asp" -->

Files in current directory (using virtual path):
<!-- #include virtual="/config.asp" -->

Files in include directory:
<!-- #include virtual="/include/include.asp" -->

Что работает в практически включенном include.asp

Files in current directory:
<!-- #include file="another.asp" -->

Files in current directory (using virtual path):
<!-- #include virtual="/include/another.asp" -->

Files in root application:
<!-- #include virtual="/config.asp" -->

Это значительно упрощает объединение всех включаемых файлов в одном месте.

...