PDO & Sanitize Date / Remove HTML

Я разрешаю пользователям обновлять свое имя с помощью этого кода.

$dbh = connect(); $q = $dbh->prepare('UPDATE Users SET username=:name WHERE User_ID=:id LIMIT 1'); $q->bindParam(":id", $loggedInUser->user_id, PDO::PARAM_INT); $q->bindParam(":name", $_GET['name'], PDO::PARAM_STR); $q->execute(); 

A) достаточно ли для дезинфекции информации? б) когда я помещаю теги HTML там, как <b>name</b> он на самом деле отображается жирным шрифтом на моем сайте! Есть ли опция, в которой я могу удалить PDO из HTML?

Выглядит разумно. Однако я бы предложил использовать POST вместо GET для деструктивных / манипулятивных операций. У вас гораздо меньше шансов пострадать от атак CSRF, если вы придерживаетесь данных POST, хотя это не делает вас полностью иммунными.

Если вы действительно не хотите, чтобы пользователи вводили HTML в поле имени, не беспокойтесь о фильтрации данных на пути в базу данных. htmlspecialchars() из него через htmlspecialchars() или htmlentities() .

Я всегда придерживался идеи, что данные должны поступать в базу данных как можно более сырой.

Редактирование: почти забыл, убедитесь, что ожидаемые значения в $_GET / $_POST фактически существуют, прежде чем пытаться их использовать, например

 if (isset($_POST['name'])) { // now use it 

A) Прочтите инструкцию :

Параметры для подготовленных операторов не обязательно должны указываться; драйвер автоматически обрабатывает это. Если приложение использует исключительно подготовленные операторы, разработчик может быть уверен, что SQL-инъекция не произойдет (однако, если другие части запроса создаются с несвязанным вводом, SQL-инъекция по-прежнему возможна ).

B) Никогда не доверяйте данным пользователя. Используйте htmlspecialchars .

C) Используйте $ _POST и токены для запросов, которые изменят любые данные, чтобы избежать CSRF .

Никогда не доверяйте пользовательскому вводу! Как минимум, оберните $_GET['name'] в функцию дезинфекции, например mysql_real_escape_string (), чтобы предотвратить атаки SQL Injection. А затем, когда вы выводите данные, предоставленные пользователем, обязательно оберните их в htmlspecialchars (), чтобы предотвратить атаки на межсайтовый скриптинг (XSS).