Jump to content

Archived

This topic is now archived and is closed to further replies.

  • 0
Guest

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

Question

Guest

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?

Share this post


Link to post
Share on other sites

8 answers to this question

Recommended Posts

@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.

Share this post


Link to post
Share on other sites
Guest
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.

Share this post


Link to post
Share on other sites

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');
?>

 

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
Guest
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

Share this post


Link to post
Share on other sites
Guest
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.

 

Share this post


Link to post
Share on other sites
Guest
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.

Share this post


Link to post
Share on other sites

  • Similar Content

    • By Kelven
      Bom dia pessoal tudo bem?
      Então, estou trabalhando em um site em php e preciso usar a api do facebook para obter o feed do instagram, porém a chave token é um conteúdo muito sensível, então decidi fazer em php para ela não ficar disponível do lado do cliente. Alguém sabe me dizer se é possível fazer isso? Porque eu pesquisando no google só achei maneiras de fazer em javascript.
    • By gersonab
      Boa noite, tenho pesquisado porém não encontrei, então vamos lá.
      tenho uma lista de itens ( documentos ) cadastrados no banco de dados e os seus respectivos arquivos em uma pasta, se eu preciso de um deles clico e faço o download deste, no entanto como fazer para fazer o download de vários ao selecionar com checkbox os que eu quero ?
      desculpem por não postar nenhum código, mas é que não estou sabendo como fazer os downloads de vários.
      Qual o procedimento correto ?
       
    • By Willian Simione
      Estou com duas tabelas onde  uma eu somo o km de cada carro, e outra que eu somo a quantidade de litragem abastcido, porem tem carro que não abastece na garagem e na hora d eeu mostrar  a media por carro abastecido ele acaba entrando no somatório e é onde da o erro Warning: Division by zero in, como faço pra fazer essa soma e excluir os carro que não estao com o abastecimento.Abaido deixo as tabelas
       
      Esse soma o KM , todos os carro tem KM
       $soma4 = $conectar->query("SELECT SUM(tkm) AS total FROM cad_km where carro='$carro'");
         $count4 = $soma4->fetchColumn();
      Esse soma a Litragem, porem o tem carro que não abastece, 
         $soma3 = $conectar->query("SELECT round(SUM(litros),0) AS total FROM cad_abastec where dtabastec BETWEEN '$data1' AND '$data2' and carro='$carro'");
         $count3 = $soma3->fetchColumn();
       

       
    • By Mauricio Molina
      Bom dia.
       
      Estou precisando de um freelancer em PHP.
       
      Resolver um problema em um script de portal de noticias, onde a imagem não esta sendo upada, fica apenas em "em processamento".
       
      Contato: contato@weblina.com.br
       
      Obrigado!

    • By gersonab
      Boa tarde, preciso fazer uma busca por um ou mais itens, consigo fazer a busca pelo mês e ano, porém se eu quiser colocar tb a pessoa e mais uma condição não esta dando certo.
      <?php $mes=(int)$_POST['mes']; $ano=(int)$_POST['ano']; $idp=(int)$_POST['idp']; $pagoparc=$_POST['pagoparc']; $consulta1 = $pdo->query("SELECT parcelas.idpar, parcelas.procid, parcelas.procli, parcelas.proadv, parcelas.valorp,parcelas.valorpe, parcelas.valoradv, parcelas.valorpago, parcelas.datapar, parcelas.datapago, parcelas.pagoparc, parcelas.obspar, cli.idc, cli.nomec, proc.idpr, proc.proces, prof.idp, prof.nomep FROM parcelas LEFT JOIN cli ON cli.idc = parcelas.procli LEFT JOIN proc ON proc.idpr = parcelas.procid LEFT JOIN prof ON prof.idp = parcelas.proadv WHERE Month(parcelas.datapar) = $mes AND YEAR(parcelas.datapar) = $ano AND parcelas.proadv LIKE '%$idp%' AND parcelas.pagoparc LIKE '%$pagoparc%' ORDER BY parcelas.idpar ASC"); while ($user1 = $consulta1->fetch(PDO::FETCH_ASSOC)) { ?> desta forma retorna todos os resultados independente do mês  e ano
       
      <?php $mes=(int)$_POST['mes']; $ano=(int)$_POST['ano']; $idp=(int)$_POST['idp']; $pagoparc=$_POST['pagoparc']; $consulta1 = $pdo->query("SELECT parcelas.idpar, parcelas.procid, parcelas.procli, parcelas.proadv, parcelas.valorp,parcelas.valorpe, parcelas.valoradv, parcelas.valorpago, parcelas.datapar, parcelas.datapago, parcelas.pagoparc, parcelas.obspar, cli.idc, cli.nomec, proc.idpr, proc.proces, prof.idp, prof.nomep FROM parcelas LEFT JOIN cli ON cli.idc = parcelas.procli LEFT JOIN proc ON proc.idpr = parcelas.procid LEFT JOIN prof ON prof.idp = parcelas.proadv WHERE Month(parcelas.datapar) = $mes AND YEAR(parcelas.datapar) = $ano AND parcelas.proadv = $idp AND parcelas.pagoparc = $pagoparc ORDER BY parcelas.idpar ASC"); while ($user1 = $consulta1->fetch(PDO::FETCH_ASSOC)) { ?> já desta forma me retorna este erro :
      Fatal error: Call to a member function fetch() on a non-object in
       
      lembro que nesta busca posso ter ou não o idp e ou pagoparc
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.