Ничто не говорит о том, что вы не можете очистить данные перед вставкой базы данных.В конце концов, если ваш сценарий / сайт / компания имеет определенную политику относительно того, что приемлемо в поле формы, лучше удалить все, что не разрешено, перед сохранением.Таким образом, вы выполняете санацию только один раз, перед вставкой / обновлением данных, а не КАЖДЫЙ раз, когда вы извлекаете данные.
Если вы разрешаете HTML-сущности для, скажем, акцентированных символов, но не для HTML-тегов, тогда вам придетсяпроверьте недействительные сущности (&foobar;
?), а также теги HTML.Так как вы не позволяете им, не беспокойтесь о хранении их.Если вам требуется действительный адрес электронной почты, проверьте, соответствует ли он RFC 5322, и сохраните его только после того, как пользователь введет правильные данные.(То, существует ли этот адрес электронной почты на самом деле, - другое дело).
Теперь давайте разберемся одно.Есть разница между очисткой и спасением.Очистка означает буквально очистить - вы удаляете из данных все, что вам не нужно.Вы можете либо молча отбросить его, либо сообщить пользователю об ошибке и попросить его исправить.С другой стороны, экранирование - это просто средство кодирования данных, поэтому они отображаются правильно.
С вашей строкой My title is "Manager"
вам не нужно очищать ее, поскольку в этом нет ничего действительно неправильного или оскорбительного.Что вам нужно сделать, так это избежать его, по крайней мере, htmlspecialchars()
, чтобы встроенные двойные кавычки не «ломали» вашу форму.Если вы вставите его дословно, большинство браузеров увидят в нем value="My title is"
и некоторый фиктивный атрибут / мусор Manager""
.Итак, вы запускаете его через htmlspecialchars и в итоге получаете My title is "Manager"
, который без проблем встраивается в value=""
.Никакой дезинфекции, только правильное кодирование.
Теперь, когда эта форма отправлена, вам снова нужно санировать / проверять, так как данные были в руках потенциально злонамеренного пользователя, и данные могли бытьизменено на My title is <script>document.location='http://attacksite.com';</script>pwn me
.
По сути, рабочий процесс должен быть:
- предоставить пользователю форму
- получить отправленные данные.
- очистить данные
- если форма заполнена неправильно, отображаются ошибки и перейти к 1)
- экранировать данные для запроса sql
- вставить в базу данных
потом позже
извлечение данных из базы данных экранирование / кодирование в зависимости от ситуации, однако будет отображаться отображение данных.если данные переходят в форму, выполните 1-6, как раньше.