Ir para conteúdo

Arquivado

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

Jeovane Carvalho

Usando mysqli_real_escape_string no Mysqli

Recommended Posts

Olá pessoal, nesses dias atrás fiquei numa dúvida usando mysqli_real_escape_string, não sei se estou usando da forma errada que acabei desenvolvendo em meu projeto e apliquei ela desta maneira conforme abaixo:

 

Por exemplo eu recebendo os dados no método POST eu trabalho assim:

$nome     = $MySQLi->real_escape_string(strip_tags(trim($_POST['nome'])));

Seria errado usar da maneira acima a função mysqli_real_escape_string e não iria escapar os caracteres especiais, ou seria desta foram abaixo a correta:

$nome=trim(strip_tags(mysqli_real_escape_string($MySQLi,$_POST['nome'])));

Notem que na 2º opção eu tive que colocar o nome da minha conexão como pedia como parâmetro o $MySQLi...

 

E se eu fizesse da outra maneira abaixo usando o addslashes :

$senha_scape  =trim(strip_tags(addslashes(mysqli_real_escape_string($MySQLi,$_POST['senha']))));

Seria forçado e desnecessário, sabendo que seria inserido as barras invertidas na tabela junto com os dados...

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira forma é a correto, ao meu ver. Afinal, se espaços vazios e tags HTML não lhe interessam, você deve se livrar disso ANTES de ajustar os valores para o banco de dados.

 

A segunda forma vai escapar possíveis tags HTML à toa, pois você vai removê-las em seguida.

 

 

Porém, existe uma forma melhor e mais segura. Use Prepared Statements

 

Veja:

http://php.net/manual/pt_BR/mysqli.quickstart.prepared-statements.php

http://www.ultimatephp.com.br/como-usar-pdo-com-banco-de-dados-mysql/ (exemplo usando PDO, mas o tema de Prepared Statements está bem explicado)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Beraldo mais uma vez obrigado, você e assim como outros sempre são uma luz no final do túnel para nós com nossas infinitas dúvidas rs rs, então quer dizer que a 1º função que postei :

$nome     = $MySQLi->real_escape_string(strip_tags(trim($_POST['nome'])));

seria a mais certa e posso deixar como esta dessa maneira acima a função para escapar não perde a sua eficácia certo, legal quando a sua recomendação já tinha lido um pouco sobre isso.

 

OBS: E aquela função ant inject que muitos usam além dessas para eu reforçar meu sistema de conteúdo, vi muitas aqui só que são antigas e muitas funções depreciadas, você me indicaria alguma...

 

E enquanto isso, vou seguir sua recomendação e estudar mais sobre * Prepared Statements * pois sempre acompanho seus posts e acho bem legal, obrigado mais uma vez...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo, tudo bem ?

 

Caso queira também pode usar a forma mais simples como abaixo:


 $nomeClie = strip_tags(trim($_POST['nomeClie']));

Atenciosamente,

 

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Remazela, só que no seu caso , a forma ficaria mais insegura , porque o $MySQLi->real_escape_string serve para escapar os caracteres especiais e evitar em partes a injeção se SQL...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigo.

 

Como disse acima, a forma mais simples.

 

Mas também pode usar assim:

<?php
$con=mysqli_connect("localhost","root","","my_db");

// Connection
if (mysqli_connect_errno()) {
  echo "Erro ao acessar o MySQL: " . mysqli_connect_error();
}

// escape variables for security
$nam_Ult = mysqli_real_escape_string($con, $_POST['nam_Ult']);
$nam_Clie = mysqli_real_escape_string($con, $_POST['nam_Clie']);

$sql="INSERT INTO cliente (nam_Ult, nam_Clie)
VALUES ('$nam_Ult', '$nam_Clie')";

if (!mysqli_query($con,$sql)) {
  die('Error: ' . mysqli_error($con));
}
echo "Gravado com Sucesso.";

mysqli_close($con);
?>

Espero ter ajudado.

 

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim também a sua é válida eu só acrescentaria o trim e strip_tags para escapar caracteres especiais, agora eu estou procurando uma função anti inject para reforçar o meu sistema..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tratar os caracteres especiais é a melhor forma de evitar SQL Injection. Não precisa de outra função pra isso.

Muitas removem strings como "SELECT", "DELETE" etc, mas assim você está alterando a informação que o usuário forneceu.

 

Apenas escapar já é suficiente.

 

 

Falo mais sobre isso neste post:

http://rberaldo.com.br/seguranca-em-sistemas-de-login-protecao-contra-sql-injection/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, estou criando essa função abaixo, mas está informando erro. até o momento não consigo identificar. Poderiam, por favor, ajudar?? abs.

 

erro informado:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in

 

// LIMPA STRING
function ClearString($str){
$link = Connect();
$result = trim(strip_tags(mysqli_real_escape_string($link,$str)));
return $result;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigos, estou criando essa função abaixo, mas está informando erro. até o momento não consigo identificar. Poderiam, por favor, ajudar?? abs.

 

erro informado:

Warning: mysqli_real_escape_string() expects parameter 1 to be mysqli, null given in

 

// LIMPA STRING

function ClearString($str){

$link = Connect();

$result = trim(strip_tags(mysqli_real_escape_string($link,$str)));

return $result;

}

Sua string esta vindo vazia..

Compartilhar este post


Link para o post
Compartilhar em outros sites
function AntSql($str)
{
    if (!is_numeric($str)) {
        $str = get_magic_quotes_gpc() ? stripslashes($str) : $str;
        $str = function_exists('mysql_real_escape_string') ? mysql_real_escape_string($str) : mysql_escape_string($str);
    }
    return trim($str);
}

essa forma correta ?

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.