转义输出可能有助于防止哪些常见的安全漏洞?

Escaping output may help protect from which common security vulnerabilities?

此问题是 PHP ZEND 7 认证指南的一部分。指南中提供的答案似乎是错误的! 我的答案是跨站脚本。然而指南提供的答案是 "Cross-Site Scripting" & "SQL Injection"。这听起来不正确。转义输入可以防止 SQL 注入。如有错误请指正!?

是的,我认为您完全正确。我认为您的认证指南是错误的。无论如何,这似乎是一个不稳定的问题。

在 XSS 和 SQL 注入中,这里的关键是在上下文中使用任意数据而不将其转换为该上下文。在某种程度上,这就是消除 "data" 与 "command" 的歧义。

对于 HTML,"data" 是可能是文本的任意数据。如果你想在 HTML 中使用文本,你必须转义保留字符,这样文本就不会被解释为 HTML.

与 SQL 类似,如果您要将任意值连接到查询中,您需要确保它们不会被解释为查询本身的一部分(例如引号或其他内容) ,否则你将度过糟糕的一天。 (更好的是,使用 prepared/parameterized 查询从根本上将数据与查询本身分开,这就不是问题了。)

转义输出与 SQL 注入没有任何关系......除非 "output" 是一个正在输出到数据库服务器的查询。

(相关:)