"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > A injeção SQL pode desvio `mysql_real_escape_string ()` devido a problemas de codificação de caracteres?

A injeção SQL pode desvio `mysql_real_escape_string ()` devido a problemas de codificação de caracteres?

Postado em 2025-02-20
Navegar:337

Can SQL Injection Bypass `mysql_real_escape_string()` Due to Character Encoding Issues?

use o problema de codificação de caracteres para ignorar a injeção de SQL de mysql_real_escape_string ()

...

Considere o seguinte código PHP:

$ login = mysql_real_escape_string (getfropost ('login')); $ senha = mysql_real_escape_string (getfropost ('senha')); $ sql = "Selecione * da tabela onde login = '$ login' e senha = '$ senha'";

$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));

$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";

Método de ataque:

Os ataques de dependem das seguintes etapas:

Defina o conjunto de caracteres:

Selecione uma codificação (por exemplo, GBK), onde a mesma sequência de bytes representa caracteres não-ASCII e o backslash ASCII ('\').
  1. Construa a carga útil: use uma carga útil cuidadosamente construída que contém caracteres multibyte inválidos, garantindo que seu último byte represente uma barra de barriga ASCII.
  2. Call mysql_real_escape_string ()
  3. :
  4. cliente acredita que a conexão usa um conjunto de caracteres diferente (por exemplo, latim1), então mysql_real_escape_string () Insira uma barra de barriga antes das cotações, resultando em uma string sintaticamente válida. Enviar Query: A carga útil escapada se torna parte da instrução SQL, permitindo que o invasor ignore a proteção esperada.
  5. Princípio de trabalho:
O problema principal é que o conjunto de caracteres esperado pelo servidor não corresponde ao conjunto de caracteres considerado pelo cliente. Embora

mysql_real_escape_string () seja escapado com base na codificação de conexão definida pelo cliente, em alguns casos, trata os caracteres multibyte inválidos como um único byte, incluindo o uso de , defina nomes

em vez de

mysql_set_charset () case. como resultado de:

Este ataque pode ignorar a declaração de pré -processamento simulada da PDO, mesmo que a instrução de pré -processamento simulada esteja desativada.

Remedy:

use conjuntos de caracteres não vulneráveis, como UTF8MB4 ou UTF8, para mitigar esse problema. Ativar no__backslash_escapes O modo SQL também fornece proteção.

Exemplo seguro:

sempre defina o conjunto de caracteres corretamente usando

mysql_set_charset () ou parâmetros do conjunto de caracteres DSN da PDO. As declarações reais de pré -processamento em MySqli também são imunes a esse ataque.

para concluir:

while

mysql_real_escape_string () geralmente fornece proteção forte, é importante estar ciente de tais casos potenciais de borda para garantir a defesa completa contra a injeção de SQL.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3