Я очень смущен кое-чем и задавался вопросом, может ли кто-нибудь объяснить.
В PHP я проверяю пользовательский ввод, поэтому htmlentitiies, mysql_real_escape_string используются перед вставкой в базу данных, а не для всего, поскольку я предпочитаю использовать регулярные выражения, когда могу, хотя мне трудно с ними работать. Теперь, очевидно, я буду использовать mysql_real_escape_string, так как данные поступают в базу данных, но не уверен, что я должен использовать htmlentities() только при получении данных из базы данных и отображении их на веб-странице, поскольку это делается до того, как вручную изменяются данные, введенные человеком, который не сохраняет свою первоначальную форму, что может вызвать проблемы, если я захочу использовать эти данные позже для использования в других целях.
Так, например, у меня есть гостевая книга с 3 полями: имя, тема и сообщение. Теперь очевидно, что поля могут содержать что угодно, например вредоносный код в тегах js, в основном что угодно, теперь меня смущает, скажем, я злонамеренный человек, и я решил использовать теги js и некоторый вредоносный код js и отправить форму, теперь в основном у меня есть вредоносный бесполезные данные в моей базе данных. Теперь, используя htmlentities при выводе вредоносного кода на веб-страницу (гостевую книгу), это не проблема, потому что htmlentities преобразовал его в безопасный эквивалент, но в то же время у меня есть бесполезный вредоносный код в базе данных, которого я бы предпочел не иметь.
Итак, после того, как я сказал все это, мой вопрос: должен ли я принять тот факт, что некоторые данные в базе данных могут быть вредоносными, бесполезными данными, и пока я использую htmlentities для вывода, все будет в порядке, или я должен делать что-то еще?
Я прочитал так много книг, в которых говорится о фильтрации данных при их получении и их экранировании при их выводе, поэтому исходная форма сохраняется, но они только когда-либо приводят примеры, такие как обеспечение того, чтобы поле было только int с использованием функций, уже встроенных в php и т. д., но я так и не нашел что-нибудь в отношении обеспечения чего-то вроде гостевой книги, где вы хотите, чтобы пользователи вводили все, что они хотят, но также и то, как вы будете фильтровать такие данные, кроме mysql_real_escape_string(), чтобы гарантировать, что это не нарушит запрос БД?
Может кто-нибудь, наконец, закрыть эту путаницу для меня и сказать мне, что я должен делать и что лучше всего?
Спасибо всем, кто может объяснить.
Ваше здоровье!