Czy wyeliminowanie niebezpiecznych postaci pozwala uniknąć wtrysku SQL?

Istnieje wiele wybitnych sposobów zabezpieczenia aplikacji przed zastrzykami SQL, na przykład te pytania i odpowiedzi pokazują pewne sposobyJak zapobiec iniekcji SQL w PHP?.

To pytanie dotyczy już napisanej aplikacji. Nie chcemy go modyfikować, aby poprawić jego bezpieczeństwo. Chcemy wiedzieć, że zastosowana metoda jest podatna na ataki wtryskowe lub nie.

Musimy wiedzieć, że ta część kodu jest powodem wycieku danych, czy nie?

Oto funkcja PHP, która eliminuje niektóre bezużyteczne (dla nas) i być może szkodliwe postacie:

function removeBadCharacters($s)
{
   return str_replace(array('&','<','>','/','\\','"',"'",'?','+'), '', $s);
}

Wyrzuca niebezpieczne postacie, aby uniknąć ataku SQL injection(Nie martw się o usunięte postacie, takie jak&<>/\"'?+ aplikacja ich nie potrzebuje):

$x = removeBadCharacters($_POST['data']);

mysql_query("insert into table (x) values ('".$x."');");

mysql_query("select * from into where name = '".$x."';"); 

Czy wystarczy, aby zapytania były bezpieczne?

Czy jest jakiś sposób na ominięcieremoveBadCharacters?

Jak można to złamać?

questionAnswers(4)

yourAnswerToTheQuestion