2013-03-24 4 views
1

Как говорится в названии: этот код достаточно безопасен для SQL-инъекций?Является ли этот код PDO достаточно безопасным от SQL-инъекции?

Есть ли лучший способ предотвратить SQL-инъекцию?

<?php 
$hostname = "xxx"; 
$username = "xxx"; 
$dbname  = "xxx"; 

$password = "xxx"; 
$usertable = "xxx"; 
$yourfield = "xxx"; 

$db = new PDO('mysql:host='.$hostname.';dbname='.$dbname.'', $username, $password); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$query = $db->prepare("INSERT INTO `$usertable` (first_name, last_name, username) VALUES (:first_name, :last_name, :username)"); 
$query->bindValue(':first_name', $_POST['first_name']); 
$query->bindValue(':last_name', $_POST['last_name']); 
$query->bindValue(':username', $_POST['username']); 

$query->execute(); 
?> 
+2

вопрос больше подходит для [код SE Review] (http://codereview.stackexchange.com/about). Обзор кода - это вопрос и вопрос для обмена кодами из проектов, над которыми вы работаете, для экспертной оценки. – hjpotter92

ответ

3

Если вы используете только подготовленные статусы, как в своем коде выше, вы в безопасности. AFIK не имеет других возможностей взломать ваш сайт с помощью SQL-инъекций.

Подготовить статуты засекречивают данные из команд, поэтому содержание должно выполняться как часть статута SQL.

+0

большое вам спасибо :) – user2204292

1

Да, подготовленные запросы, как правило, почти 100% защищены от SQL-инъекций. Однако я бы рекомендовал также передать в аргументе data_type значение PDO::bindParam();

См: Are Prepared Queries 100% Safe Against SQL Injections

+0

большое спасибо :) – user2204292

1

Yes this PDO code safe enough from SQL injection.

+0

большое вам спасибо :) – user2204292