как я могу определить, работает ли mysql_real_escape_string

Как говорится в названии, как я могу определить, работает ли 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; ?>