html - 在用户提交的数据中不转义 & 符号是否存在安全风险?

标签 html string security validation escaping

在显示用户生成/提交的信息时,转义其他特殊字符但不修改与号是否存在任何安全风险?我想让我的用户自由输入 html 实体、十六进制和十进制特殊字符,而不给我的 sanitizer 程序增加不必要的复杂性。

最佳答案

这完全取决于数据放入的上下文。

在 HTML 中,表示普通 & 的主要原因通过字符引用是 avoid ambiguity作为 &也是这种字符引用的开始。这种歧义的一个流行示例是普通的 &作为 HTML 属性中 URL 参数的一部分,如下所示:

<a href="/?lang=en&sect=foobar">

这里是 &未使用相应的字符引用进行适当编码,因此解析器将其视为字符引用的开头。因为 sect 是一个 known entity in HTML , 代表节字符 § , 这个属性值实际上被解释为 /?lang=en§=foobar .

所以留下一个平原&因为它不像 HTML 中的其他特殊字符那样容易造成实际威胁,因为它们可以更改数据放入的上下文:

  • 标签定界符<>可以开始或结束标签声明,
  • 属性值分隔符"'可以开始或结束属性值声明。

为了安全起见,你应该使用 htmlspecialchars double_encode 参数设置为 false避免对已经存在的字符引用进行双重编码:

var_dump(htmlspecialchars('<"&amp;\'>', ENT_QUOTES, 'UTF-8', false) === '&lt;&quot;&amp;&#039;&gt;'); // bool(true)

关于html - 在用户提交的数据中不转义 & 符号是否存在安全风险?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027167/

相关文章:

python - 用随机生成的数字替换字符串的一部分

c# - 如何从字符串中提取数据?

html - 为什么悬停时所有图像都会抖动

javascript - 如何使用JQuery在主页加载.html文件?

c# - 在 C# 中检查是否为字符串格式的条件

java - EJBInvokerServlet/JMXInvokerServlet

javascript - 如何让外部代码 'safe' 运行?只是禁止 eval()?

ios - 处理连接到 Web 服务的 native 应用程序的登录功能

css - 排除 div 子级以具有全局 css 规则并强制它们从父级继承

html - 对 Angular 线 div 填充父 div 的完整空间