何时过滤/清理数据:在插入数据库之前还是在显示之前?

2022-08-30 18:14:26

当我准备解决输入数据过滤和清理问题时,我很好奇是否有最佳(或最常用的)实践?在将数据插入数据库之前,是过滤/清理数据(HTML,JavaScript等)更好,还是在准备以HTML格式显示数据时进行过滤/清理更好?

一些注意事项:

  • 我在PHP中这样做,但我怀疑这个问题的答案是语言不可知的。但是,如果您有任何特定于PHP的建议,请分享!
  • 这不是转义数据以进行数据库插入的问题。我已经让PDO很好地处理了这一点。

谢谢!


答案 1

在显示用户提交的数据时,普遍接受的口头禅是“过滤输入,转义输出”。

我建议在进入数据库之前不要转义html实体等内容,因为您永远不知道HTML何时不会成为您的显示媒介。此外,不同类型的情况需要不同类型的输出转义。例如,在 Javascript 中嵌入字符串需要与在 HTML 中不同的转义。以前这样做可能会让自己陷入一种虚假的安全感。

因此,基本的经验法则是,在使用前进行消毒,并专门用于该用途;不是先发制人。

(请注意,我不是在谈论为SQL转义输出,只是为了显示。请仍对 SQL 字符串的数据进行转义绑定)。


答案 2

我喜欢以原始形式拥有/存储数据。我只根据我使用它的位置来转义/过滤数据。

  • 在网页上 - 编码所有 html
  • 在 sql 上 - 终止引号
  • on url - urlencoding
  • 在打印机上 - 编码转义命令
  • 无论什么 - 为该工作编码它

推荐