Интересно, есть ли недостатки или плохая практика при выполнении следующей процедуры:
вместо того, чтобы делать следующее:
Поскольку мы показываем тот же самый $ user_input во многих местах, он чувствует себя более эффективно, делая это на входе вместо этого, есть ли недостатки / плохая практика / эксплойт-способность в этом так?
Ура!
Хорошие ответы на вопрос:
@Matt: В общем, чтобы сохранить читаемость и сопровождение, попробуйте сохранить его как можно ближе к оригинальному, нефильтрованному контенту. Это зависит от двух вещей: будет ли какой-либо другой человек / программа ссылаться на эти данные? Нужно ли легко редактировать данные?
@Sjoerd: существует недостаток, если вы хотите отображать данные как нечто иное, чем HTML, например, CSV-загрузку, PDF и т. Д.
Это зависит от двух вещей:
Преимущество метода 1 заключается в том, что в случае, когда данные используются в одном месте , и htmlentities()
будет вызываться каждый раз, вы сохраните этот шаг.
Однако это приведет к заметному улучшению, если данные HTML очень большие. В общем, чтобы сохранить читаемость и удобство обслуживания, постарайтесь сохранить его как можно ближе к оригинальному, нефильтрованному контенту.
На самом деле, вы можете обнаружить, что HTML – это не то, что нужно хранить в любом случае. Возможно, лучше сохранить что-то вроде Markdown и просто преобразовать его в HTML при просмотре.
Я бы советовал против этого. Если вам когда-либо понадобится эти данные для чего-либо другого, кроме отображения его в виде HTML (отображение на консоли, отправка текстового сообщения, запись в журнал и т. Д.), Вам придется его вернуть.
Хорошей практикой является применение таких преобразований только в последний момент. Используйте mysql_escape перед вставкой в базу данных, используйте htmlentities (или htmlspecialchars) перед отображением в виде HTML. Таким образом, вы всегда знаете, где должны быть ваши функции побега. Если их там нет, вы можете легко сказать, что делаете что-то неправильно. Вы также знаете, что данные в базе данных всегда чисты, и вам не нужно помнить, закодировали ли вы их, как и как их вернуть.
Существует недостаток, если вы хотите отображать данные как нечто иное, чем HTML, например, CSV-загрузку, PDF и т. Д.