Как говорится в названии, как я могу определить, работает ли mysql_real_escape_string, как это должно быть, не дожидаясь взлома?
Проверьте значения, которые вы получите от него.
Отправьте ему какой-то текст, который он должен убежать, например, Ed O'Neil
(который должен вернуться как Ed O''Neil
или Ed O\'Neil
Ed O''Neil
)
Создайте единичный тест, который отправит все символы, которые он должен выполнить, и проверит его вывод.
НО: Почему бы вам просто не использовать параметризованные запросы с PDO? Подобно:
$dbh = new PDO([...]); $sth = $dbh->prepare("SELECT foo FROM bar WHERE baz=:baz"); $sth->execute(array(":baz" => $mybaz));
Это самый безопасный способ, и благодаря PDO это почти так же просто, как в Perl.
Расширить то, что «R. Bemrose ', вот пример кода для этого. Обязательно замените учетные данные mysql своим собственным.
<?php // Connect $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') OR die(mysql_error()); $user = "Ed O'Neil"; $password = "SQL_INJECTION ';'alter table xyz';"; // Query $query_safe= sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", mysql_real_escape_string($user), mysql_real_escape_string($password)); // Query $query_not_safe= sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'", $user, $password); echo $query_safe."\n"; echo $query_not_safe; ?>