Temos n formas de corrigi-la, vou citar um código vulnerável que utilizei na minha outra matéria sobre proteção de SQL Injection.
<?php //inicio do php
//Fazer conexão com o banco
$conexao = mysql_connect("endereço do banco", "login", "senha")
or die ("Erro na conexão ao banco de dados.");
$db = mysql_select_db("site")//Seleciono a base de dados no caso (site)
or die ("Erro ao selecionar a base de dados.");
$id=$_GET['id'];
$resultado = mysql_query("SELECT * FROM noticias WHERE id=$id", $conexao);
while($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)){
echo $linha['texto'];
echo "<br/>";
}
?>
Nesse exemplo irei mostrar como tratar a vulnerabilidade quando os dados passados são via GET. Podemos utilizar o cast para indicar o tipo do dado passado ou da função mysql_real_escape_string(), essa função nos permite trabalhar com os tipos de dados que serão passados vejamos esse exemplo.<?php
$conexao = mysql_connect("endereço do banco", "login", "senha")
or die ("Erro na conexão ao banco de dados.");
$db = mysql_select_db("site")//Seleciono a base de dados no caso (site)
or die ("Erro ao selecionar a base de dados.");
$id=$_GET['id'];
$sql = sprintf("SELECT
*
FROM
noticias
WHERE
id='%s'",mysql_real_escape_string($id));
$resultado=mysql_query($sql);
while($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)){
echo $linha['texto'];
echo "<br/>";
}
?>
Usando essa função tratamos qualquer caractere inválido será tratado. Isso é muito útil em telas de login pois lá devemos redobrar o cuidado. Havia citado sobre o cast, bem quando for utilizar de por exemplo um portal de notícias para exibi-las eu até recomendo o cast pois irá economizar nos códigos. Veja o exemplo bastante simples:<?php
$conexao = mysql_connect("endereço do banco", "login", "senha")
or die ("Erro na conexão ao banco de dados.");
$db = mysql_select_db("site")//Seleciono a base de dados no caso (site)
or die ("Erro ao selecionar a base de dados.");
$id=(int)$_GET['id'];
$sql = "SELECT
*
FROM
noticias
WHERE
id=$id";
$resultado=mysql_query($sql);
while($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)){
echo $linha['texto'];
echo "<br/>";
}
?>
E um último exemplo para tratar telas de login completo:<?php
if (isset($_POST['login'])&&(isset($_POST['login']))){
$conexao = mysql_connect("endereço do banco", "login", "senha")
or die ("Erro na conexão ao banco de dados.");
$db = mysql_select_db("site")//Seleciono a base de dados no caso (site)
or die ("Erro ao selecionar a base de dados.");
$login=$_POST['login'];
$senha=$_POST['senha'];
$sql = sprintf("SELECT
*
FROM
usuarios
WHERE
user='%s' AND senha='%s'",mysql_real_escape_string($login),mysql_real_escape_string($senha));
$resultado=mysql_query($sql);
while($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)){
echo $linha['texto'];
echo "<br/>";
}
}
?>
By: R410X
Nenhum comentário:
Postar um comentário