IIS | Блокировать выполнение файлов в каталоге

IIS | Блокировать выполнение файлов в каталоге

Я имею дело с пользовательскими загрузками через PHP-приложение.

Я хочу защитить сервер, чтобы пользователь не мог воспользоваться уязвимостями, например, загрузить PHP-оболочку и выполнить ее.

Я установил, чтобы все загрузки перемещались за пределы webroot в отдельную папку. В качестве дополнительной меры безопасности я удалил все права, кроме "read" из IUSR, на указанную папку.

Чтобы пойти еще дальше, мне сказали отключить выполнение скриптов в папке через IIS.

Необходимо ли это, учитывая мою ситуацию и то, что я уже сделал? Если да, то как мне этого добиться с помощью IIS 8.

Спасибо

решение1

Ответ на вопрос «нужно ли это?» заключается в том, что нам необходимо изучить уровень безопасности, который требуется для этого приложения и вашей организации.

Лучшие практики обеспечения безопасности поддерживают подход «глубокой защиты», который подразумевает, что безопасность представляет собой многоуровневую систему контроля безопасности для защиты информации (или других) активов.

Чтобы определить, нужен ли этим данным дополнительный контроль, оцените риск — насколько вероятно, что существует угроза, которая может быть использована, и каковы последствия компрометации этих данных/системы — подумайте не только о конфиденциальности данных, но и о том, что злонамеренный пользователь изменит данные, выведет систему из строя или удалит данные. Затем определите, превышает ли стоимость контроля выгоду от его внедрения. Если нет, то реализуйте контроль, если реализация контроля «дороже», то примите риск.

Запретить доступ скрипта к виртуальному каталогу — довольно простая задача для реализации, и это будет уровнем защиты от злонамеренного пользователя, который смог повысить свои разрешения. Обычно этот элемент управления реализуется так, чтобы файлы, загруженные в каталог, не могли быть выполнены — например, для получения удаленной оболочки. Поэтому, если «стоимость» незначительна и мы предполагаем, что получение удаленной оболочки будет иметь большое влияние, даже если вероятность этого мала, то ответом будет запретить выполнение скрипта в папке (не стесняйтесь принимать собственное решение, если вы не согласны с этой оценкой).

Чтобы отключить доступ скрипта к папке в IIS 8, процедура должна быть такой же, как и в IIS 7: настройте сопоставления обработчиков в файле web.config.

По этой ссылке объясняются различные варианты:

https://webmasters.stackexchange.com/questions/28733/prevent-iis-from-executing-scripts-in-a-specific-directory

Вероятно, это то, что вам нужно, и это сохранит статический обработчик файлов:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <clear />
            <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
        </handlers>
    </system.webServer>
</configuration>

Обратите внимание также на последний комментарий на этой странице относительно требуемой конфигурации:

Просто добавлю к опубликованному решению для тех, кто может столкнуться с той же проблемой: ни одно из них не работало для меня, пока я не выяснил, что обработчики были заблокированы на верхнем уровне. Я не администратор сервера и даже близко не к этому, так что это заняло у меня некоторое время. Пока файл applicationHost.config не был отредактирован для разрешения переопределений, включение даже пустого раздела в файл web.config более низкого уровня было достаточным, чтобы сломать все с этого уровня. Хотя сейчас работает отлично.

Связанный контент