лучше ли экранировать / кодировать пользовательский ввод перед сохранением его в базе данных или сохранить его в том виде, как он есть в базе данных, и экранировать его при получении?
Я используюhtmlspecialchars()
функция предотвращения атак XSS. У меня есть сомнения относительно того, что является лучшим способом для хранения данных в базе данных из следующих.
Способ 1: Сохраните введенные пользователем значения после примененияhtmlspecialchars()
функция. Используя это, пользовательский ввод"<script>"
станет "& lt; script & gt;" ,
Способ 2: Сохраните пользовательский ввод как есть и применитеhtmlspecialchars()
метод при получении данных и отображении их на странице.
Причина моих сомнений в том, что я полагаю, что при использовании метода 1 в базе данных будут накладные расходы, в то время как при использовании метода 2 данные необходимо преобразовывать снова и снова при запросе через php. Поэтому я не уверен, какой из них лучше.
Для получения дополнительной информации я используюhtmlspecialchars($val, ENT_QUOTES, "UTF-8")
так что преобразует 'и ", а также.
Пожалуйста, помогите мне очистить мои сомнения. Также предоставьте объяснение, если это возможно.
Благодарю.