Я могу получить это, чтобы передать запрос обработчику URL Rewrite (который затем молча сбросит его), если я сделаю следующее:
<add fileExtension=".php" allowed="true" />
<add fileExtension=".cgi" allowed="true" />
И затем разрешу ему попытаться запустить мой статический обработчик файлов;
<staticContent lockAttributes="isDocFooterFileName">
....
<mimeMap fileExtension=".php" mimeType="text/html" />
<mimeMap fileExtension=".cgi" mimeType="text/html" />
Но это действительно очень неправильно.
На самом деле, я также добавил это в свой раздел
вместо того, чтобы проходить через статический файловый процессор, что было бы немного безопаснее в случае неправильной конфигурации, но это все еще не очень красиво сценарий;
<add name="No-PHP" path="*.php" verb="*" type="System.Web.HttpForbiddenHandler" />
<add name="No-CGI" path="*.cgi" verb="*" type="System.Web.HttpForbiddenHandler" />
Это просто ограничение фильтрации запросов IIS?
Я думаю, что ты, возможно, усложняешь все, чем это необходимо. Вы можете сделать это довольно просто, используя расширение URLScan от Microsoft, чтобы усилить безопасность на вашем IIS, а затем заблокировать эту и другие вещи, которые вам нужны, с помощью его правил.
http://www.iis.net/downloads/microsoft/urlscan
В конфигурации вы можете сделать это глобально или по сайту с помощью чего-нибудь подобного ниже. (Это грубый пример)
<configuration>
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" >
<add fileExtension=".php" allowed="false"/>
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>
</configuration>
Ссылка: http://www.iis.net/learn/manage/configuring-security/use-request-filtering