악의적인 SQL 구문을 삽입하여 데이터베이스를 비정상적으로 조작하는 공격 기법입니다.
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->execute([
'username' => $username,
'password' => $hashedPassword
]);
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$stmt->execute();
function validateInput($input) {
return filter_var($input, FILTER_SANITIZE_STRING);
}
class Database {
private $pdo;
public function query($sql, $params = []) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
return $stmt;
}
public function select($table, $where = [], $fields = ['*']) {
$sql = "SELECT " . implode(',', $fields) . " FROM " . $table;
if (!empty($where)) {
$sql .= " WHERE " . implode(' AND ', array_map(function($item) {
return "$item = :$item";
}, array_keys($where)));
}
return $this->query($sql, $where);
}
}
$stmt = $pdo->prepare("
SELECT id, username
FROM users
WHERE username = :username
AND password = :password
");
$stmt->execute([
'username' => $username,
'password' => hash('sha256', $password)
]);
$stmt = $pdo->prepare("
INSERT INTO products
(name, price, description)
VALUES (:name, :price, :description)
");
$stmt->execute([
'name' => $productName,
'price' => $productPrice,
'description' => $productDescription
]);
// PDO 설정
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
];
$pdo = new PDO($dsn, $username, $password, $options);