Ir para conteúdo

POWERED BY:

Arquivado

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

Levi Gonçalves

[Resolvido] Sql injection

Recommended Posts

Olá pessoal... estou meio (super) inseguro em relação ao sql injection. No código abaixo eu adaptei a função anti_sql_injection($string) ao meu script (ta redundante eu sei, pois agora ele confere duas vezes o usuário e senha). Ele não dá erro, mas também não sei se está cumprindo sua função de proteção.

 

Perguntas:

1) Este código, do jeito que está, protege contra sql injection?

2) Onde é necessário colocar essa função? Somente quando faço login ou em outras consultas, inclusões, alterações, etc?

 

Alguém poderia me dar uma forcinha e falar um pouco mais sobre esse assunto?

<?php
function anti_sql_injection($string)
{
   $string = get_magic_quotes_gpc() ? stripslashes($string) : $string;

   $string = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($string) : mysql_escape_string($string);

   return $string;
}

if (!empty ($_POST['usuario'])) {
session_start(); 
session_register("logar"); 

$_SESSION["logusuario"] = $_POST['usuario'];
$_SESSION["logsenha"] = $_POST['senha'];
$_SESSION["logsenha"] = md5($_SESSION["logsenha"]);

mysql_connect ('localhost', 'root', '') or die (mysql_error());
mysql_select_db ('classificados') or die (mysql_error());

$sql = "SELECT * FROM cadastro WHERE usuario = '" . anti_sql_injection($_SESSION["logusuario"]) . "' AND senha = '" . anti_sql_injection($_SESSION["logsenha"]) . "'";

$result = mysql_query ($sql);

while ($reg = mysql_fetch_array ($result)){
if ( $_SESSION["logusuario"] == $reg['usuario'] and $_SESSION["logsenha"] == $reg['senha']) {
   header("Location: login.php");
break;
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

1) Este código, do jeito que está, protege contra sql injection?

Aqui tem um tópico com um debate muito interessante sobre este assunto.

http://forum.imasters.com.br/index.php?/topic/276729-seguranca-em-php/

 

2) Onde é necessário colocar essa função? Somente quando faço login ou em outras consultas, inclusões, alterações, etc?

Sempre que houver envio de dados pelo usuário, ou seja, formulários, url quando você pegar algo por GET...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

acresentando ao que o matias ja disse ... em todas as entradas de dados .. no caso os $_POST e $_GET .. so que as vezes você pode encontrar outras soluções mais eficientes .. quando envia um campo codigo do produto por exemplo .. o codigo vai se por exemplo ... 23 48 17 e por assim vai.. tu nao vai encontra la nos codigos "dois" por exemplo .. entao se você antes de pegar fizer uma verificação se o parametro é um numero para rodar o script acho que funciona legal tambem.. e ainda se ganha performace :D

 

<?php
if(!is_numeric($_GET['a'])){
echo 'se fero ! nesse parametro so vai numero :P';
exit();
}
echo $_GET['a'].' é numero';
?>

valww

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.