我试图找出管理用户输入的有关他可能插入的不需要的标签的数据的最佳方法是什么:

  • 条带标签() - 标签被删除并且不会插入数据库中
  • 标签被插入到数据库中,但是当读取该字段并将其显示给用户时,我们将使用 htmlspecialchars()

其中有什么更好,有什么缺点吗?

问候

有帮助吗?

解决方案

这取决于您的优先级:

  • 如果显示用户输入中的特殊字符很重要(例如在 StackOverflow 上),那么您需要将此信息存储在数据库中并在显示时对其进行清理 - 在这种情况下,您至少需要使用 htmlspecialchars() 显示输出(如果不是更复杂的东西)
  • 如果您只想要纯文本注释,请使用 strip_tags() 在将其放入数据库之前 - 这样您将减少需要存储的数据量,并减少在屏幕上显示数据时的处理时间

其他提示

标签被插入到数据库中,但是当读取该字段并将其显示给用户时,我们将使用 htmlspecialchars()

这。您通常希望人们能够输入小于号和与号并将它们显示在页面上。 htmlspecialchars 在每个文本到 HTML 输出步骤(无论该文本直接来自用户输入,还是来自数据库,或者完全来自其他地方)是实现此目标的正确方法。对于处理输出编码问题来说,弄乱输入是一种完全不合适的策略。

当然,您需要不同的转义 — 或参数化 — 将文本放入 SQL 细绳。

为保护用户输入而采取的措施完全取决于数据的使用环境。例如:

  • 如果要将其插入 SQL 数据库,则应使用参数化语句。PHP 的 mysql_real_escape_string() 工作也不错。
  • 如果要在 HTML 页面上显示它,则需要剥离或转义 HTML 标记。
  • 一般来说,每当您将用户输入与另一种形式的标记或另一种语言混合时,该语言的元素都需要在放入该上下文之前从输入中转义或剥离。

上面的最后一点延续到下一点:许多人认为应始终保留原始输入。当您稍后决定以不同的方式使用数据时,这很有意义,例如,HTML 标记在新上下文中并不是什么大问题。此外,如果您的网站以某种方式受到损害,您还会记录所给的确切输入。

特别与用于在 HTML 页面上显示的用户输入中的 HTML 标签相关:如果用户输入 HTML 标签有任何可能的原因,那么只需转义它们即可。如果没有,请在显示前将其剥离。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top