Segurança em Web-Sites. (Parte 1-SQLInjection)
Começo agora o primeiro de 3 tutos sobre segurança em Web-pages que será publicado aqui no meu blog
, serão abordados 3 assuntos: SQL-Injection(Parte 1), XSS Exploiting(Parte2) e outros bugs gerais(Parte 3).
então bora começar a parte 1!
O SQLInjection é uma falha que permite o hacker executar comandos sql no seu servidor atravez da injeção de comandos SQL na maioria das vezes no metodo http GET. Veja um exemplo….
Temos aqui uma pagina de noticias que le a noticia de ID=3:
www.site.com.br/noticias.php?noticia=3
No script que lê esta noticia o numero 3 pego na variavel GET noticia, é diretamente concatenado com a variavel de requerimento ao SQL:
mysql_query(“select * from noticias where id=’”.$_GET[noticia].”‘);
de modo que se ela é concatenada assim podemos fazer o SQL injection pela propria URL:
www.site.com.br/noticias.php?id=1‘ union select * from noticias where id = ‘3′ or id=’
que no query SQL fica assim:
mysql_query(“select * from noticias where id=’1‘ union select * from noticias where id = ‘3′ or id=’ ‘ “);
então as informacoes de duas noticias são mostradas na tela. o mesmo ocorre para outros casos como senhas informações inportantes etc, basta anular o select com um “where” capenga, fechar o comando SQL com “;” e acrescentar um “describe table” ou “show databases” que o resto vc se encaminha xD
Como podemos acabar com isto??? retirar os comandos sql??? filtrar os operadores????
Tem muita gente que faz isto mas é besteira, a solução é apenas verificar a variavel GET noticia para ver se ela É NUMÉRICA (PHP-is_numeric(string), ASP – IsNumeric(string) ) filtrar e pronto, qualquer simbolo estranho será retirado.
Agora se a variavel GET for para strings como por exemplo:
www.site.com.br/buscar.php?busca=alguma+coisa
então devemos filtrar qualquer tipo de operador SQL por expressoes regulares ou se preferir no replace (nao recomendo, use só se vc não souber expressões regulares xD), ta ai uma boa função pra filtrar variaveis que vão ser injetadas no SQL:
function limpa($campo){
$campo = get_magic_quotes_gpc() == 0 ? addslashes($campo) : $campo; //se magic_quotes tiver desligada ok, senao filtra elas xD
$campo = strip_tags($campo); //ranca qualquer tag no campo
return preg_replace(“@(–|\#|\*|;|=)@s”, “”, $campo); //ranca qualquer operador SQL no campo
}
Usando esta funcao sempre para filtrar as variaveis vc estará livre de ataques
Mas o que são magic quotes????
são caracteres codificados alternativos aos normais, por exemplo e ” são respectivamente os caracteres espaço ( ) e aspas (“), deste modo podemos esconder ou camuflar o ataque por que o preg_replace nao pegaria os magic quotes por nao seres caracteres reais apesar de ser executados como tais.O segundo tipo de ataques SQL são feitos por variaveis POST que pra quem não sabe são as que são passadas internamente pelo protocolo HTTP através de forms e inputs HTML.Do mesmo modo as variaves POST são na maioria das vezes concatenadas ao query do SQL também de modo que na entrada de um campo de login e senha como este:
<input name=”login”>
<input type=”password” name=”senha”>
é interpretados no query:
mysql_query(“select * from usuarios where login=’”.$_POST[login].”‘ senha=’”.$_POST[senha].”‘ “)
de modo que podemos injetar instruções SQL pelos campos e burlar a segurança. Se por um exemplo inserirmos o nome do usuario correto mas na senha:
‘ or 1=1 or senha=’
então na query ficaria:
mysql_query(“select * from usuarios where login=’doido7667′ and senha=’‘ or 1=1 or senha=’ ‘ “);
como de fato, 1 sera sempre igual a um, heaueahua xD, e estamos dentro do site =X
Use a função limpa que eu ja passei para limpar as variaveis POST tambemOutra coisa que ajuda bastante é apenas renomear o nome da bancos e tabelas inportantes para coisas menos obvias oOBaum, então esta foi a primeira parte de meu pequeno tutozinho básico de como proteger-se contra ataques contra seu web-site ^^
Espero que tenham gostado,
abraços.

Muito boa sua atitude de fazer certos esclarecimentos sobre a segurança em webpages. Muitos adms pecam em seus codigos fontes por nao saberem e simplesmente nao pesquisarem. estas vuls ditas acima são as pricipais responsáveis pella maioria dos sites. Muito util sua informação . Grato .
parbéns