Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

vulnerabilidades mysql_escape_string

A resposta ruim:


Não confiável. Você está se referindo a mysql_escape_string() , que não leva em conta a codificação da conexão (enquanto mysql_real_escape_string() faz).

Então, talvez uma string cuidadosamente criada, com um codepoint UTF8 incompleto cuidadosamente criado na frente, pode resultar em, digamos, um sinal de aspas sendo escapado por mysql_escape_string() mas o escape em si sendo ignorado pelo MySQL uma vez que o "verá" como um caractere UTF8.

Por exemplo.:
0xC2' OR 1=1 ;--

seria escapado por mysql_escape_string() como
0xC2\' OR 1=1 ;--

que seria montado para
WHERE password='0xC2\' OR 1=1 ;--';

e visto pelo MySQL (se a codificação de conexão adequada estiver em vigor) como, digamos,
WHERE password='€' OR 1=1 ;[--';]    <-- the bracketed part is considered a comment and ignored

que seria uma injeção SQL clássica.

Mas isso se baseia no fato de que você especificou, talvez por distração, uma função duplamente obsoleta . Se você realmente estava se referindo a mysql_real_escape_string() , então não funcionaria.

Além disso, isso pressupõe que nem o servidor nem a camada de aplicativo (por exemplo, PHP) empregam qualquer tipo de validação de conjunto de caracteres ao preencher a entrada. Se o fizessem, o UTF8 inválido seria excluído na chegada e nunca seria visto pelo mysql_escape_string , o que seria então o suficiente.

A verdadeira resposta:


Não use mysql_escape_string (ou mysql_whatever ) de forma alguma. Eles foram descontinuados e seu código pode parar de funcionar. Em vez disso, use funções PDO.