Intereting Posts
эта динамика (столбец & таблица) PHP выбирает запрос безопасным? передача объектов из глобальной области в модель Доктрина MongoDB найти по id Я хочу использовать несколько функций select2 onchange динамически где между датами в ларавеле 4 красноречивых Что делают операторы '& =' и '= &'? Каковы допустимые символы в именах PHP, методах, классах и т. Д.? Неопределенный индекс при группировании и суммах в многомерном массиве Есть ли способ сохранить разделитель при использовании php explode или других подобных функций? Скрипт умирает без ошибок после вызова mysql_connect () Самый эффективный подход для многоязычного веб-сайта PHP Рабочий пример реализации «Аутентификация на основе токенов» с использованием «JSON Web Token (т.е. JWT)» в PHP и MySQL? Требуется тело ответа HTTP 500 с файлом_get_contents (PHP) Получить первый день недели в PHP? Невозможно получить выход MySql с PHP

лучше ли убеждать / закодировать пользовательский ввод, прежде чем хранить его в базе данных или сохранить его, как он есть в базе данных, и избежать его при извлечении?

Я использую htmlspecialchars() для предотвращения атак XSS. У меня есть сомнения относительно того, что является лучшим способом хранения данных в базе данных из следующего.

Способ 1. Сохраните htmlspecialchars() пользователем значения после применения функции htmlspecialchars() . Используя это, пользовательский ввод "<script>" станет «& lt; script & gt;»; ,

Способ 2. Сохраните ввод пользователя как есть и примените htmlspecialchars() во время извлечения данных и отображения их на странице.

Причина моего сомнения заключается в том, что, по моему мнению, с использованием метода 1 в базе данных будут накладные расходы, а при использовании данных метода 2 необходимо снова и снова преобразовывать по запросу через php. Поэтому я не уверен, какой из них лучше.

Для получения дополнительной информации я использую htmlspecialchars($val, ENT_QUOTES, "UTF-8") чтобы конвертировать «и».

Пожалуйста, помогите мне очистить мои сомнения. Также дайте объяснение, если это возможно.

Благодарю.

Еще одна причина в том, что при усечении, чтобы соответствовать определенному пространству, вы застряли с мерзостями, такими как "&quo..." . Сопротивляйтесь соблазну возиться с вашими данными больше необходимого минимума. Если вы беспокоитесь о переработке данных, кешируйте их.

  1. Почему вы ожидаете, что вы всегда будете использовать данные в контексте HTML? «I <3 you» и «I & lt; 3 you» – это не те же данные . Поэтому сохраните данные, как это предусмотрено в базе данных. Нет никаких оснований для его спасения.
  2. HTML, избегающий данных, когда и только когда это необходимо, дает вам уверенность в том, что вы делаете. Эта:

     echo htmlspecialchars($data); 

    намного лучше, чем:

     echo $data; // The data should already come escaped from the database. // I hope. 

Моя рекомендация – хранить данные в базе данных в чистом виде. Единственная причина, по которой вы хотите преобразовать ее в &lt;script&gt; потому что вам нужно будет отобразить его в документе HTML позже. Но сама база данных не нуждается в том, чтобы знать, что вы делаете с данными после ее получения.

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