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

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

@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 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.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
    • Por First
      Olá a todos!
       
      Quando eu tento fazer o login me mostra esse erro "Could not log you in."; Alguém sabe me ajudar a resolver esse problema no meu código?
      <?php require_once("core/init.php"); if (Input::exists()) { if (Token::check(Input::get("token"))) { $validate = new Validate(); $validation = $validate->check($_POST, array( "username" => array("required" => true), "password" => array("required" => true) )); if ($validation->passed()) { $user = new User(); $remember = (Input::get("remember")) === "on" ? true : false; $login = $user->login(Input::get("username"), Input::get("password"), $remember); if ($login) { Session::flash("home", "Welcome back!"); Redirect::to("index.php"); } else { echo "Could not log you in."; } } else { foreach ($validation->errors() as $error) { echo $error."<BR>"; } } } } ?> <form action="" method="POST"> <div class="field"> <label for="username">Username</label> <input type="text" name="username" id="username"> </div> <div class="field"> <label for="password">Password</label> <input type="password" name="password" id="password"> </div> <div class="field"> <label for="remember"> <input type="checkbox" name="remember" id="remember"> Remember me </label> </div> <input type="hidden" name="token" value="<?php echo Token::generate(); ?>"> <input type="submit" value="Log in"> </form>  
       
      Desde já obrigado.
×

Informação importante

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