绕过HTML实体

时间:2019-04-20 07:33:38

标签: php html5 owasp javascript-injection websecurity

无论如何,有没有绕过输入清理和HTML注入的事情。

这是bWAPP的一项练习。当我尝试执行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);
}

1 个答案:

答案 0 :(得分:0)

htmlspecialchars()是清除HTML输入的正确方法。这基本上就是该函数的设计目的。

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

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

  

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

     

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

但是它不能阻止SQL注入