Я использую htmlspecialchars()
для предотвращения атак XSS. У меня есть сомнения относительно того, что является лучшим способом хранения данных в базе данных из следующего.
Способ 1. Сохраните htmlspecialchars()
пользователем значения после применения функции htmlspecialchars()
. Используя это, пользовательский ввод "<script>"
станет «& lt; script & gt;»; ,
Способ 2. Сохраните ввод пользователя как есть и примените htmlspecialchars()
во время извлечения данных и отображения их на странице.
Причина моего сомнения заключается в том, что, по моему мнению, с использованием метода 1 в базе данных будут накладные расходы, а при использовании данных метода 2 необходимо снова и снова преобразовывать по запросу через php. Поэтому я не уверен, какой из них лучше.
Для получения дополнительной информации я использую htmlspecialchars($val, ENT_QUOTES, "UTF-8")
чтобы конвертировать «и».
Пожалуйста, помогите мне очистить мои сомнения. Также дайте объяснение, если это возможно.
Благодарю.
Еще одна причина в том, что при усечении, чтобы соответствовать определенному пространству, вы застряли с мерзостями, такими как "&quo..."
. Сопротивляйтесь соблазну возиться с вашими данными больше необходимого минимума. Если вы беспокоитесь о переработке данных, кешируйте их.
HTML, избегающий данных, когда и только когда это необходимо, дает вам уверенность в том, что вы делаете. Эта:
echo htmlspecialchars($data);
намного лучше, чем:
echo $data; // The data should already come escaped from the database. // I hope.
Моя рекомендация – хранить данные в базе данных в чистом виде. Единственная причина, по которой вы хотите преобразовать ее в <script>
потому что вам нужно будет отобразить его в документе HTML позже. Но сама база данных не нуждается в том, чтобы знать, что вы делаете с данными после ее получения.
Также как и атаки XSS, разве вас не беспокоят атаки SQL-инъекций, если вы вводите пользовательский ввод в базу данных? В этом случае вы захотите избежать ввода пользователя, прежде чем поместить его в базу данных.