Ir para conteúdo
  • 0
Visitante

Existe alguma maneira de BLOQUEAR UPLOAD em um diretório?

Pergunta

Visitante

Boa tarde, pessoal.

 

Tenho um site antigo, em PHP, que contém algumas falhas de segurança. Funcionou bem durante quatro anos sem nunca ter dado problema. Ultimamente uns "malandros" descobriram um jeito de SUBIR arquivos .PHP para a raiz do site estão me causando problemas. Não tenho tempo de refazer o site, nem de encontrar e resolver as falhas. Preciso de uma solução bem simples:

 

BLOQUEAR QUALQUER TIPO DE UPLOAD QUE VENHA A SER FEITO.

 

Simples assim. Só permanece os arquivos que já estão lá e quero impedir a entrada de quaisquer novos arquivos.

Deveria haver uma solução fácil e rápida para isso. Mas eu pesquisei e só encontrei maneiras de bloquear o ACESSO a determinados tipos de arquivos utilizando regras no ".htaccess". O que não adiantaria, pois irá bloquear também o acesso aos arquivos que já estão lá.

Infelizmente não encontrei maneiras de BLOQUEAR UPLOAD.

 

Outra coisa que resolveria o problema seria se eu pudesse permitir acesso apenas aos arquivos que eu conheço(do site) e NEGAR acesso a TODOS OS OUTROS.

Encontrei exatamente o OPOSTO disso, usando o '.htaccess':

# Block access to specific file
<files myfile.doc>
Order allow, deny
Deny from all
</files>

O que não adiantaria, pois sempre que esses infelizes ENXERTAM alguma praga no servidor, eles o fazem usando um nome diferente de arquivo (d.php, GOD.php, ali.php, etc).

Existe alguma maneira de INVERTER ESSA REGRA, ou seja, proibir todos os que não estiverem listados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

8 respostas a esta questão

Recommended Posts

  • 1

@Agência Eibo é esse o site ?

 

http://imperiumimoveis.com.br

 

A hora que eu sair do trabalho vou tentar achar a falha, mas se for esse site mesmo pelo que eu vi ele ta aceitando comandos SQL pelo search da pagina inicial, e pela url gerada na busca de imóveis, mas não testei nada também, só tentei passar um instruções, e não teve mensagem de erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 1

O que você pode fazer é atraves do php.ini reduzir ou zerar a permissão de upload (caso você tenha acesso a essa parte)

 

  • upload_max_filesize = 0M
  • post_max_size = 0M

E no .htaccess  você insere tambem:

php_value upload_max_filesize 0M
php_value post_max_size 0M

Veja se isso funciona

 

Além disso também, você pode fazer via script PHP

<?php
ini_set('upload_max_filesize', '0M');
ini_set('post_max_size', '0M');
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 1

Como você precisa upar, pega os scripts que fazem upload, pega todos.

 

Se eles estão carregando pelo seu upload através de uma falha nessa parte do código, Insere uma função parar verificar o formato do arquivo, algo como:

 

<?php
$format = $_FILES['arquivo']['type'];
//Verifique os formatos que você quer acessar
if($format != 'jpeg' OR $format != 'png'){
  $response = 'Formato de upload não permitido';
  echo $reponse;
}else{
 //Continua seu código de upload normal 
}

 

Ou pelo painel de administração, seta acesso a usuário específico para todas as pastas, e loga esse usuário, VEJA AQUI.

 

Ou a solução é refazer onde fazem a validação dos métodos de upload, mas isso ia requerer o tempo que você disse que não tem.

 

Ah, outra coisa, verifique se seu FTP não esta permitindo login como 'anonymous'.

 

~~ Ultima edição

 

Uma dica pra tentar pegar quem faz isso:

 

Cria um tabela no banco com:

 

ID || DATETIME || IP

Poe id com autoincrement

 

use está função na index.php

 

<?php
function get_client_ip() {
     $ipaddress = '';
     if (getenv('HTTP_CLIENT_IP')){
         $ipaddress = getenv('HTTP_CLIENT_IP');
} 
elseif(getenv('HTTP_X_FORWARDED_FOR')){
         $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
} 
elseif(getenv('HTTP_X_FORWARDED')){
         $ipaddress = getenv('HTTP_X_FORWARDED');
} 
elseif(getenv('HTTP_FORWARDED_FOR')){
         $ipaddress = getenv('HTTP_FORWARDED_FOR');
} 
elseif(getenv('HTTP_FORWARDED')){
        $ipaddress = getenv('HTTP_FORWARDED');
}
elseif(getenv('REMOTE_ADDR')){
         $ipaddress = getenv('REMOTE_ADDR');
}     
else{
         $ipaddress = 'UNKNOWN';
}
$datetime = date('Y-m-d H:i:s');
	$sql  = "INSERTO INTO ip (datetime,ip) VALUES ('$datetime','$ipaddress')";
	//Usa o seu método de executar a query.
//verifique uma resposta
return 'algo';
}

Execute essa função em todo lugar que tem upload também.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Visitante
2 minutos atrás, Guilherme Luiz disse:

Atraves de chmood você pode setar no diretorio permissões apenas de leitura

Já tentei. Infelizmente meu servidor de hospedagem (Hostgator), define que a permissão para as pastas dever ser no mínimo 755, que permite ao dono, gravar arquivos. Já tentei setar 555(NINGUÉM GRAVA), pelo FileZilla e ele recusa.

E com os "infelizes" estão usando os próprios scripts PHP que estão hospedados, o servidor entende que é o DONO que está gravando e PERMITE.

 

Alterar as permissões foi a primeira coisa que eu pensei, mas infelizmente não é possível, devido às regras do servidor.

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Visitante
20 horas atrás, AnthraxisBR disse:

Como você precisa upar, pega os scripts que fazem upload, pega todos.

 

Se eles estão carregando pelo seu upload através de uma falha nessa parte do código, Insere uma função parar verificar o formato do arquivo, algo como:

 


<?php
$format = $_FILES['arquivo']['type'];
//Verifique os formatos que você quer acessar
if($format != 'jpeg' OR $format != 'png'){
  $response = 'Formato de upload não permitido';
  echo $reponse;
}else{
 //Continua seu código de upload normal 
}

 

Ou pelo painel de administração, seta acesso a usuário específico para todas as pastas, e loga esse usuário, VEJA AQUI.

 

Ou a solução é refazer onde fazem a validação dos métodos de upload, mas isso ia requerer o tempo que você disse que não tem.

 

Ah, outra coisa, verifique se seu FTP não esta permitindo login como 'anonymous'.

 

~~ Ultima edição

 

Uma dica pra tentar pegar quem faz isso:

 

Cria um tabela no banco com:

 

ID || DATETIME || IP

Poe id com autoincrement

 

use está função na index.php

 


<?php
function get_client_ip() {
     $ipaddress = '';
     if (getenv('HTTP_CLIENT_IP')){
         $ipaddress = getenv('HTTP_CLIENT_IP');
} 
elseif(getenv('HTTP_X_FORWARDED_FOR')){
         $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
} 
elseif(getenv('HTTP_X_FORWARDED')){
         $ipaddress = getenv('HTTP_X_FORWARDED');
} 
elseif(getenv('HTTP_FORWARDED_FOR')){
         $ipaddress = getenv('HTTP_FORWARDED_FOR');
} 
elseif(getenv('HTTP_FORWARDED')){
        $ipaddress = getenv('HTTP_FORWARDED');
}
elseif(getenv('REMOTE_ADDR')){
         $ipaddress = getenv('REMOTE_ADDR');
}     
else{
         $ipaddress = 'UNKNOWN';
}
$datetime = date('Y-m-d H:i:s');
	$sql  = "INSERTO INTO ip (datetime,ip) VALUES ('$datetime','$ipaddress')";
	//Usa o seu método de executar a query.
//verifique uma resposta
return 'algo';
}

Execute essa função em todo lugar que tem upload também.

 

Já tenho a verificação dos formatos. Não adianta, eles inserem mesmo assim. Pior que isso, mesmo em sites onde não há nenhum script de upload, eles ainda assim conseguem enxertar as "pragas".

Também já elaborei uma TABELA DE ACESSOS, com IP, Horário, Navegador, Cidade, País, Estado, etc. Mas não adianta porque eles usam VPN e mascaram seu verdadeiro IP e sua Localização.

 

É uma situação complicada, e o que eu preciso mesmo é uma solução CONTUNDENTE: Proibir a subida de arquivos para a raiz dos sites, e permitir somente na pasta de FOTOS(produtos), coisa que eu já sei fazer utilizando o ".htaccess" para controlar apenas a subida de arquivos do tipo IMAGEM(jpg/png/Gif). Isso seria uma solução 100% segura, a princípio.

 

Mas preciso de uma maneira de impedir UPLOAD nas pastas de scripts(php). Coisa que deveria ser muito simples. Fico perplexo por não existir uma forma simples de fazer algo tão útil e necessário.

 

Estou anexando, a título de conhecimento, a tela(print) do MALWARE que enxertaram em um dos meus sites.

 

ali.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Visitante
21 horas atrás, Guilherme Luiz disse:

O que você pode fazer é atraves do php.ini reduzir ou zerar a permissão de upload (caso você tenha acesso a essa parte)

 

  • upload_max_filesize = 0M
  • post_max_size = 0M

E no .htaccess  você insere tambem:


php_value upload_max_filesize 0M
php_value post_max_size 0M

Veja se isso funciona

 

Além disso também, você pode fazer via script PHP


<?php
ini_set('upload_max_filesize', '0M');
ini_set('post_max_size', '0M');
?>

 

 

Na verdade, para o arquivo .htaccess, a declaração para impedir a subida de arquivos seria assim

 

php_flag upload_max_filesize 0M
php_value post_max_size 0M

 

Porém não funciona no HOSTGATOR devido à restrições do servidor.

Quando eu faço isso dá o ERRO 500.
Já abri um chamado par eles me darem uma solução.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • 0
Visitante
2 horas atrás, AnthraxisBR disse:

@Agência Eibo é esse o site ?

 

http://imperiumimoveis.com.br

 

A hora que eu sair do trabalho vou tentar achar a falha, mas se for esse site mesmo pelo que eu vi ele ta aceitando comandos SQL pelo search da pagina inicial, e pela url gerada na busca de imóveis, mas não testei nada também, só tentei passar um instruções, e não teve mensagem de erro.

 

Não, o endereço certo é:

 

imperiumimoveis.eibo.com.br

 

Esse é atacado com mais frequência que os outros.

Mas todos já foram alvo de invasão, inclusive os que não tem nenhum script php, e são feitos somente em html/css puro.

Os meus sites estão todos linkados na página do portfólio, caso queira dar uma olhada.

 

http://www.eibo.com.br/eibo/clientes.php

 

E desde já, obrigado pela atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por RSN
      Boa Noite, 
      Gostaria de saber se existe a possibilidade de gravar além do id do option value outra variavel, para enviar via post.
      <div class="form-group"> <label class="col-md-4 control-label" for="txtgrupo">Tipo de Pagamento : </label> <div class="col-md-4"> <select id="" class="selectpicker" data-live-search="true" name="tipo_pagamento" > <?php $query = mysql_query("SELECT * FROM tipo_pagamento ORDER BY id ASC"); while($result = mysql_fetch_array($query)) { echo '<option value="'.$result["id"].'">'.$result["nome_tipo"].'</option>'; } ?> </select> </div> </div>  
    • Por JeanTDZ
      Eu tenho um form com algumas informações etc. O form envia pro banco de dados e tudo mais, funcional.
       
      Alguém teria algum exemplo que após o submit, o form é transformado em pdf/doc e direcionado para uma pasta/ftp já criada.?
    • Por jparenque
      Pessoal, estou precisando de um código em php que faça o seguinte:

      1- acesse uma url capture e grave o código fonte
      2- acesse novamente a mesma url, capture o código fonte e compare com o código da primeira captura
      3- se o código for igual ao da primeira captura ele acessa novamente e compara novamente
      4- se o código for diferente do da primeira captura ele tem que abrir o navegador Chrome e ir para essa url através do navegador.
      5- o fim do código deverá ser apenas quando ele acessar a url encontrar um conteúdo diferente do da primeira captura.

      Vou rodar o php na máquina local. O objetivo é monitorar uma página url específica com relação à uma alteração que ocorrerá. E quando ocorrer precisarei atuar nessa página imediatamente.

      Obrigado a todos!
    • Por reisleandro
      Alguém ai conhece um servidor php portável que possa rodar direto de um pendrive e que não apresente a mensagem de bloqueio do firewall (Imagem abaxio). O servidor embutido do php faz exatamente isso mas apenas como sigle thread. Queria uma solução um pouco mais robusta que pudesse rodar em qualquer maquina sem apresentar essa mensagem. Plataforma alvo Windows.
       

    • Por JOSELUISALD
      Bom dia. Em minha aplicação o cliente quer uma cópia de seu sistema localmente e remoto (hospedado). Tem como eu fazer a sincronização dos bancos de dados, para que tudo que seja feito localmente seja inserido automaticamente no banco remoto? Desde já obrigado.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.