Ir para conteúdo

POWERED BY:

Arquivado

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

Sérgio Mandrake

mysql_real_escape_string

Recommended Posts

Opa, estou melhorando a segurança de um sistema e estou utilizando a função mysql_real_escape_string() para dados do tipo string, segue abaixo o trexo do código:

 

$type = strtolower(gettype($value));

       switch ($type) {
           case 'boolean':
               if ($value === true) {
                   return '1';
               } elseif ($valeu === false) {
                   return '0';
               }

               return !empty($value) ? 1 : 0;
               break;
           case 'integer':
           case 'float':
           case 'double':
               if (is_numeric($value)) {
                   return $value;
               }
               break;
           case 'null':
           case 'string':
               if (is_null($value) || empty($value)) {
                   $value = 'NULL';
               }

               return '\'' . mysql_real_escape_string($value, $this->connection) . '\'';
               break;
       }

 

todos os dados com aspas são escapados corretamente, mas quando executo o query e envia pro banco de dados, seja UPDATE, INSERT, vai sem o escape, por exemplo o SQL fica:

INSERT INTO questoes VALUES ('titulo aqui', 'esse testo \'contem\' aspas')

mas se olhar no banco de dados não tem aspas quando pego os dados com SELECT também vem sem aspas.

 

Minha dúvida é, tá escapando corretamente? se alguém enviar um SQL Injection vou correr o risco do SQL Injection funcionar?

 

Att,

Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

O escape serve justamente para ajudar a evitar o SQL Injection, entretanto, no banco os dados são inseridos sem o escape, está correto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade a contra barra nesse caso serve pra forçar a inserção do caractere na string, por exemplo:

<?php
         $x = 'escape na variável\'x\';';
         $y = "variável sem scape 'y';";
         // ...
         echo $x , $y ;

 

Veja às aspas usadas na variável x , sem a \, teríamos um problema na hora que executar o código, já que temos a contra barra, o caractere será exibido normalmente .. e como o Henrique Falou, a contra barra não será exibida ..

 

Pra dar um escape e inserir a barra ao mesmo tempo, você tem que adicionar mais duas barras precedentes dá primeira .. exemplo:

<?php
     $x = 'escape na variável\\\'x\';';

 

Essa contra barra também, não serve somente para escape de caracteres, serve para inserir uma quebra de linha, isso se a string for um '\n' por exemplo ..

 

Se você fizer o seguinte

$x = 'escape na variável\n aeiou';

 

E visualizar o código fonte, não vai ter acontecido nada .. mas, se você fizer :

$x = "escape na variável\n aeiou";

 

A Saída será

escape na variável
aeiou

 

Existem outros caracteres como \t, \n também .. http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.double

 

;)

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.