Ir para conteúdo

POWERED BY:

Arquivado

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

byfreak

Segurança

Recommended Posts

Pessoalsãooooooooooooooooo!!Criei este tópico para que possamos debater mais sobre a segurança nos scripts....Não sei nada sobre isto, mas quero aprender....Se der até que este fique como fixo, pois isto é importante....Que este tópico sirva para por idéias e soluções aos programas criados, desde formuláios com BD até coisas e aplicações complexas....Dicas de como dispor a estrutura, os arquivos, contra invasões...sei lá...coisas diversas....Já que as grandes equipes têm equipes com pessoas só destinadas à segurança de seus sites!! Podemos nós tb fazer nossos códigos mais seguros!!É isso, que todos coperem!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom se esse tópico tiver aceitação eu penduro ele enquanto tivermos movimento nele ...abraçosMarcio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não sei muita segurança em script, php, mas eu uso um serviço que a SCAN dá http://www.scan.com.br, ela monitora o seu site.

 

Quando o seu site fica fora do ar ela avisa por e-mail, quando volta também e ainda possui um Sistema Anti-Hacker muito interessante.

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

IMPEDINDO INJEÇÕES SQL...

 

Existe um grande problema em formulários html que depois de postados executam uma consulta ao banco de dados:

 

PHP [/tr][tr]

<?

echo "<form action=\"login.php\">";

echo "E-Mail <input type=\"text\" name=\"mail\"><br>";

echo "<input type=\"submit\" value=\"Acessar\">";

echo "</form>";

?>

[/tr]

 

Pois então, no login.php poderiamos ter o seguinte código, um exemplo muito simples:

 

PHP [/tr][tr]

<?

$sql = "SELECT * FROM tabela WHERE email = '".$mail."';

//...

?>

[/tr]

 

O problema está em como utilizamos essa string sql. Mas como funcionaria uma injeção sql??? Veja:

 

Se no form onde você deve digitar e-mail para acessar a área restrita se digitar :

 

' or 1=1 --

Com absoluta certeza você estará logado!!! Mas por que??

Veja:

A string sql ficaria assim:

 

"SELECT * FROM tabela WHERE email = '' or 1=1 --'"

Onde oque pode-se notar é que o sql seria interpretado assim: "Seleciona-se tudo da tabela "tabela" onde a coluna email é igual a vazio '' ou 1=1 " comentando-se o resto do sql com "--", como 1=1 é verdadeiro, ele se loga no sistema!!

 

Mas como resolver isso???

 

PHP [/tr][tr]

<?

$sql = "SELECT * FROM tabela WHERE email = '".addslashes($mail)."';

//...

?>

[/tr]

 

Basta usar a função addslashes do php que trata dos caracteres especiais, ou seja, se você digitar ' or 1=1 -- ele vai montar a string sql dessa maneira:

 

"SELECT * FROM tabela WHERE email = '\' or 1=1 --"

Dessa forma, a interpretação da string sql seria assim: "Seleciona-se tudo da tabela "tabela onde a coluna email é igual a '\' or 1=1 --'", ou seja, a injeção sql se tornou uma string, esse sql retornaria false e o hacker não teria acesso ao sistema!!!

 

Espero ter colaborado!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

eh... sql injection eh famosão...

 

mas tem outra coisa tb.. includes...

muita gente quando eh novata no php somente pra deixar a pagina bonitinha.. coloca um código do tipo:

 

PHP [/tr][tr]

$pagina = $GET['page'];

include($pagina");

[/tr]

 

daí vem qualquer pessoa má intencionada.. e carrega qualquer tipo de script malicioso no servidor (dependendo do servidor dah pra ter acesso a muita coisa por causa de um simples erro do 'programador').. pra resolver eh simples.. soh usar if ou switch pras opções possíveis..

 

PHP [/tr][tr]

$pagina = GET['page'];

if ($pagina == "home"){

include ("home.php");

} elseif ($pagina == "blabla") {

include ("blabla.php");

}

[/tr]

 

 

simples, mas eu sempre vejo esse 'erro' por aí..

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí fast...

desculpa, mas...

eu não entendi mtu bem o que você quis dizer....

ao invés de só utilizar os includes po um if ou switch...pq???

pq? você sabe o q o include faz neh? ele pega o código da pagina (include('pagina.php')) e executa ele.. ateh aí tudo bem.. daí você chega lah e faz uma pagina assim:

 

PHP [/tr][tr]

$pagina = $_GET['page'];

include ($pagina);

[/tr]

 

(um exemplo bem simples.. hehe).. mas tudo bem.. funciona tranquilo se você colocar lah.. index.php?page=jogos.htm por exemplo.. vai incluir a pagina jogos.htm q tah na mesma pasta... soh q daí chega a pessoa mal intencionada.. e coloca na url

 

index.php?page=http://www.site.com/script.php

 

e dentro desse script em php (principalmente se o server for linux)... ele poderá usar comandos do tipo exec() ou shell_exec() entre outros.. podendo fazer o q quizer no servidor.. concorda?

 

intaum.. eh isso.. pq se ele usar o IF por exemplo...

 

PHP [/tr][tr]

$pagina = GET['page'];

if ($pagina == "home"){

include ("home.php");

} elseif ($pagina == "blabla") {

include ("blabla.php");

}

[/tr]

 

e a pessoa digitar lah na url denovo..

index.php?page=http://www.site.com/script.php

o q q vai acontecer? nada.. hehe.. =)

 

deu pra entender agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

EAeeee caros amigos do PHP

 

aproveitando que estao falante aeee de includes, vou passar um pouco do que conheco tambem.

Assim todo mundo quando começa a trabalhar com includes coloca la o nome do include que faz a conexao com o DB como include "conexao.inc"

 

Vamos supor que você esta colocando todo o seu codigo inclusive os includes na pasta /home

 

Tenta digitar por exemplo assim http://endereco_da_pagina/home/conexao.inc.

 

Vai aparecer tudo !!!!!!!!!!! sua senha e login do DB um prato feito para o invasor

 

Tipo coloquem seus includes numa pasta nao muito comum tipo /bin ou /inc um nome nao comum para ser descoberto.

 

E coloca os nomes dos includes um pouco diferentes tb tipo um include que faz conexao com DB como include "conecta_db_.inc"

 

Ou si quiser coloca o include como extensao .php caso o invasor descubra o include ele nao vai ver o codigo pois o PHP é uma linguagem que roda no servidor trazendo para o browser somente uma pagina em branco.

 

Valeus !!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra coisa importante tbm é fazer um bom sistema de login que valida cada pagina visitada e ant sql injection e php injection

 

e ja vi pessoas fazerem um sistema de login ate bom mas depois mata tudo validando errado exemplo:

 

o cara entra e loga e se ele tiver com os dados ok o cara seta uma variavel tipo

logado = true , isso matou o login pois apartir dai basta digitar no url um logado=true que aceita e ficou inutil o sistema de login, isso é só um exemplo ja vi outros casos semelhantes onde o cara deixa o cara logado entrar da maneira errada é que nem encher a casa de fechaduras e travas mas deixar as chaves debaixo do tapete :D

 

principais regras de segurança é sempre ter a ultima versao do php, mysql,etc...

tirando a versao do php5 que é outra historia, pois no caso do php tem muita gente que usa versoes antigas e ate o php 4.1.7 descobriram uma falha de segurança e corrigiram no php 4.1.8 e tem pessoas que ainda usam o php 4.0 ou o 3

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.