代码之家  ›  专栏  ›  技术社区  ›  user1532449

在Java中避免字符逃逸

  •  1
  • user1532449  · 技术社区  · 8 年前

    我需要转义字符以避免xss。我正在使用org.apache.commons.lang.StringEscapeUtils.EscapeHTML(StringStr),它有以下帮助:

    原始输入

    " onmouseover=alert() src="
    

    转义html之后

    " onmouseover=alert() src="
    

    但是,在某些情况下,反射的输入被困在单引号中,例如:

    test'];}alert();if(true){//
    

    在这种情况下,转义html没有任何效果。但是,org.apache.commons.lang.StringEscapeUtils也有一个名为EscapeJavascript(StringStr)的方法,它可以将输入转换为:

    test\'];}alert();if(true){\/\/
    

    这里的问题是,您是否通过先转义html,然后转义javascript来清理输入?另一种方法是将单引号字符替换为“手动”。

    任何帮助都将不胜感激!

    2 回复  |  直到 8 年前
        1
  •  1
  •   Sabir Khan    7 年前

    正如@gabor lengyel提到的,我应该能够用html编码器转义一个引号。

    我的问题是 org.apache.commons.lang.stringescapeutils.escapeHtml 它不能用相应的html实体转义单引号。我正在使用 org.springframework.web.util.HtmlUtils.htmlEscape ,它可以处理双引号和单引号。

    再次感谢@gabor lengyel的帮助!

        2
  •  -2
  •   user158037    8 年前

    你不应该用 escapeJavascript / escapeEcmaScript 用于XSS保护。添加 escapeHtml 输出到您的站点应该是安全的:

    "<p>" + escapeHtml(userProvided) + "</p>"
    

    如果你想要像这样的东西:

     "<p class='" + userProvided + "'>" 
    

    很难保证它的安全性,您可能希望使用合法字符/值的白名单(如regexp: [a-Z] , (option1|option2) )放下一切意想不到的东西而不是逃避。

    推荐文章