Intereting Posts
Открытие подключения к HTTP-серверу с помощью PHP Как проверить, выполняется ли запрос через AJAX в CodeIgniter? я не могу сделать число строк внутри, пока цикл Идентификация коротких кодов WordPress с использованием регулярного выражения Помощь Функция mysql_query (INSERT …) не работает в моем коде Я создаю небольшое веб-приложение, и я хочу использовать JSON API для ввода сообщений WordPress в мое веб-приложение Загрузить URL-адрес, не работающий в API Google Диска PHP Отображение определенных значений атрибутов продукта на страницах категорий архивов как переформатировать строку datetime в php? Как вызвать список продуктов в представлении produt Magento Конвертировать видео в фоновом режиме php ffmpeg? jquery jtable с tinymce CakePHP: разбиение на страницы, сортировка, фильтрация данных из кэшированных таблиц Как отправить уведомление по электронной почте при посещении страницы?

Использует htmlspecialchars () для обработки HTML-данных для ввода-вывода, для плохой конструкции базы данных MySQL?

Возможный дубликат:
Каковы наилучшие функции деструкции ввода PHP?

Использует htmlspecialchars () для обработки HTML-данных для ввода-вывода, для плохой конструкции базы данных MySQL?

Если вы вместо этого просто не разрешаете эти «опасные» признаки, потому что в нем будут отображаться b-теги, i-теги и другие? И как это сделать?

Я спрашиваю, потому что он говорит по вики http://en.wikipedia.org/wiki/HTML_sanitization

«Санитарная обработка HTML может использоваться для защиты от межсайтовых сценариев и атак SQL-инъекций путем дезинфекции любого HTML-кода, представленного пользователем».

Поэтому, помимо использования подготовленных инструкций PDO, чтобы предотвратить SQL-инъекции, я хочу использовать этот htmlspecialchars для всех входных и выходных данных. Но, может быть, я должен использовать что-то еще?

Является ли это хорошим способом сделать инструкцию insert?

$type= htmlspecialchars($_POST['animaltype']); $name= htmlspecialchars($_POST['animalname']); $age= htmlspecialchars($_POST['animalage']); $descr= htmlspecialchars($_POST['animaldescription']); $foto= htmlspecialchars($_POST['animalfotourl']); $date=htmlspecialchars($_POST['animalhomelessdate']); $sqlquery = "INSERT INTO animals_tbl(animaltype, animalname, animalage, animaldescription, animalfotourl, animalhomelesssince) VALUES (':type',':name',':age',':descr', ':foto', ':date')"; $stmt = $conn->prepare($sqlquery); $stmt->bindParam(':type',$type, PDO::PARAM_STR); $stmt->bindParam(':name',$name, PDO::PARAM_STR); $stmt->bindParam(':age',$age, PDO::PARAM_INT); $stmt->bindParam(':descr',$descr, PDO::PARAM_STR); $stmt->bindParam(':foto',$foto, PDO::PARAM_STR); $stmt->bindParam(':date',$date, PDO::PARAM_STR); $stmt->execute(); 

htmlspecialchars() достаточно для htmlspecialchars() текста для браузеров. Это защитит других пользователей сайта от атак XSS.

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


Чтобы проиллюстрировать, почему это плохая идея, рассмотрите веб-сайт, который работает над внедрением JSON-управляемого API. Если они хранят HTML-кодированные данные в своей базе данных, у них есть два варианта: (a) иметь HTML-кодированные данные в своих ответах JSON (что не имеет смысла) или (b) декодировать HTML обратно до его первоначальной формы до JSON -кодирование. Оба варианта субоптимальны.

Данные поступают в базу данных, строки JSON входят в документы JSON, а данные в формате HTML – в HTML-документы. Не смешивайте их!

Если вы используете PDO – с использованием правильных используемых подготовленных инструкций – вам не нужно санировать ваш вход. Но чтобы убедиться, что вы не получите XSS-атак, я бы использовал htmlspecialchars, прежде чем вы положили его в свою БД.