绕过 HTML 实体



无论如何可以绕过输入清理并进行HTML注入。

当我尝试做HTMLi时,会检查输入验证并清理特殊字符。附有消毒代码,还有其他绕过代码并进行HTML注入吗?

function xss_check_3($data, $encoding="UTF-8")
{
// htmlspecialchars - convert specialchars to HTML entities
//  '&'(ampersand) becomes '&'
// '"'(double quotes) becomes '"' when ENT_NOQUOTES is not set
// "'"(Single quotes) becomes ''' (or ') only when ENT_QUOTES is 
set
// '<'(lessthan) becomes '&lt;'``
// '>'(greterthan) becomes '&gt;'
return htmlspecialchars($data, ENT_QUOTES, $encoding);
}

htmlspecialchars()是清理HTML输入的正确方法。这基本上就是该功能的设计目的。

但请注意,如果输入不是 UTF-8 编码,则可能会出现问题

关于htmlspecialchars的PHP文档说(强调我的):

某些字符在 HTML 中具有特殊意义,如果要保留其含义,则应由 HTML 实体表示。此函数返回一个字符串,其中包含这些转换。如果需要翻译具有关联命名实体的所有输入子字符串,请改用 htmlentities()。

如果传递给此函数的输入字符串和最终文档共享相同的字符集,则此函数足以准备输入以包含在 HTML 文档的大多数上下文中。但是,如果输入可以表示未在最终文档字符集中编码的字符,并且您希望保留这些字符(作为数字或命名实体),则此函数和 htmlentities()(仅对具有命名实体等效项的子字符串进行编码)都可能不足。您可能需要改用 mb_encode_numericentity()。

(但是,它不足以防止SQL注入)

相关内容

  • 没有找到相关文章

最新更新