php - 不先转义就输出某些内容有多危险

标签 php html content-management-system xss

继我询问构建自定义 cms 时转义内容的问题之后,我想了解不从数据库中转义内容有多危险 - 假设数据在插入数据库之前已经过过滤/验证。

我知道转义输出是最佳做法,但我不确定将值“注入(inject)”到要显示的页面内容中有多容易,甚至可能。

例如,假设使用简单的 echo 语句显示带有 HTML 标记的内容:

<p>hello</p>

无可否认,就内容写作而言,它不会赢得任何奖项 ;)

我的问题是,假设在数据库插入之前进行了过滤/验证,有人可以出于恶意目的更改它吗?

最佳答案

始终为适当的上下文转义;无论是 JSON 还是 XML/HTML 还是 CSV 还是 SQL(尽管您应该为 SQL 使用占位符,为 JSON 使用库)等.

为什么? 因为它是一致的。并且保持一致也是一种懒惰的形式:您不需要考虑数据是否“对 HTML 安全”,因为这不重要。懒惰(以一种好的方式)是一种有值(value)的编程特征。 (在这种情况下,它也懒得避免由于将来的变化而必须修复“错误”。)

不要忽略转义“因为它永远不会包含需要转义的数据”.. 因为有一天,在许多情况下,该假设是错误的

关于php - 不先转义就输出某些内容有多危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11570849/

相关文章:

javascript - 如何使用 jquery 在移动模式下不缩小菜单栏中的文本?

php - 如何将自托管的 wordpress 和 live 站点的已安装插件升级到最新可用版本而不会遇到任何问题?

php - 更快地浏览图像

php - 在给定可能重复项的情况下选择表中前 100 个最大值

php - 如果零后为空,为什么要选择选项值

html - 在 Dart 中将 HTML 字符串解析为 DOM

javascript - 使用 Javascript 动态创建的输入不显示下拉列表

html - 背景颜色不会填充整个背景到边框边缘

c# - 开源 ASP.NET MVC CMS 的评论/比较

php - 如何在 Doctrine2 中为类表继承指定外键列?