【问题标题】:Why this strange symbol in hidden element为什么隐藏元素中有这个奇怪的符号
【发布时间】:2011-01-26 08:51:39
【问题描述】:

我看到了一个包含以下隐藏元素的表单。第一个显然是 CSRF 的安全令牌,但第二个是什么。它或多或少是一个图像。它会给我带来什么额外的安全保障?以及如何生成?

<input type="hidden" value="G2k2DNFer3z2NR0zYO" name="key">
<input type="hidden" value="☃" name="_face">
<input type="hidden" value="home" name="ref_source">

【问题讨论】:

标签: php security forms


【解决方案1】:

那个SNOWMAN其实是Unicode(U+2603)中的一个字符,很可能是用来测试客户端是否使用了正确的字符编码(可能是UTF-8),例如:

$isUtf8 = $_POST['_face'] === "\xE2\x98\x83";

【讨论】:

  • 我明白了。那么这是我们都应该在我们的表格中做的事情吗?我问是因为网站只有在用户提交表单后才会获取此信息,因此当第一次呈现页面时,此信息不可用。为什么网站在那之后可能需要它?
  • @samquo:有人建议这样做是为了将 UTF-8 与其他字符编码区分开来(例如,参见 “Unicode and Other Funny Characters” on dev.mysql.com)。但我不确定这是否真的有必要。因为一般来说,客户端要么使用accept-charset attribute 中指定的字符编码,要么使用与提供表单文档相同的字符编码。
  • @samquo:但如果你想使用这样的,请选择默认/备用字符集中也存在的字符,如文章中提到的字符(即ä™®)。因为 SNOWMAN 既不在 Windows-1252 也不在 ISO 8859-1 中,我不确定这些提到的错误浏览器将如何处理该字符。
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 2023-01-17
  • 2013-05-13
  • 2013-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多