filesmatch fazendo com que o php seja baixado sem ser analisado

1

Antecedentes

De acordo com a recomendação de um artigo de prática recomendada de segurança de upload, no meu arquivo htaccess, há o seguinte snippet:

ForceType application/octet-stream
<FilesMatch "(?i).jpe?g$">
    ForceType image/jpeg
</FilesMatch>
<FilesMatch "(?i).gif$">
    ForceType image/gif
</FilesMatch>
<FilesMatch "(?i).png$">
    ForceType image/png
</FilesMatch>
<FilesMatch "(?i).css$">
    ForceType text/css
</FilesMatch>

Isto supostamente impede que pessoas escondendo código php dentro de imagens, etc., embora eu tenha medo de não encontrar a fonte para este snippet, apesar de pesquisar minha história, isso foi há um tempo atrás

O problema

Isso estava funcionando como esperado no meu servidor de desenvolvimento local (XAMPP), mas agora eu comecei a configurar no servidor de produção esse trecho parece estar forçando o download de arquivos PHP em vez de ser executado

Como o sistema usa o htaccess para rotear todos os arquivos através de public / index.php, adicionar uma nova diretiva para .php não funcionou:

<FilesMatch "(?i).php$">
    ForceType application/x-httpd-php
</FilesMatch>

Eu consigo descobrir uma maneira de impedir que isso aconteça - o que estou procurando é uma maneira de impedir que os arquivos correspondam ao processamento do php como um fluxo de octetos (e, portanto, baixá-lo) ou uma alternativa para evitar que os scripts mascarados como imagens sejam executados

Obrigado antecipadamente

    
por Solflux 11.02.2017 / 17:26

1 resposta

0
<FilesMatch "(?i).php$">
    ForceType application/x-httpd-php
</FilesMatch>

Em vez disso, tente ForceType None para reverter para associações normais do tipo mime. Por exemplo:

<FilesMatch "(?i)\.php$">
    ForceType None
</FilesMatch>

Note que você também deve escapar do ponto na regex para corresponder a um ponto literal e não a qualquer caractere. (Isso vale para todos os seus contêineres FilesMatch também.)

Seu "problema" inicial é obviamente sua primeira linha: ForceType application/octet-stream . Expor seu código fonte do PHP é um risco de segurança, então não posso deixar de questionar a credibilidade deste código? O facto de este "trabalhou" no seu servidor local é, provavelmente, apenas para baixo para o caminho PHP está instalado (módulo, CGI / FastCGI, etc. etc.)

Não sou especialista em segurança, mas não consigo ver o que isso deve fazer em um servidor já configurado corretamente?

    
por 11.02.2017 / 18:40