PDO & Sanitize Date / Удалить HTML - PullRequest
4 голосов
/ 24 мая 2011

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

    $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?

Ответы [ 3 ]

2 голосов
/ 24 мая 2011

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

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

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

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

if (isset($_POST['name'])) {
    // now use it
1 голос
/ 24 мая 2011

A) Чтение руководство :

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

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

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

0 голосов
/ 24 мая 2011

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

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