O que eu preciso para escapar ao enviar uma consulta?

votos
18

Quando você executar uma consulta SQL, você tem que limpar as cordas ou os usuários podem executar SQL malicioso em seu site.

Eu normalmente só têm uma escape_string função (blah), que:

  • Substitui escapes ( \) com escapes duplos ( \\).
  • Substitui aspas simples ( ') com um aspas simples escape ( \').

É este o adequado? Existe um buraco no meu código? Existe uma biblioteca que pode fazer isso de forma rápida e confiável para mim?

Eu gostaria de ver soluções graciosos em Perl, Java e PHP.

Publicado 05/08/2008 em 19:45
fonte usuário
Em outras línguas...                            


11 respostas

votos
7

Para o máximo de segurança, desempenho e correção usar declarações preparadas. Veja como fazer isso com muitos exemplos em diferentes idiomas, incluindo PHP:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Respondeu 05/08/2008 em 20:38
fonte usuário

votos
2

Também gostaria de escapar comentários (Double Dash)

--
Respondeu 05/08/2008 em 19:46
fonte usuário

votos
1

Um grande coisa para usar em PHP é o DOP . Ele tem um monte de chutes de fora de lidar com garantir o seu SQL (e todas as suas coisas SQL em geral). Ele suporta instruções preparadas, que percorrer um longo caminho no sentido de frustrar ataques de injeção SQL.

Um grande cartilha sobre DOP está incluído no livro Os PHP Anthology 101 essenciais dicas, truques e Hacks por Davey Shafik etc. 2ª Ed . Torna o aprendizado uma brisa e é excelente como uma referência. Eu nem sequer tem que pensar em outra coisa que não a consulta SQL real anymore.

Respondeu 05/08/2008 em 20:28
fonte usuário

votos
0

Em consulta MySQL, quando utilizar LIKE, também certificar-se de escapar dos "_" personagens, pois não é escapado por mysql_real_escape_string.

Para referência, verifique aqui

Respondeu 14/10/2008 em 05:57
fonte usuário

votos
0

Use declarações preparadas.

Respondeu 16/09/2008 em 22:14
fonte usuário

votos
0

a API C do MySQL tem a sua própria mysql_escape_string(). Usá-lo ou equivalente seria melhor.

Respondeu 14/08/2008 em 18:59
fonte usuário

votos
0

Usar consultas preparadas / parametrizadas!

Respondeu 05/08/2008 em 20:55
fonte usuário

votos
0

No PHP, eu estou usando um presente e eu vou apreciar cada comentário sobre isso:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

Precisa de mais uma verificação se um campo pode ser NULL:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

É isso divirta-se! (Espero que o post vai enviar corretamente sublinhados e não & # 95;)

Respondeu 05/08/2008 em 20:21
fonte usuário

votos
0

Você é melhor fora de usar declarações preparadas com espaços reservados. Você está usando PHP, .NET ... de qualquer forma, elaborou demonstrações irá fornecer mais segurança, mas eu poderia fornecer uma amostra.

Respondeu 05/08/2008 em 19:48
fonte usuário

votos
0

Qual linguagem está usando? Parece que praticamente todos eles têm built-in funções SQL de escape que seria melhor usar.

Por exemplo, PHP tem mysql_real_escape_string e addslashes .

Respondeu 05/08/2008 em 19:46
fonte usuário

votos
-1

Não tenho a certeza se o MySQL suporta consultas parametrizadas, em caso afirmativo, você deve fazer um esforço para ir por esse caminho. Isso irá garantir a entrada de usuários não podem fazer nada malicioso.

Caso contrário, alguns "maus" caracteres para além do que você mencionou seria vírgula (;) e comentários (- e / * * /).

Respondeu 05/08/2008 em 19:49
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more