Segue abaixo um exemplo de código vulnerável:
<?php $id = $_GET['id']; $sql = "Select * from tbnoticia where id =".$id; $num_linhas = mysql_num_rows( $sql ); ?>
considerando que o endeço da página que passa o id seja :
www.testes.com.br?id=5
então o sql ficaria:
"Select * from tbnoticia where id =5";
se no sql não tiver nada que garanta a integridade do valor do id, o usuário poderá fazer o seguinte ataque e obter o nome de todas as tabelas do banco de dados, não só isso ele poderá passar comando sql que mostrem dados de outros usuários, permissões, entre outras informações que não deveriam ser mostradas:
select * from tbnoticias where id = 0 union select group_ .........
Para proteger o código é simples, verificando se o id é inteiro você impedirá que o usuário, passe parâmetro via url.
Código seguro - Casting
<?php
$id = (int) $_GET['id'];
$sql = "Select * from tbnoticia where id =".$id;
$num_linhas = mysql_num_rows( $sql );
?>
ou
<?php
$id = (int) $_GET['id'];
if(is_int($id)){
$sql = "Select * from tbnoticia where id =".$id;
$num_linhas = mysql_num_rows( $sql );
}else{
echo "Erro !!";
}
?>
Muito obrigado, sou um programador novo e me interesso muito pela segurança do sistema, andei testando alguns scripts antigos e é incrível como ninguém pensava em SQLI em seus sistemas
ResponderExcluirSim verdade, dá pra achar bastante sistemas com falhas de segurança, mas ainda há bastante conteúdo sobre esse assunto , logo postarei mais, espero ter ajudado.
ExcluirEste comentário foi removido pelo autor.
ResponderExcluir