【问题标题】:Check if string is UTF-8 returning \u+hex if so, false if not检查字符串是否为 UTF-8,如果是则返回 \u+hex,否则返回 false
【发布时间】:2014-04-12 01:32:17
【问题描述】:

对于XSS safety,我想将所有字符转换为\u+hex 编码。我见过UTF-16 solutions,但找不到任何适用于 UTF-8 的内容。

我首先要确保所有字符都是 UTF-8。在这里,我看到了许多解决方案,但对于 javascript 来说没有什么一致的。

如何对字符串进行 UTF-8 测试,如果是则返回 \u+hex 编码,否则返回 false?

【问题讨论】:

  • 我不太确定你是否理解这里的含义。如何确保输入是 UTF-8 来保护您免受注射?在另一个问题中,您说“我想在任何地方注入东西”——坦率地说,安全地做到这一点是不可能的(实际上,可能跨越)。
  • JS 中的字符串由字符组成,而不是字节。字符纯粹是一种概念性的东西,而字节是物理存储在磁盘上或通过线路传输的数字。这意味着,就程序员而言,没有编码。您不能测试字符串的编码。
  • @Gracchus:也许我没有正确理解这一点,但所有这些听起来都非常错误。如果注入 HTML 内容,则需要将特殊字符转换为 HTML 实体;如果内容在打开的标签或属性值内,您还需要防止脚本攻击等。编码检查无法阻止这些。
  • @Gracchus:我感觉我不太明白你的问题。也许您应该提供更多上下文,即您的字符串来自哪里以及它们应该去哪里。另外,Brian McGinity 是谁?

标签: javascript utf-8 character-encoding hex typechecking


【解决方案1】:
function string_to_hex(input) {
    var temp = 0, output = "";
    for (var i = 0; i < input.length; i++) {
        temp = input.charCodeAt(i);
        if (temp > 0xFF) {
//      if (temp == 192 || temp == 193 || temp > 244) {
            return false;
        }
        output += "\\x" + temp.toString(16).slice(1); //lazy padding
    }
    return output;
}

如果不检查非法代码点,则不需要注释掉的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 2022-12-04
    • 2013-09-14
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多