在php中使用用户输入数据。什么更好?

时间:2009-11-30 16:13:00

标签: php user-input

我正在试图找出管理用户输入的有关他可能插入的非理想标签的数据的最佳方法:

  • strip_tags() - 标签已移除且未插入数据库
  • 标签插入数据库中,但在阅读该字段并将其显示给用户时,我们将使用 htmlspecialchars()

哪个更好,这些中有任何缺点吗?

此致

3 个答案:

答案 0 :(得分:3)

这取决于您的优先级:

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

答案 1 :(得分:2)

  

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

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

当然,您需要一个不同的转义 - 或参数化 - 将文本放在 SQL 字符串中。

答案 2 :(得分:0)

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

  • 如果要将其插入SQL数据库,则应使用参数化语句。 PHP的mysql_real_escape_string()也很有效。
  • 如果您要在HTML页面上显示它,则需要删除或转义HTML标记。
  • 一般情况下,每当您将用户输入与其他形式的标记或其他语言混合时,该语言的元素需要在放入该上下文之前从输入中转义或删除。

上面的最后一点进入下一点:许多人认为应该始终保持原始输入。当你以后决定以不同的方式使用数据时,这很有意义,例如,HTML标签在新的上下文中并不是什么大问题。此外,如果您的网站在某种程度上受到了损害,您将获得确切输入的记录。

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