在插入MySQL之前使用htmlspecialchars()是否合适?

时间:2014-01-06 20:58:45

标签: php mysql sql pdo htmlspecialchars

我对此感到有点困惑。我一直在阅读htmlspecialchars(),我打算将其用于textareas POST以防止XSS攻击。我知道通常htmlspecialchars()用于生成发送到浏览器的HTML输出。但我不确定的是:

1)在将用户输入数据插入MySQL之前使用htmlspecialchars()是否安全?我已经在使用PDO预处理语句和参数化值来阻止SQL注入。

2)或者,我真的不需要担心使用htmlspecialchars()插入值(假设它们是参数化的)并且只在我从MySQL获取结果并将其显示给用户时才使用htmlspecialchars()? / p>

1 个答案:

答案 0 :(得分:14)

正如其他人所指出的,#2是正确的答案。在你需要之前保持“原始”,然后适当地逃脱。

详细说明原因(我将重复/总结其他帖子),让我们将场景1置于逻辑极端。

当有人输入“' OR 1=1 <other SQL injection> --”时会发生什么。现在也许你决定,因为你使用SQL你应该编码SQL(可能是因为你没有使用参数化语句)。所以现在你必须混合(或决定)SQL&amp; HTML编码。

突然间,你的老板决定他也想要一个XML输出。现在为了保持您的模式一致,您还需要对其进行编码。

下一个CSV - 哦不!如果文中有引号和逗号怎么办?更逃避!

嘿 - 一个漂亮的交互式AJAX界面怎么样?现在你可能想开始将JSON发送回浏览器,所以现在{,[等等都需要考虑。 HELP !!

如此清楚,将数据存储为给定的(当然受域限制),并在您需要的时候根据您的输出进行编码您的输出与您的数据不同。

我希望这个答案不是太过光顾。感谢其他受访者。