Uploaded image for project: 'Apache Freemarker'
  1. Apache Freemarker
  2. FREEMARKER-189

The Built-in constructs like "?html" has security issues

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Information Provided
    • 2.3.28, 2.3.29
    • None
    • jsp
    • just normal environment, no special
    • Important

    Description

      1. When i develop the JSP page, for the reason of security, i use the "?html" to encode the attribute "onclick" in the button.ftl as below:

      <span id="${btnID?html}" style="${(style!'')?html}" tabindex="0" class=" ${(css!'')?html}" <@htmc.disabled /> <#if btnTitle!=''>title="${btnTitle?html}"</#if><#lt>

      <#if btnOnClick??> onclick="${btnOnClick?html}"</#if> > <#lt>

      2. in the jsp b.jsp, i write as this: <powercom: button id="game" onclick="submit('${name}')" />;

      3. The varaible name comes from another page a.jsp,user can input the value for the parameter: name,then user can jump to b.jsp;

      4. if i input the value for name is "');console.log(1)//" or "');alert(1)//" in a.jsp, attention, it simulates an attack, it will be executed when i jump to the b.jsp,the varaiable "btnOnClick"  will be assigned with the value "submit('${name}')", then the attack statement is spliced as this: onclick="submit('');alert(1)//')"; and the page pop up a msgbox,shows "1".

      5.because the build-in construct: "?html" does not escape the  left and right parentheses: "( " and ")", the attack statements can be executed.  I think the left and right parentheses: "( " and ")" should be escaped for the "?html" build-in construct because of security. Thanks

      Attachments

        1. StringUtil.java
          81 kB
          PowerCOM_STARWAR

        Activity

          People

            Unassigned Unassigned
            PowerCOM_STARWAR PowerCOM_STARWAR
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 1h
                1h
                Remaining:
                Remaining Estimate - 1h
                1h
                Logged:
                Time Spent - Not Specified
                Not Specified