Если вы только начинаете исправлять свой код против атак (то есть Атаки SQL-инъекций ), вам будет лучше проверять параметризованные запросы. То, что вы в основном делаете с ними, это отделяет ваш контент (входные данные) от команд (sql), поэтому вы никогда не сможете спутать их с возможной вводимой пользователем информацией, такой как имя.
Вы можете попробовать начать с использования класса PDO
:
Вы можете начать читать руководство PDO
здесь: http://php.net/manual/en/book.pdo.php, и на этой странице есть хороший пример: http://php.net/manual/en/pdo.prepared-statements.php
<?php
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
// insert another row with different values
$name = 'two';
$value = 2;
$stmt->execute();
?>
Однако вам не нужно использовать PDO
, вы также можете использовать mysqli
, см. http://php.net/manual/en/mysqli.prepare.php
<?php
/* Script A -- We are already connected to the database */
$stmt = mysqli_prepare($link, "INSERT INTO table VALUES (?, ?, 100)"); /* Query 1 */
mysqli_stmt_bind_param($stmt, "si", $string, $integer);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt); // CLOSE $stmt
?>
Поскольку имя является отдельным значением, оно никогда не может быть командой SQL, поэтому вы будете в безопасности автоматически.