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 violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas preciso entender e resolver um problema.
       
      Tenho uma Rotina que o usuário seleciona os produtos que deseja para requerer ao setor responsável.
       
      O usuário escolhe um produto qualquer e Clicla em um button para incluir a lista.

      O problema que estou enfrentando é que após escolher o produto e teclar ENTER o Sistema já salva no BD.
       
      Gostaria de criar uma Tecla de Atalho, para quando incluir/escolher o produto na lista, o usuário tecla como exemplo:
      ALT+A  para agregar a lista
      ALT+S para salvar a lista de itens desejados.

      Assim, quando teclar enter, o sistema não dispara o GRAVAR na Base de Dados.

      Grato,

      Cesar
       
       
       
×

Informação importante

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