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.

questionAnswers(2)

yourAnswerToTheQuestion