Я разрешаю пользователям обновлять свое имя с помощью этого кода.
$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).