Думаю каждый задумывался на вопросом как же правильно фильтровать пред записью в бд.
Есть несколько вариантов фильтрации, но они не дают 100% защиты от sql-injection
1 вариант htmlspecialchars
<?php
$_POST['text'] = htmlspecialchars($_POST['text']);
?>
Ее конечно можно применять перед вставкой в базу, но не надо думать, что она защитит от инъекций. Инъекции - это не только кавычки.
2 вариант magic qoutes
<?php
$_POST['text'] = addcslashes($_POST['text']);
?>
Экранирует кавычи, но и опять же не стоит забывать, что: Инъекции - это не только кавычки.
***
Самой безопасной ф-цией считается mysql_escape_string но её нету в PDO, но в нем есть prepare/execute, что безопасно, но не совсем удобно, к примеру если нужно проверить существование строки в таблице нужно будет писать тонну кода, но куда проще использовать обычный запрос query
***
Выслушаю ваши варианты по поводу фильтрирования
Использую mysqli и не парюсь. Хочу делаю подготовленный запрос, хочу обычный. htmlspecialchars лучше использовать при выводе данных а не при записи в базу.
Wins, по сути в pdo тоже самое, можно подготовленный, можно обычный, но обычный же надо фильтровать, вот к чему клоню
Wins, а разве нет? Зачем тогда вообще делать проект если он изнутри не полностью защищен
Nets, в смысле? Я о том что профильтровать входящую переменную не составляет никакого труда.
Пост #2.
А так, скажу, что тонн кода каждый раз не надо будет писать, если сделать или воспользоваться готовым классом обвёрткой для PDO.
В любом случае, используя подготовительные выражения, ничего фильтровать самому (при записи в бд), не надо. Это жирный плюс.
Мне интересно в чем этот плюс заключается? По моему мнению это успокоительное для неуверенных в себе.
На самом деле это не всегда хорошо, даже я сказал бы в болшенстве случаев.
Я сегодня писал код в одном движке игры..
Так там разраб всего этого помимо prepare использовал еще и htmlspecialchars и ещё некоторые фильтры при выборке, записи.. Поехавший
Оно (prepare) для этого по большей мере и было создано. Костылей на верх не надо.