В приложении, над которым я работаю, я обнаружил слабую функцию выхода, чтобы предотвратить инъекцию. Я пытаюсь доказать это, но у меня возникли проблемы с простым примером.
Функция escape работает следующим образом (пример PHP).
function escape($value) {
$value = str_replace("'","''",$value);
$value = str_replace("\\","\\\\",$value);
return $value;
}
Я понимаю, что это не касается значений, закодированных с использованием двойных кавычек ("), но все запросы строятся с использованием одинарных кавычек (').
Кто может победить эту функцию эвакуации?
Требования:
- Строка в запросах всегда заключена в кавычки.
- Двойные кавычки никогда не используются.
- Соединение с MySQL установлено на UTF8.
Простые примеры:
$sql = "SELECT id FROM users WHERE username = '" . escape($username) . "' AND password = '" . escape($password) . "'";
$sql = "UPDATE users SET email = '" . escape($email) . "' WHERE id = '" . escape($id) . "'";