ISS | Bloquear a execução de arquivos no diretório

ISS | Bloquear a execução de arquivos no diretório

Estou lidando com uploads de usuários por meio de um aplicativo PHP.

Quero proteger o servidor para que nenhuma exploração esteja disponível para o usuário, como fazer upload de um shell php e executá-lo.

Eu configurei para que todos os uploads sejam movidos fora do webroot para uma pasta separada. Como segurança extra, removi todos os direitos exceto "leitura" do IUSR, na pasta específica.

Para dar um passo adiante, me disseram para desabilitar a execução de script na pasta via IIS.

Isso é necessário, dada a minha situação e as coisas que já fiz? Se sim, como eu conseguiria isso usando o IIS 8.

Obrigado

Responder1

A resposta à pergunta "isso é necessário" é que precisamos examinar o nível de segurança exigido para esta aplicação e sua organização.

As melhores práticas de segurança defendem a abordagem de “Defesa em Profundidade”, o que significa que a segurança é uma camada de controles de segurança para proteger informações (ou outros) ativos.

Para determinar se esses dados precisam de controle adicional, avalie o risco - qual a probabilidade de haver uma ameaça que possa ser explorada e qual é o impacto do comprometimento desses dados/sistema - pense não apenas na confidencialidade dos dados , mas um usuário mal-intencionado alterando os dados, desativando o sistema ou excluindo os dados. Em seguida, determine se o custo do controle excede o benefício de colocar o controle. Se não, implemente o controle, se for mais "caro" implementar o controle, então aceite o risco.

Negar acesso a scripts em um diretório virtual é algo bastante trivial de implementar e seria uma camada de defesa contra um usuário mal-intencionado que conseguisse elevar suas permissões. É comum implementar este controle para que os arquivos enviados para um diretório não possam ser executados - por exemplo. para obter um shell remoto. Portanto, se o "custo" for trivial e presumirmos que obter um shell remoto seria de alto impacto, mesmo que seja de baixa probabilidade, a resposta seria desabilitar a execução do script na pasta (sinta-se à vontade para decidir aqui se você discordo desta avaliação).

Para desabilitar o acesso ao script na pasta no IIS 8, o procedimento deve ser o mesmo do IIS 7, configurar mapeamentos de manipuladores no web.config.

Este link explica várias opções:

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

Provavelmente é isso que você deseja, o que preservará o manipulador de arquivos estáticos:

<?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>

Observe também o último comentário nessa página para a configuração necessária:

Apenas para adicionar à solução publicada para outras pessoas que possam estar enfrentando o mesmo problema: nada disso funcionou para mim até que descobri que os manipuladores estavam bloqueados no nível superior. Não sou administrador de servidor nem próximo disso, então demorei um pouco. Até que o arquivo applicationHost.config fosse editado para permitir substituições, incluir até mesmo uma seção vazia em um arquivo web.config de nível inferior era suficiente para quebrar tudo daquele nível abaixo. Funciona muito bem agora, no entanto.

informação relacionada