Ваше замешательство довольно распространено, потому что информация и примеры в книгах и в Интернете, включая php.net, являются вводящими в заблуждение или двусмысленными. Самое главное, что вы можете узнать при разработке веб-приложений: filter input, escape output.
Фильтр входного Это означает, что для любого ввода данных ли предоставленного пользователем в форме или предоставленный файлом из другого источника, отфильтровать все, что не принадлежит. Например, если вы ожидаете числовое значение, отфильтруйте любые нечисловые символы. Другим примером может быть ограничение/обеспечение максимальной длины данных. Однако вам не нужно сходить с ума от этого. Например, если вы ожидаете строку текста, которая может содержать буквально любую комбинацию символов, то попытка создать фильтр будет, вероятно, только сорвать ваших пользователей.
Таким образом, вы обычно храните входные данные в своей базе данных, как предусмотрено с опцией фильтрации.
побег Выход Что подразумевается под выхода побега является правильно сделать безопасными данные для данного средства массовой информации. В большинстве случаев этот носитель представляет собой веб-страницу (html). Но это также может быть простой текст, xml, pdf, изображение и т. Д. Для html это означает использование htmlspecialchars()
или htmlentities()
(вы можете прочитать об отличиях here).Для других типов носителей вы избегаете/конвертируете по необходимости (или вообще не при необходимости).
Теперь, ваш вопрос заключается в том, следует ли использовать htmlspecialchars()
для ввода данных, которые будут использоваться в качестве параметров запроса sql. Ответ - нет. Вы не должны каким-либо образом изменять данные.
Да, данные, содержащиеся в $ _POST, считаются опасными. Именно поэтому вам следует: 1) защититься от SQL-инъекции, используя подготовленные операторы и связанные параметры, как вы это делаете, и 2) правильно вывести/конвертировать данные, найденные в $ _POST, если вы поместите его в html.
Существует много фреймворков для PHP, которые обрабатывают эти данные для вас, и я рекомендую вам выбрать и использовать их. Однако, если вы этого не сделаете, вы все равно можете создать безопасное и безопасное приложение. Независимо от того, используете ли вы фреймворк или нет, я сильно предлагаю вам ознакомиться с рекомендациями, предложенными OWASP. Несоблюдение этого требования приведет только к кошмару безопасности для вашего веб-приложения.
На самом деле, после того, как пользователь заполнит форму для входа, и имя пользователя/пароль действительно действительно, будут созданы некоторые переменные сеанса. Одним из них является '$ _SESSION ['user'] = $ username', и он будет отображаться на панели навигации. Поэтому в этом случае следует использовать 'htmlspecialchars', правильно? – GPraz
@GPraz. Когда вы берете имя пользователя (выраженное как обычный текст) из любого места (включая SESSION superglobal), а затем помещаете его в HTML-документ, да, вы должны использовать 'htmlspecialchars'. – Quentin