Я действительно смущен PDO Подготовлено заявление. Я сделал все, как говорится в документации php.net. Когда я вставил JavaScript в базу данных, а затем запросил базу данных и вывел результаты на странице, это дало мне предупреждение JavaScript, которое было в базе данных.PDO Подготовленное заявление разрешает выполнение javascript
<?php
try {
$db = new PDO('mysql:host=localhost;dbname=test', "root", "");
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$query = $db->query('SELECT * from users');
if($query->rowCount()){
$rows = $query->fetchAll(PDO::FETCH_OBJ);
foreach($rows as $row){
echo $row->user_name;
echo "<br/>";
}
} else {
echo "No results found";
}
$user_name = "<script type=\"text/javascript\">alert(\"Works\");</script>";
$user_email = "[email protected]";
$user_password = "password";
$user_status = "1";
$data = array(
":user_name" => $user_name,
":user_email" => $user_email,
":user_password" => $user_password,
":user_status" => $user_status
);
$sql = "INSERT INTO users (user_name, user_email, user_password, user_status) VALUES(:user_name, :user_email, :user_password, :user_status)";
$prepare = $db->prepare($sql);
$exec = $prepare->execute($data);
?>
PDO не дезинфицирует ничего. Если вы используете подготовленные операторы, они предоставляют метод поместить данные в базу данных SQL, которая не подвержена атакам __SQL__-инъекций. Все другие уязвимости - ваша ответственность за защиту. Вы должны использовать 'htmlspecialchars()' или какой-либо его вариант для кодирования ваших данных для вывода. –
Выходное экранирование должно выполняться контекстно-зависимым (здесь 'htmlspecialchars()' перед любым выражением 'echo'), и это не относится к интерфейсу интерфейса базы данных. – mario