我对此有些困惑。我一直在阅读有关内容,htmlspecialchars()并计划将其用于文本区域POST以防止XSS攻击。我了解通常htmlspecialchars()用于生成发送到浏览器的HTML输出。但是我不确定的是:
htmlspecialchars()
POST
1)htmlspecialchars()在将数据插入MySQL之前,先对用户输入的数据进行使用是一种安全的做法吗?我已经在使用带有参数化值的PDO准备好的语句来防止SQL注入。
2)或者,我真的不需要担心要使用htmlspecialchars()插入值(只要已对它们进行了参数化)而仅htmlspecialchars()在我从MySQL获取结果并将其显示给用户时使用?
正如其他人指出的那样,#2是正确的答案。将其保留为“原始”,直到需要它为止,然后适当地逃避。
为了详细说明原因(我将重复/总结其他文章),让我们将场景1推至逻辑极限。
当有人输入“ ' OR 1=1 <other SQL injection> --”时会发生什么。现在也许您决定因为使用SQL而应该为SQL编码(也许因为没有使用参数化语句)。因此,现在您必须混合(或决定)SQL和HTML编码。
' OR 1=1 <other SQL injection> --
突然,您的老板决定他也想要XML输出。现在,要保持模式一致,您还需要对此进行编码。
下一个CSV-哦,不!如果文本中有引号和逗号怎么办?更多转义!
嘿-一个好的交互式AJAX界面怎么样?现在您可能想开始将JSON发送回浏览器,因此现在{,[等。都需要考虑在内。帮助!!
显然,按给定存储数据(当然要受域约束),并 在需要时 根据您的输出进行适当的编码。 您的输出与数据不同。
我希望这个答案不要太光顾。归功于其他受访者。