Являются ли данные в вашей базе данных действительно HTML, или это данные приложения, такие как имя или комментарий, которые, как вы только что узнали, окажутся частью HTML-страницы?
Если это данные приложения, я думаю, что лучше всего:
- представляет это в форме, которая присуща среде (например, не закодирована в базе данных), и
- убедитесь, что оно правильно переведено , поскольку оно пересекает репрезентативные границы (кодируйте при создании HTML-страницы).
Если вы являетесь поклонником MVC, это также помогает отделить представление / контроллер от модели (и от формата постоянного хранения).
Представление
Например, предположим, что кто-то оставляет комментарий "Я люблю M & Ms". Вероятно, проще всего представить его в коде как текстовую строку "I love M&Ms"
, а не как строку в кодировке HTML "I love M&Ms"
. Технически, данные в том виде, в котором они существуют в коде, еще не являются HTML, и жизнь будет проще, если данные представлены настолько просто, насколько это возможно. Эти данные могут позже использоваться в другом виде, например настольное приложение. Эти данные могут храниться в базе данных, в простом файле или в файле XML, возможно, позже будут переданы другой программе. Другой программе проще всего предположить, что строка находится в «нативном» представлении для формата: "I love M&Ms"
в базе данных и обычном файле и "I love M&Ms"
в файле XML. Я бы хотел увидеть HTML-кодированное значение в XML-файле ("I love &Ms"
).
Перевод
Позже, , когда данные собираются пересечь границу представления (например, отображаются в HTML, хранятся в базе данных, текстовом файле или файле XML), тогда важно убедиться, что они правильно переведен, чтобы он был точно представлен в формате, соответствующем следующей среде. Короче говоря, когда вы хотите отобразить его на странице HTML, убедитесь, что он переведен в правильно закодированный HTML (вручную или с помощью инструмента), чтобы значение точно отображалось на странице. Когда вы собираетесь сохранить его в базе данных или использовать его в запросе, используйте escape-и / или подготовленные операторы и связанную переменную, чтобы обеспечить точное представление того же концептуального значения в базе данных. Когда вы собираетесь сохранить его в XML-файле, вы гарантируете его XML-кодировку.
Неверный перевод при пересечении границ представления является источником атак с использованием инъекций, таких как SQL-инъекции. Будьте внимательны при работе с несколькими представлениями / языками (например, Java, SQL, HTML, Javascript, XML и т. Д.).
-
С другой стороны, если вы действительно пытаетесь сохранить фрагменты HTML-страницы в базе данных, мне непонятно, что вы подразумеваете под «закодированными перед сохранением». Если это строго верный HTML, все необходимые значения уже должны быть закодированы (например, &
, <
и т. Д.).