继我询问构建自定义 cms 时转义内容的问题之后,我想了解不从数据库中转义内容有多危险 - 假设数据在插入数据库之前已经过过滤/验证。
我知道转义输出是最佳做法,但我不确定将值“注入(inject)”到要显示的页面内容中有多容易,甚至可能。
例如,假设使用简单的 echo 语句显示带有 HTML 标记的内容:
<p>hello</p>
无可否认,就内容写作而言,它不会赢得任何奖项 ;)
我的问题是,假设在数据库插入之前进行了过滤/验证,有人可以出于恶意目的更改它吗?
最佳答案
始终为适当的上下文转义;无论是 JSON 还是 XML/HTML 还是 CSV 还是 SQL(尽管您应该为 SQL 使用占位符,为 JSON 使用库)等.
为什么? 因为它是一致的。并且保持一致也是一种懒惰的形式:您不需要考虑数据是否“对 HTML 安全”,因为这不重要。懒惰(以一种好的方式)是一种有值(value)的编程特征。 (在这种情况下,它也懒得避免由于将来的变化而必须修复“错误”。)
不要忽略转义“因为它永远不会包含需要转义的数据”.. 因为有一天,在许多情况下,该假设会是错误的。
关于php - 不先转义就输出某些内容有多危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570849/