Ir para conteúdo
Fórum Script Brasil
  • 0

Com funciona SQL Injection e como se prevenir?


HUGO BORGES

Pergunta

14 respostass a esta questão

Posts Recomendados

  • 0

Depois de você entender oque Sql Injection olhando o link do cara ai de cima.

Você pode usar essa função para evitar esse maldito ^^

//Metodo anti-injection
    function anti_injection($sql) {
    // remove palavras que contenham sintaxe sql
        $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
        $sql = trim($sql);//limpa espaços vazio
        $sql = strip_tags($sql);//tira tags html e php
        $sql = addslashes($sql);//Adiciona barras invertidas a uma string
return $sql;
    }
Chamando função
<?php
$login = anti_injection($_POST['login']);
$senha = anti_injection($_POST['senha']);
//Resto do codigo
?>

Link para o comentário
Compartilhar em outros sites

  • 0

david.lyonnais pelo que entendi onde tiver assim:

$login = $_POST['login'];

Tenho que colocar assim :

$login = anti_injection($_POST['login']);

E isto ira prevenir o SQL Injection?

OBS: Tenho que colocar anti_injection($_POST em todos os POST?

----------------------------------------------------- EDIT ---------------------------------

Olha achei este aqui na internet:

<?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;
}
?>
anti_sql_injection($_POST[’usename’])

Queria saber se este aqui funciona?

Editado por HUGO BORGES
Link para o comentário
Compartilhar em outros sites

  • 0

Tem que coloca a função que eu disse no $_POST e $_GET.

Se fazer isso já é o bastante.

Ex.:

$id = anti_injection($_GET['id']);
$usuario = anti_injection($_POST['usuario']);

A função esta toda comentada dai você consegue identifica o que cada linha de codigo faz.

@edit

Em TODOS $_POST e $_GET

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

  • 0

Vlw pela ajuda, criei um arquivo Inject.php, e para chamar a função faço assim:

include "Inject.php";


$id = anti_injection($_GET['id']);
$usuario = anti_injection($_POST['usuario']);
Desse geito funciona? Tenho que colocar no $_REQUEST também? ------------------------------ EDIT --------------------------------- Notei um erro aqui: Deprecated: Function sql_regcase() is deprecated in /opt/lampp/htdocs/www/HDR Info/Inject.php on line 6 Já coloquei isto no meu sistema de login, quando digito o login e senha correto ele entra normal, mas quando digito errado, ele fala login e senha errado e aparece um erro na linha 6 onde esta esta parte:
$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

O que sera que pode ser?

Editado por HUGO BORGES
Link para o comentário
Compartilhar em outros sites

  • 0

Deprecated: Function sql_regcase() is deprecated

Quer dizer que a função caio em desuso tenta coloca o seguinte

//Metodo anti-injection
    function anti_injection($sql) {
    // remove palavras que contenham sintaxe sql
        $sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/","",$sql);
        $sql = trim($sql);//limpa espaços vazio
        $sql = strip_tags($sql);//tira tags html e php
        $sql = addslashes($sql);//Adiciona barras invertidas a uma string
return $sql;

Retire a função slq_regcase().

Link para o comentário
Compartilhar em outros sites

  • 0

beleza meu arquivo inject.php ficou assim:

<?php
 // Metodo anti-injection
 function anti_sql_inject($sql) {

  // Remove palavras que contenham sintaxe sql
  $sql = preg_replace("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/","",$sql);
  $sql = trim($sql); //limpa espaços vazio
  $sql = strip_tags($sql); //tira tags html e php
  $sql = addslashes($sql); //Adiciona barras invertidas a uma string
  return $sql;
 }
?>
Agora posso ficar tranquilo contra inject? So mais uma coisa, acho que ficaria legal colocar uma mensagem para quem tentar usar inject, tipo assim:
echo "&lt;script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";

Mas em que logar devo colocar isto?

--------------------------- edit ------------------------------

E como posso testar para ver se o site esta protegido contra Inject?

Editado por HUGO BORGES
Link para o comentário
Compartilhar em outros sites

  • 0

Pra mostrar erro você pode fazer assim:

Vai mudar totalmente a função.

<?php
// Metodo anti-injection
function anti_sql_inject($sql) {

  // Remove palavras que contenham sintaxe sql
  $sql = trim($sql); //limpa espaços vazio
  $sql = strip_tags($sql); //tira tags html e php
  $pattern = "/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\|\"|\')/";
  $match = preg_match($pattern,$sql);
  if($match){
  echo "<script>alert('ERRO. SQL Inject detectado.'); history.back();</script>";
  exit;
  }
  return $sql;
}
?>

Para testar tenta colocar no input que vai passar via post: uma aspa simple '

Se retorna o erro sql inject já ta funfando se retorna nada qr dizer que não ta funcionando ai você volta aqui pra eu a gente ver onde pode esta o erro.

Pronto.

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

  • 0

PDO é:

The PHP Data Objects e uma nova estenção que vem no php5 para você ter um controle dos banco de dados como exemplo o ADODB que você controla varios banco de dados somente mudando uma linha de comando com o PDO é a mesma coisa.

Um pequeno tutorial de PDO nesse link:

Tutorial PDO

Essa classe "já vem embutido" com uma função anti SQL Injection.

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...