@accountnujen

Нужно ли как-то обрабатывать код перед записью его в БД через PDO?

Пользователь отправляет в БД кусок кода, который был напечатан в textarea. Нужно ли что-то с ним сделать, чтобы избежать взлома, если используешь PDO?
$code = $_POST['code'];
$incode = $pdo->prepare('INSERT INTO userocde (email, code) VALUES (:email, :code)');
$incode->execute(['email' => $email,'code' => $code]);

Пользователь может через форму, обрабатываемую таким образом, загрузить вредоносный код?

Спойлер. Нужно ли вообще обрабатывать при PDO строки или нет?
Где-те видел вот такую конструкцию, которую потом сохранил. Там советовали перед загрузкой в БД выполнить вот такую функцию для каждого из полей:
foreach ($_POST as $key => $value) {
	$value = trim( $value );
	$value = preg_replace("/[^\x20-\xFF]/","",@strval($value));
	$value = strip_tags( $value );
	$_POST[$key] = $value;
}

Это вообще актуально или нет для PDO?
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Вы понимаете, что делает каждая строка в вашей найденной супер-функции?

// убираем концевые пробельные знаки (пробел, таб, переводы строк и т.п)
$value = trim( $value );

// преобразуем строку в строку, да еще с подавлением ошибки O_O. Даже не знаю что сказать
@strval($value)

// убираем все символы кроме кодов с 20 (пробел) по FF
$value = preg_replace("/[^\x20-\xFF]/","",@strval($value)); 

// Убираем html теги
$value = strip_tags( $value );


Вот теперь сами и скажите – вам всё это нужно делать?

Пользователь может через форму, обрабатываемую таким образом, загрузить вредоносный код?

Тут нужно понять, что вы имеете ввиду под вредоносным кодом.

SQL инъекции тут не будет.
HTML код загрузить можно. И если вы не будете его обрабатывать при выводе на страницу, он сработает (там может быть какой-то js скрипт).
Но это совершенно не значит, что вам нужно искать какую-то мега-универсальную функцию очистки данных.
Всегда нужно смотреть по ситуации. Например, в форме комментирования могут быть разрешен некоторый набор html тегов для форматирования сообщения (как, например, на этом сайте), и применять не глядя strip_tags ко входным данным, будет ошибкой.
На международном сайте могут регистрироваться люди с именами, включающими символы, которые вы запретили (/[^\x20-\xFF]/).

Короче, ко всему и всегда нужно подходить с умом.
И никогда не копипасти код из интернета, если не понимаешь каждую строчку.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы