【问题标题】:convert encoded html entities to utf-8将编码的 html 实体转换为 utf-8
【发布时间】:2017-11-10 13:02:55
【问题描述】:

如何将此字符串转换为 UTF-8:

javascript:alert('XSS')

我也想转换这个:

javascript:alert('XSS')

我想防止 XSS 攻击,我将这篇文章用作备忘单https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet

我的策略是将上面的字符串转换为 UTF-8 并检查它是否包含 javascript。

【问题讨论】:

  • 为什么投反对票?愿意解释一下原因吗?
  • 输出到浏览器时使用htmlspecialchars()怎么样?
  • @jeroen 你能提供更多关于如何使用它的信息吗?我试过了,结果是一样的
  • 为什么投反对票? 因为没有尝试.....除此之外,我们更喜欢可以回答的问题,而不仅仅是讨论...... 我的策略是......还不够;)
  • 如果我将我的问题作为讨论传达,我很抱歉,但我很确定它有一个简单的答案。我有尝试,但都没有奏效,所以我根本没有包含任何内容。

标签: php utf-8 xss


【解决方案1】:

我做了一个简单的函数来获取可能的 HTML,检查:

$decimalHTML = '&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041';
$hexHTML = '&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29';

function getDecimalHTML($str) {
    return str_replace(
        '&#',
        '',
        preg_replace_callback(
            '/\d+/',
            function($v) {
                return str_replace(';', '', implode(array_map('chr', $v)));
            }, $str
        )
    );
}

function getHexDecimalHTML($str) {
    return str_replace(
        array('&#', 'x'),
        '',
        preg_replace_callback(
            '/(?<=x)\w+/',
            function($v) {
                return str_replace(';', '', implode(array_map('hex2bin', $v)));
            },
            $str
        )
    );
}

echo getDecimalHTML($decimalHTML) . "\n";
echo getHexDecimalHTML($hexHTML);

给我看:

javascript:alert('XSS')
javascript:alert('XSS') 

我使用chr 从 ASCII 中获取 de char 并使用 hex2bin 从十六进制代码中获取字符串....

我建议不要重新发明轮子并使用适合您的库,它们涵盖了这个问题的所有方面,例如 AntiXSS

【讨论】:

  • 感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
  • 2011-06-26
  • 2014-02-02
  • 2020-04-12
  • 2015-02-25
  • 1970-01-01
  • 2011-03-02
相关资源
最近更新 更多