Ir para conteúdo

POWERED BY:

Arquivado

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

ro.fonseca

Seguranca em PHP

Recommended Posts

Galera, gostaria de receber dicas de como proteger meu site de invasoes.

 

1 - SQL INJECTION - Sei q devo proteger todos os meus inputs dessa ameaça, quais dicas devo levar em consideração?? Sei que no php existe uma função para tal, devo me ater somente a essa função??

 

2 - Controle do uso da $_SESSION. Até que ponto é seguro utilizar as sessoes?? Eu por exemplo, crio sempre e na hora de logar, é realmente seguro??? O que vcs recomendam??

 

3 - Ao receber imagens ou arquivos, que cuidados devo ter?

 

Enfim, as alternativas sao infinitas, quero que vcs me deem dicas para ao menos eu pesquisar sobre o assunto. Conheco essas duas vulnerabilidades, quem souber mais é só falar, quero estudar um pouco sobre seguranca em PHP e sinceramente, eu nao encontrei muito sobre isso até agora, se quiserem me recomendar um livro seria bom tb!

 

abracao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falto XSS ..

eu uso essa funçao e nunca tive problemas ..

 

function protect($str)
{
   $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
   $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);
   return strtr($str, $tbl);
}

 

ela tanto vale pra SQL Injection quanto pra XSS , não entendi exatamente 'Controle de Uso de SESSION'

eu acho SESSION mais seguro que COOKIE ..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi!

 

Realmente isto é um problema!

Vou tentar expor aqui o que faço para me proteger e espero, atraves do topico, tambem melhorar minhas tecnicas.

 

SQL Injection:

 

Atualmente uso uma função que remove conteudo malicioso dos valores dos array's $_GET e $_POST no inicio de todas as minhas aplicacoes, tipo remover 'DELETE', 'INSERT' e etc. Ja fui criticado aqui no forum uma vez por usar esta ferramenta, mas nao achei solucao melhor ainda.

 

$_SESSION:

 

Não uso nada neste quesito.

 

Uploads:

 

Sempre valido os tipos (mime type, não a extensão) de arquivos que sao enviados de acordo com a necessidade de cada aplicacao.

 

E isso! Espero que ajude e que eu possa melhorar minhas tecnicas com os comentarios dos colegas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falto XSS ..

eu uso essa funçao e nunca tive problemas ..

 

function protect($str)
{
   $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
   $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);
   return strtr($str, $tbl);
}

 

ela tanto vale pra SQL Injection quanto pra XSS , não entendi exatamente 'Controle de Uso de SESSION'

eu acho SESSION mais seguro que COOKIE ..

 

O que é XSS?? O Session de fato é mt mais seguro que o COOKIE, mas dei uma pesquisada e descobri que existe formas de invasoes feitas atraves do session_start, já que ele pega um idenficador unico e bla bla, andei lendo um pouco.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falto XSS ..

eu uso essa funçao e nunca tive problemas ..

 

function protect($str)
{
   $str = preg_replace('~([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $str);
   $str = preg_replace('~([0-9]+);~e', 'chr("\\1")', $str);
   $str = str_replace("<script","",$str);
   $str = str_replace("script>","",$str);
   $str = str_replace("<Script","",$str);
   $str = str_replace("Script>","",$str);
   $str = trim($str);
   $tbl = get_html_translation_table(HTML_ENTITIES);
   $tbl = array_flip($tbl);
   $str = addslashes($str);
   $str = strip_tags($str);
   return strtr($str, $tbl);
}

 

ela tanto vale pra SQL Injection quanto pra XSS , não entendi exatamente 'Controle de Uso de SESSION'

eu acho SESSION mais seguro que COOKIE ..

 

Olha ai! Ja vou estudar nesse XSS, nao sabia. E quanto a SESSION, concordo com o @Andrey.

Compartilhar este post


Link para o post
Compartilhar em outros sites

XSS e CROSS SITE SCRIPTING , muito confundido com CSS .. ate certo ponto ela e uma ameçaca grande

 

pois uma pessoa pode alterar o valor de um input hidden por ele . vamos supor você não passa uma funçao

 

pra limpar o conteudo infectado dele ..

 

a pessoa pode alterar o valor e fazer uma outra query que atinga seu banco de dados .. , pode imprimir conteudos na

 

sua pagina como iframes .. qualquer HTML ..

 

pode abrir popups que fazem download quando entram na pagina , basicamente tudo que der pra fazer com javascript

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que serve aqueles caracteres aleatórios em que a pessoa digita o que aparece numa tela?? Evitar spam em massa??? Onde eu posso achar um para colocar no meu site? Nao que eu queira um já pronto, até pq pela parte de programacao nao deve ser complicado, acho q so uma funcao random pra gerar caracteres aleatorios e algumas imagens de letras e numeros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim , pra evitar spam , você mesmo pode fazer um sisteminha .. cria um INPUT readonly .. coloca um valor aleatorio nele . na hora de enviar você faz uma verficação se o mesmo que a pessoa digitou é igual ao do campo

Compartilhar este post


Link para o post
Compartilhar em outros sites

XSS e CROSS SITE SCRIPTING , muito confundido com CSS .. ate certo ponto ela e uma ameçaca grande

 

pois uma pessoa pode alterar o valor de um input hidden por ele . vamos supor você não passa uma funçao

 

pra limpar o conteudo infectado dele ..

 

a pessoa pode alterar o valor e fazer uma outra query que atinga seu banco de dados .. , pode imprimir conteudos na

 

sua pagina como iframes .. qualquer HTML ..

 

pode abrir popups que fazem download quando entram na pagina , basicamente tudo que der pra fazer com javascript

Alterar um input??? Poutz, nem imagino como alguem pode alterar um valor de um input hidden. Tas falando mudar via javascript?? Tipo escrever em um outro input um codigo javascript, reverenciado tal input hidden e assim mudar seu valor? É isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tudo que entra no seu site deve ser filtrado - upload, campo de busca, url com id...

nada passa em branco, sempre valide as entradas

 

cookie pode ser 'roubado' com XSS

 

session não representa perigo

ela é criada no server, não guarda informação no pc do usuario, como o cookie, alem de ser destruida quando o browser fecha

 

enfim...

a lista é longa, segurança nao se limita a apenas esses 3 pontos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Contra SPAM , um exemplo em javascript ..

<script>
 window.onload = function(){
   var code = document.getElementById("codigo").value = Math.floor(Math.random()*99999);
 }
 function validate(){
    if(document.getElementById("cf").value == document.getElementById("codigo").value){
       alert("Codigo Ok");
       // você pode submeter um formulario .. ou fazer alguma coisa se o codigo estiver correto
    }else{
       alert("Codigo Errado");
       return false;
    }
 }
</script>
Codigo: <input type="text" id="codigo" readonly><br />
Confirme o Codigo<input type="text" id="cf"><input type="submit" id="enviar" value="Verificar/Enviar" onclick="javascript:validate()">

 

@Creatividade , depende .. esses '2' Pontos . são os aspectos mais tratados na internet .. e mais vistos em forum

os Pontos mais da Pesada .. e Injection a Força , ataques Diretos .. com Perl , DDos , Ruby , Entre outras

 

Mais esse ANTI-SPAM em javascript não e totalmente aconselhavel , so dei um Exemplo .. o certo e gerar uma imagen

porque esses em javascript ou ate mesmo em pure PHP .. sao burlados facilmente

Compartilhar este post


Link para o post
Compartilhar em outros sites

enfim...

a lista é longa, segurança nao se limita a apenas esses 3 pontos

 

Poderia listar outros pontos nao presentes no topico?

 

apenas nao se limitar nos 3

1 - injection

2 - session / cookie

3 - upload

 

 

verificar as configurações o PHP

e usar a versão mais atual

 

 

. encarar possiveis erros como falhas de segurança, mensagens de erro...

ex: sistema de login que retorna 'sua senha nao confere'

 

. exibição dos arquivos do diretorio

ex: configurar para que não seja exibido nenhum arquivo

 

. input sem criptografia

ex: eu uso um salt para passar qq informação via input

 

. visibilidade de arquivos, .ini, .xml

ex: ja vi configurações de database em ambos arquivos

Compartilhar este post


Link para o post
Compartilhar em outros sites

enfim...

a lista é longa, segurança nao se limita a apenas esses 3 pontos

 

Poderia listar outros pontos nao presentes no topico?

 

apenas nao se limitar nos 3

1 - injection

2 - session / cookie

3 - upload

 

 

verificar as configurações o PHP

e usar a versão mais atual

 

 

. encarar possiveis erros como falhas de segurança, mensagens de erro...

ex: sistema de login que retorna 'sua senha nao confere'

 

. exibição dos arquivos do diretorio

ex: configurar para que não seja exibido nenhum arquivo

 

. input sem criptografia

ex: eu uso um salt para passar qq informação via input

 

. visibilidade de arquivos, .ini, .xml

ex: ja vi configurações de database em ambos arquivos

 

 

O que seria SALT??

Compartilhar este post


Link para o post
Compartilhar em outros sites

function protect($str)

{

$str = str_replace("<script","",$str);

$str = str_replace("script>","",$str);

$str = str_replace("<Script","",$str);

$str = str_replace("Script>","",$str);

$str = strip_tags($str);

}

 

isso nao é redundante???

strip_tags "Esta função tenta retornar uma string retirando todas as tags HTML e PHP"

Compartilhar este post


Link para o post
Compartilhar em outros sites

não , ele tira as tags <script etc , mais não em htmlentities :lol: muita gente se engana com isso .. pode testar pra ver , bota um injection em entities .. e ve se o string tags vai fazer alguma coisa

 

http://php.net/manual/en/function.strip-tags.php

 

Note:
This parameter should not contain whitespace. strip_tags() sees a tag as a case-insensitive 
string between < and the first whitespace or >. It means that strip_tags("<br/>", "<br>")
returns an empty string

Compartilhar este post


Link para o post
Compartilhar em outros sites

$meu_salt = '85dadebbef2a2fdfaaf170381372b0c77d24de11' // meu_salt

$variavel = sha1('teste') // 2e6f9b0d5885b6010f9167787445617f553a735f

 

sua saida será

85dadebbef2a2fdfaaf170381372b0c77d24de112e6f9b0d5885b6010f9167787445617f553a735f

 

 

resumindo

salt é 'tempero'

você usa uma palavra qualquer para incrementar a segurança, com uma criptografia

 

é impossivel separar o salt da variavel dessa string

85dadebbef2a2fdfaaf170381372b0c77d24de112e6f9b0d5885b6010f9167787445617f553a735f

 

 

você ainda pode incrementar, a cada 5 letras incluir um ponto

85dad.ebbef.2a2fd.faaf1.70381.372b0.c77d2.4de11.2e6f9.b0d58.85b60.10f91.67787.44561.7f553.a735f

 

você teria 16 grupos, dificultando ainda mais a compreensão da string

 

não , ele tira as tags <script etc , mais não em htmlentities :lol: muita gente se engana com isso .. pode testar pra ver , bota um injection em entities .. e ve se o string tags vai fazer alguma coisa

 

fui so pelo manual, ontem usei strip_tags e vi a explicação

sempre fui adepto do replace '<' e '>', desde os tempos de ASP, mas achei que a strip_tags resolvesse tudo

vou testar essa sua fnc

Compartilhar este post


Link para o post
Compartilhar em outros sites

$meu_salt = '85dadebbef2a2fdfaaf170381372b0c77d24de11' // meu_salt

$variavel = sha1('teste') // 2e6f9b0d5885b6010f9167787445617f553a735f

 

sua saida será

85dadebbef2a2fdfaaf170381372b0c77d24de112e6f9b0d5885b6010f9167787445617f553a735f

 

 

resumindo

salt é 'tempero'

você usa uma palavra qualquer para incrementar a segurança, com uma criptografia

 

é impossivel separar o salt da variavel dessa string

85dadebbef2a2fdfaaf170381372b0c77d24de112e6f9b0d5885b6010f9167787445617f553a735f

 

 

você ainda pode incrementar, a cada 5 letras incluir um ponto

85dad.ebbef.2a2fd.faaf1.70381.372b0.c77d2.4de11.2e6f9.b0d58.85b60.10f91.67787.44561.7f553.a735f

 

você teria 16 grupos, dificultando ainda mais a compreensão da string

 

não , ele tira as tags <script etc , mais não em htmlentities :lol: muita gente se engana com isso .. pode testar pra ver , bota um injection em entities .. e ve se o string tags vai fazer alguma coisa

 

fui so pelo manual, ontem usei strip_tags e vi a explicação

sempre fui adepto do replace '<' e '>', desde os tempos de ASP, mas achei que a strip_tags resolvesse tudo

vou testar essa sua fnc

 

Interessante esse salt,achei estranho no inicio por simplesmente a traducao pro portugues ficar: sal, mas agora td fez sentido... hehe

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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