【问题标题】:UTF8 character encoding, htmlentities and Cross Site ScriptingUTF8 字符编码、htmlentities 和跨站点脚本
【发布时间】:2017-03-31 00:41:10
【问题描述】:

我目前正在过度使用我的网站,并希望使用正确的字符编码,因为到目前为止我遇到了一些问题。

我的 HTML 和 PHP 文件是用 UTF8 编码的,我的 HTML 头是这样的:

<!DOCTYPE html><html><head><meta charset="utf-8" />.....

我使用 MySQLi 并像这样配置我的连接:

$DB->set_charset("utf8");

我的数据库正在使用 utf8_general_ci 排序规则。

所以我认为我设置正确。

现在我的问题: 为了避免跨站点脚本,我每次在显示用户保存到我的数据库中的数据时都使用 htmlentities() 来破坏 HTML 字符,例如 " '

echo(htmlentities($str, ENT_QUOTES, "UTF-8"));

但是,当 $str 包含其他特殊字符(例如 ÄäÖöÜü&ßàé)时,它们也会损坏,并且我的浏览器仅显示 & Auml;等等……

我的错在哪里?实现 xss 安全并显示 utf-8 字符的正确方法是什么?我想我可能需要这些主题的完整速成课程。 This solution 不符合我的问题,因为我已经使用了这个参数。

如果您能帮助我解决这个问题,我将不胜感激。 最好的祝福 卢卡斯

【问题讨论】:

  • 可能是语言环境问题吗?如果您将 php 进程的语言环境设置为 UTF8,如果它还不是那样的话,该怎么办?
  • 您好,谢谢您的回答!你的意思是我的 php.ini 中的 default_charset 设置?我将它设置为“UTF-8”,但它没有任何效果......我不确定 htmlentities 是否适合我link? “所有适用的字符”是什么意思?

标签: php utf-8 character-encoding xss html-entities


【解决方案1】:

我可以通过切换到 htmlspecialchars 来解决这个问题。我认为这个函数对于防止 xss 的安全性已经足够了。

【讨论】:

  • 请注意,XSS 不仅仅是基于黑名单的 html 编码(正如 htmlspecialchars() 所做的那样)。
猜你喜欢
  • 2010-09-18
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 1970-01-01
  • 2014-03-05
  • 1970-01-01
  • 2016-06-04
相关资源
最近更新 更多