Quer seu anúncio aqui ? Temos preços especiais.

09/09/2017

Como proteger minha query de ataques de injeção SQL pelo PHP

Nenhum comentário :

Ataques de injeção SQL são muito usados ultimamente e são tão simples que uma criança de 3 anos sabendo SQL consegue aplica-ló, por exemplo, há relatos de que foi este ataque que foi usado quando os dados do servidor DNS Brasil foi alterado e a página google.com.br passou a ser associada á outro endereço por algumas dezenas de minutos. Todas as linguagens 'evoluídas' que trabalham com banco de dados tem alguma função que nos ajuda a prevenir um ataque que é tão fácil de ser aplicado, mas com danos que podem ser de proporções devastadoras, se o golpe é fácil de ser aplicado é fácil de corrigir as brechas dele também, hoje tem ensinaremos como proteger sua query usando PHP, através da função prepared staments, que é suportada pelo mysqli e PDO.


Nós códigos abaixo nós usamos query com valores predefinidos, mas está prevenção só é necessária caso o dado venha do usuário ou de fontes que podem ser manipuladas por ele, por exemplo, $_GET, $_POST, $_COOKIE, $_REQUEST, pode ser necessário fazer este processo até se pegarmos o IP do usuário por meios que podem ser alterado por ele e a URL.


Se você usa mysqli

Ao invés de :


        <?php 

          $mysql = mysqli_connect('localhost', 'root', '', 'id2560387_dados');

          $var1 = 2017

          $var2 = 'Aprendizador';

          $var3 = 13.09;

          $quey = $mysql->query("INSERT INTO test VALUE ($var1, '$var2', $var3);
)
        ?>
 

Use :


  <?php 

    $mysqli = new mysqli('localhost', 'root', '', 'id2560387_dados');

    $stmt = $mysqli->prepare("INSERT INTO test VALUE (?, ?, ?)");

    $var1 = 2017

    $var2 = 'Aprendizador';

    $var3 = 13.09;

    $stmt->bind_param('isd', $var1, $var2, $var3);

    $stmt->execute();

  ?>



O primeiro parâmetro do bind_param que no exemplo está como 'isd' é definido da seguinte forma, i para valor inteiro, d para valor real, s para strings, b para variáveis de tipo blob.

Se você usa PDO

Ao invés de :


        <?php 

          $pdo = new PDO('mysql:host=localhost dbname=database', 'usuario', 'senha');

          $sql = 'INSERT INTO tabela(coluna1, coluna2, coluna3) VALUE('valor1', 'valor2', 'valor3');

          $stmt = $pdo->query($sql);

      ?>


Use :


  <?php 

    $pdo = new PDO('mysql:host=localhost dbname=database', 'usuario', 'senha');

    $sql = 'INSERT INTO tabela(coluna1, coluna2, coluna3) VALUE(?, ?, ?)';

    $stmt = $pdo->prepare($sql);

    $stmt->bindValue(1, 'valor1');

    $stmt->bindValue(2, 'valor2');

    $stmt->bindValue(3, 'valor3');

    $stmt->execute();

?>


Nenhum comentário :

Postar um comentário

Ao acessar e comentar em nossos serviços você concorda com a nossas Politicas de privacidade, com nossos Termos de Uso e com a nossas Políticas de segurança