【问题标题】:What precautions should be taken for storing HTML in mysql [duplicate]在mysql中存储HTML应采取哪些预防措施[重复]
【发布时间】:2012-01-15 20:54:00
【问题描述】:

可能重复:
How should be kept as HTML tags in database?

我将通过我的 php 程序的管理页面存储 HTML 代码。我在 PDO 中使用准备好的语句进行存储。但在此之前,我需要使用 htmlspecialchars() 或 htmlentities() 吗?

或者通过使用准备好的语句存储 html 可以正常工作?以后有开销吗?

稍后此 html 用于在 HTML 页面中显示为内容,并且来自数据库的此内容应呈现为 HTML 本身。

【问题讨论】:

标签: php mysql


【解决方案1】:

您应该在输出时使用 htmlspecialchars,而不是在存储时使用。pdo 将处理存储输入的安全性

【讨论】:

  • 基本准备好的语句将处理您的字符串的转义。您需要在输出时使用 htmlspecialchars 之类的东西,以确保某些用户提供的内容不会被解析,这样可以保护您的网站来自用户编写的 javascript 等内容
  • Quote: 后来这个html 被用来显示为HTML 页面中的内容,并且这个来自数据库的内容应该呈现为HTML 本身。如果你使用 htmlspecialchars() 你会得到 html 代码的文本输出。
  • 答案不建议每次都使用htmlspecialchars,如果这就是您选择否决的原因。它只是说明(由操作)提到的功能的目的是转义输出,而不是输入。这样,如果您有用户提供的内容,您可以确定,例如,他们保存的 javascript 代码不会执行。在第一条评论中添加的说明中也说明了同样的事情(“[..]某些用户提供的内容[..]")
  • 您建议使用 htmlspecialchars() 来显示不反映 OP 要求的内容,并且不要提及与字符集相关的问题。您的答案更可能适合标题为“如何防止为某些用户显示 html”的问题。也有人猜测他的管理面板有用户,他想阻止其中一些用户显示 html。因此,这应该写成评论,因为它是一个建议。我希望我已经阐明了我的立场,并且您理解它。
【解决方案2】:

确实,在您的情况下,不应该采取任何预防措施。

不需要htmlspecialchars(),因为您想显示html,如果您的站点的字符集与您在数据库中使用的字符集相同,则不需要使用htmlentities()。此外,您不必自己转义字符串,因为准备好的语句会处理这个问题。

但是,htmlentities() 不会造成任何伤害,但使用它只是浪费性能。处理字符集最简单的方法是简单地使用 UTF-8 来避免任何冲突。

【讨论】:

  • 但是您确实需要转义输入,方法是使用 PDO(推荐)或使用 mysql_real_escape_string
  • 引用:我在 PDO 中使用准备好的语句进行存储。
  • 如果存储在数据库中的文本包含<script>标签?
【解决方案3】:

参考旧帖Store HTML into MySQL database

How to store html in a mysql database

这会给你一个很好的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 2010-09-21
    • 2013-02-08
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多