Задать вопрос

Помогает ли PDO для защиты?

Начитался уроков по PDO сделал так
$username="login";
$password="password";
$conn = new PDO('mysql:host=localhost;dbname=test_db;charset=utf8', $username, $password);
$pdo_updateText = $conn->prepare('UPDATE users SET text= :text WHERE email = :email');
$pdo_updateText ->execute(array(':text '   => htmlspecialchars($_GET['text ']),':email' => $_SESSION['email']));

Так вот появился хакер какой-то в базе sample@email.tst и начал писать скрипт js типа
<script> код prompt("92923") код</script>
в поле текста которое $_GET['text ']
ну вот у меня есть страница где я вижу все тексты от пользователей, и у меня исполняется этот код js.
Как так? PDO защищает только от mysql инъекций а от этого нет? Что в коде не так, можете помочь?
  • Вопрос задан
  • 2129 просмотров
Подписаться 8 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 5
nazarpc
@nazarpc
Open Source enthusiast
PDO защищает только от mysql инъекций а от этого нет?

Совершенно верно. Prepared statements (не PDO) используются для безопасной вставки данных в БД. А если сами данные небезопасны - это уже совсем другой вопрос и решается совсем другими инструментами.
Ответ написан
Комментировать
SagePtr
@SagePtr
Еда - это святое
В данном случае это не SQL-инъекция, а XSS (вставка левого HTML-кода внутрь страницы). От XSS нужно защищаться другими способами - заменять опасные для HTML символы (треугольные скобки) на HTML-сущности.
Ответ написан
peredozo
@peredozo
Мне кажется тут проблема не при вносе данных в базу, а при выдаче.
Где-то htmlspecialchars_decode срабатывает или что-то типа того.
Если в самой базе посмотреть, данные туда вбиваются с отработанным htmlspecialchars или как есть?
<script> код prompt("92923") код</script>
Такая запись в самой БД?
&lt;script&gt; код prompt(&quot;92923&quot;) код&lt;/script&gt;gt;

Или такая?
Ответ написан
Комментировать
@gomer1726
Пропускай входные данные через эту функцию это xss атака
function namefunction($data){
		foreach($data as $key => $value){
			if(is_array($value)) namefunction($value);
			else $data[$key] = htmlspecialchars($value);
		}
		return $data;
	}
Ответ написан
trevoga_su
@trevoga_su
AlikDex: в ответе на вопрос дал исчерпывающий ответ

ты путаешь защиту базы и XSS
читай до посинения - phpfaq.ru/tech/safety
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы