Como posso desativar scripts php em um subdiretório específico do meu site no IIS7?

1

Como posso desativar scripts php em um subdiretório específico do meu site usando o IIS7?

Eu tenho um blog no wordpress e quero desativar o php no diretório "uploads"

    
por Andre Carlucci 03.07.2011 / 07:03

2 respostas

3

Você tem algumas opções aqui. Todos os exemplos de código (um para cada abordagem) precisam ser colocados no arquivo web.config na sua pasta "uploads" (caso você não saiba disso).

1) Remover o manipulador responsável pelo processamento dos arquivos * .php (no Gerenciador do IIS é "Mapeamento do manipulador"):

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <remove name="PHP 5" />
        </handlers>
    </system.webServer>
</configuration>

Contras:

  • Você precisa saber o nome do manipulador
  • O nome do manipulador pode ser alterado em um futuro (o administrador pode mudar para manipular o PHP de uma maneira diferente, etc.)

2) Usando o módulo Request Filtering desabilite todas as solicitações para arquivos com .php extension - o servidor enviará o erro 404.7 para o cliente. Este módulo é fornecido com o IIS 7.5, mas para o IIS 7.0 você pode precisar baixar e instalar o Pacote de Administração .

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <security>
            <requestFiltering>
                <fileExtensions>
                    <add fileExtension=".php" allowed="false" />
                </fileExtensions>
            </requestFiltering>
        </security>
    </system.webServer>
</configuration>

Se você tiver mais de uma extensão para PHP, precisará listá-las também (por exemplo, .phtml , .php5 etc).

3) Usando o módulo de regravação de URL crie uma regra para Abortar tal solicitação.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Abort PHP" stopProcessing="true">
                    <match url="^.*\.php$" />
                    <action type="AbortRequest" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>
  • O IIS 7.0 não possui um módulo de reconfiguração de URL incluído enquanto o IIS 7.5 tem a v1.1. Infelizmente eu não tenho nenhuma v1.1 desta extensão instalada - apenas v2 e não posso verificar / garantir que isso funcionará na v1.1. De qualquer forma, recomendo baixar e instalar a versão 2 do módulo de regravação de URL .
  • Você precisará estender essa regra para também capturar outras extensões de arquivo que podem ser processadas pelo PHP em sua configuração (por exemplo, .phtml , .php5 etc).

4) O uso do módulo de regravação de URL cria uma regra para responder com erro personalizado em vez de processar essa solicitação.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Disable PHP" stopProcessing="true">
                    <match url="^.*\.php$" />
                    <action type="CustomResponse" statusCode="404" statusReason="No PHP here" statusDescription="Sorry mate" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

5) Usando o módulo de regravação de URL , crie uma regra para redirecionar para sua própria página de erro para todas essas solicitações.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <clear />
                <rule name="Show Our Error Page for PPHP files" stopProcessing="true">
                    <match url="^.*\.php$" />
                    <action type="Rewrite" url="/404.php" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

A regra acima redirecionará internamente (reescrever) essas solicitações para um arquivo 404.php na pasta raiz do site (por exemplo, http://www.example.com/404.php )

Use # 2 se possível - ele será executado antes da etapa de regravação de URL, o que será benéfico para um servidor muito ocupado.

    
por 04.07.2011 / 02:59
0

Eu sei que esse segmento é um pouco antigo, mas eu, pessoalmente, assino a escola de pensamento "Write + Execute = BAD" e, portanto, uma pasta de upload nunca deve ser executada. Com isso em mente, qualquer manipulador além do manipulador de arquivos estáticos pode ser considerado um risco de segurança.

Para remover todos, exceto o manipulador de arquivos estáticos (independentemente do que os outros manipuladores são chamados) (todos os benefícios do # 1 acima, mas sem os Contras):

<configuration>
<system.webServer>
    <handlers>
       <clear />
        <add 
            name="StaticFile" 
            path="*" verb="*" 
            modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" 
            resourceType="Either" 
            requireAccess="Read" />
    </handlers>
    <staticContent>
         <mimeMap fileExtension=".*" mimeType="application/octet-stream" />
      </staticContent>
   </system.webServer>
</configuration>
    
por 01.05.2015 / 08:46