防止摧毁utf8字符h_ಠ

时间:2010-07-14 22:18:29

标签: php security

我想过滤我的输出以使其更安全地从跨站点脚本(XSS)攻击,因此我使用htmlentities过滤输出。问题是,我试图使我的应用程序utf8兼容,所以当我输入类似ಠ_ಠ的东西时,我希望在从数据库中检索时保持它。有没有简单的解决方案来实现这一目标?提前感谢任何建议。

2 个答案:

答案 0 :(得分:5)

三件事

  1. HTML清理是输出转义任务,而不是输入过滤。您应该在存储之前执行此任务,您应该只在显示之前执行此操作。
  2. 如果您尝试阻止XSS,则无需使用htmlentities() - htmlspecialchars()即可。仅在尝试从与本机编码不同的字符编码中呈现内容时才使用htmlentities()
  3. Both functions接受字符编码作为第三个参数。
  4. 所以,最后:

    echo htmlspecialchars( $content, ENT_QUOTES, 'UTF-8' );
    

    如果您使用ENT_NOQUOTES,则可能容易受到某些类型的XSS攻击。

答案 1 :(得分:2)

$var=htmlspecialchars($var,ENT_QUOTES,"UTF-8");