Falhas de mysql_real_escape_string?
Eu vi algumas pessoas aqui afirmam que concatenando consultas usandomysql_real_escape_string
não irá protegê-lo (totalmente) de ataques de injeção de SQL.
No entanto, ainda estou para ver um exemplo de entrada que ilustra um ataque quemysql_real_escape_string
não protegeria você. A maioria dos exemplos esquece quemysql_query
está limitado a uma consulta e usomysql_real_escape_string
incorretamente.
O único exemplo em que consigo pensar é o seguinte:
mysql_query('DELETE FROM users WHERE user_id = '.mysql_real_escape_string($input));
Isso não protege você da seguinte entrada:
5 OR 1=1
Eu veria isso como uso incorreto demysql_real_escape_string
em vez de uma falha, ele é projetado para strings não valores numéricos. Você deve converter para um tipo numérico ou se for tratar a entrada como uma string ao sanear, deve fazer o mesmo em sua consulta e encapsular aspas em torno dela.
Alguém pode fornecer um exemplo de entrada que pode contornarmysql_real_escape_string
que não depende do tratamento incorreto de valores numéricos ou esquece quemysql_query
só pode executar uma consulta?
Edit: Estou interessado nas limitações demysql_real_escape_string
e não comparando com alternativas, percebo que há melhores opções para novos projetos e não estou disputando isso.