Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 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

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

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

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

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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