【发布时间】:2014-01-24 09:34:38
【问题描述】:
我对此有点困惑。我一直在阅读有关htmlspecialchars() 的信息,我打算将其用于文本区域POST 以防止XSS 攻击。我知道通常htmlspecialchars() 用于生成发送到浏览器的 HTML 输出。但我不确定的是:
1) 在将用户输入数据插入 MySQL 之前,使用htmlspecialchars() 是否安全?我已经在使用带有参数化值的 PDO 准备语句来防止 SQL 注入。
2) 或者,我真的不需要担心使用htmlspecialchars() 插入值(前提是它们是参数化的),并且只在我从 MySQL 获取结果并将其显示给用户时使用htmlspecialchars()?
【问题讨论】:
-
#2 是正确答案
-
HTML 转义 (1) 与您的数据库并不真正相关。通常(2)是首选,因为过早的转义可能会干扰以后的网页以外的输出通道。对于新手来说,早期的 HTML 转义可能仍然是可取的;过早忘记总比忘记好。
-
假设您想生成一些文本日志。然后,您将不得不撤消您的转义。而是在最后一刻逃跑,这样你就知道这是合适的。
-
在插入数据之前应用业务规则(可能包括限制允许的字符),但在使用站点应用转义(因为这是只是在给定上下文中使用数据的实现细节)。
-
@blackops_programmer 如果您存储的文本是
<a href='test'>Test</a>,目的是将其转换为真正的工作链接,则您必须在输出前对其进行解码。如果您希望它按字面意思显示为 HTML 标记,则一种编码将在浏览器中显示为<a href='test'>Test</a>,而双重编码将显示为&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;,两者都不会为您提供工作链接。跨度>
标签: php mysql sql pdo htmlspecialchars