Используя функцию htmlspecialchars с PDO, подготовьте и выполните

Преобразует ли специальные символы в HTML-объекты при проверке формы и запросе к базе данных, используя PHP PDO, используяhtmlspecialchars() функция действительно нужна?

Например, у меня есть веб-сайт с простой системой входа, более или менее такой:

$username = (string) htmlspecialchars($_POST['user']);
$password = (string) htmlspecialchars($_POST['pass']);

$query = $dbh->prepare("select id where username = ? and password = ?")
$query->execute($username, $password);

Обратите внимание, что я также использую приведение типов помимо рассматриваемой функции. Итак, нужно ли это? Или я могу смело использовать$username = $_POST['user']; ?

Ответы на вопрос(2)

htmlspecialchars когда у вас есть какой-то простой текст (например, пользовательский ввод или пользовательский ввод, который вы ранее сохранили в базе данных и просто извлекли из него с помощью SELECT, или текст, полученный по HTTP от стороннего поставщика и т. д., и т. д.), и вы хотите вставить егов документ HTML, Это защищает вас от XSS.

Как правило, вы не должны использовать его при вставке данных в базу данных (база данных не является HTML-документом). Вы могли бы хотеть использовать это в некоторой не HTML форме позже.

 GPzar16 июл. 2016 г., 14:37
На самом деле, после того, как пользователь заполняет форму входа в систему и имя пользователя / пароль действительно действительны, будут созданы некоторые переменные сеанса. Один из них является$_SESSION['user'] = $username и это будет показано на панели навигации. Так что в этом случаеhtmlspecialchars следует использовать, верно?
 Quentin16 июл. 2016 г., 17:06
@GPraz - Когда вы берете имя пользователя (выраженное в виде простого текста) из любого места (включая суперглобальный SESSION), а затем помещаете его в HTML-документ, да, вы должны использоватьhtmlspecialchars.
Решение Вопроса

потому что информация и примеры в книгах и в Интернете, включая php.net, вводят в заблуждение или неоднозначны. Самое важное, что вы можете узнать при разработке веб-приложений, этовход фильтра, выход выхода.

Фильтр ввода Это означает, что для любого ввода данных, предоставленных пользователем в форме или предоставленных файлом из какого-либо другого источника, отфильтруйте все, что не принадлежит. Например, если вы ожидаете числовое значение, отфильтруйте все нечисловые символы. Другим примером будет ограничение / обеспечение максимальной длины данных. Тем не менее, вам не нужно сходить с ума от этого. Например, если вы ожидаете строку текста, которая может содержать буквально любую комбинацию символов, то попытка создать фильтр, вероятно, только разочарует ваших пользователей.

Таким образом, вы, как правило, сохраняете входные данные в своей базе данных, что обеспечивает дополнительную фильтрацию.

Выход выхода Что подразумевается подвыходной выход это правильно обезопасить данные для данного носителя. В большинстве случаев этот носитель является веб-страницей (html). Но это также может быть обычный текст, xml, pdf, изображение и т. Д. Для html это означает использованиеhtmlspecialchars() или жеhtmlentities() (вы можете прочитать о различияхВот). Для других типов мультимедиа вы должны экранировать / конвертировать в зависимости от ситуации (или вообще не использовать ее в случае необходимости).

Теперь ваш вопрос заключается в том, следует ли вам использоватьhtmlspecialchars() на входных данных, которые будут использоваться в качестве параметров запроса SQL. Ответ - нет. Вы не должны изменять данные в любом случае.

Да, следует учитывать данные, содержащиеся в $ _POSTопасно, Вот почему вы должны: 1) защититься от внедрения SQL, используя подготовленные операторы и связанные параметры, как вы делаете, и 2) правильно экранировать / преобразовать данные, найденные в $ _POST, если вы поместите их в html.

Есть много фреймворков для PHP, которые обрабатывают эти детали для вас, и я рекомендую вам выбрать и использовать один. Однако, если вы этого не сделаете, вы все равно можете создать безопасное и надежное приложение. Используете ли вы фреймворк или нет, ясильно Предлагаю вам прочитать рекомендации, предложенныеOWASP, Невыполнение этого требования приведет только к кошмару безопасности для вашего веб-приложения.

Ваш ответ на вопрос