C:\xampp\htdocs\dvwa\safe_sqli.php
<?php
// Безопасная версия модуля Blind SQL Injection (DVWA)
// Отличие от уязвимого low.php: используется PDO с плейсхолдером,
// пользовательский ввод не попадает в текст SQL-запроса.
$dsn = 'mysql:host=127.0.0.1;dbname=dvwa;charset=utf8mb4';
$pdo = new PDO($dsn, 'root', '', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false, // серверные плейсхолдеры
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
$id = $_GET['id'] ?? '';
// Дополнительная валидация: id должен быть целым числом
if (!ctype_digit((string)$id)) {
http_response_code(400);
echo '<pre>Invalid ID</pre>';
exit;
}
$stmt = $pdo->prepare(
'SELECT first_name, last_name FROM users WHERE user_id = :id'
);
$stmt->execute([':id' => $id]);
$user = $stmt->fetch();
if ($user) {
echo '<pre>User ID exists in the database.</pre>';
echo '<pre>First name: ' . htmlspecialchars($user['first_name'], ENT_QUOTES, 'UTF-8') . '</pre>';
echo '<pre>Surname: ' . htmlspecialchars($user['last_name'], ENT_QUOTES, 'UTF-8') . '</pre>';
} else {
http_response_code(404);
echo '<pre>User ID is MISSING from the database.</pre>';
}
http://localhost/dvwa/safe_sqli.php?id=1
http://localhost/dvwa/safe_sqli.php?id=1' OR '1'='1