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

在php中使用用户输入数据。什么';更好吗?,php,user-input,Php,User Input,我试图找出管理用户输入的关于他可能插入的不需要的标签的数据的最佳方法: 剥离标签()-标签被移除,不会插入数据库中 标签插入到数据库中,但当读取该字段并将其显示给用户时,我们将使用htmlspecialchars() 有什么更好的,这些有什么缺点吗 这取决于您的优先级: 如果显示用户输入的特殊字符很重要(例如在StackOverflow上),那么您需要将此信息存储在数据库中,并在显示时对其进行清理-在这种情况下,您至少需要使用htmlspecialchars()来显示输出(如果不是更复杂的

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

  • 剥离标签()-标签被移除,不会插入数据库中
  • 标签插入到数据库中,但当读取该字段并将其显示给用户时,我们将使用htmlspecialchars()
有什么更好的,这些有什么缺点吗


这取决于您的优先级:

  • 如果显示用户输入的特殊字符很重要(例如在StackOverflow上),那么您需要将此信息存储在数据库中,并在显示时对其进行清理-在这种情况下,您至少需要使用
    htmlspecialchars()
    来显示输出(如果不是更复杂的话)
  • 如果您只需要纯文本注释,请在将其粘贴到数据库之前使用
    strip_tags()
    ——这样可以减少需要存储的数据量,并减少在屏幕上显示数据时的处理时间
标记被插入到数据库中,但是当读取该字段并将其显示给用户时,我们将使用htmlspecialchars()

这个。您通常希望人们能够键入少于符号和符号的字符,并将它们显示在页面上<代码>htmlspecialchars在每个文本到HTML输出步骤上(无论该文本是直接来自用户输入,还是来自数据库,或者完全来自其他地方)都是实现这一点的正确方法。在处理输出编码问题时,处理输入是一种根本不合适的策略


当然,你需要一种不同的逃避方式 — 或参数化 — 用于将文本放入SQL字符串。

为保护用户输入而采取的措施完全取决于数据在什么上下文中使用。例如:

  • 如果要将其插入SQL数据库,则应使用参数化语句。PHP的
    mysql\u real\u escape\u string()
    也能正常工作
  • 如果要在HTML页面上显示它,则需要去除或转义HTML标记
  • 通常,当您将用户输入与另一种形式的标记或另一种语言混合时,在将该语言的元素放入该上下文之前,需要从输入中转义或剥离该语言的元素
上面的最后一点是下一点:许多人认为应该始终保持原始输入。当您以后决定以不同的方式使用数据时,这非常有意义,例如,HTML标记在新上下文中不是什么大问题。此外,如果你的网站在某种程度上受到了破坏,你有一个确切的输入记录

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