Link to home
Start Free TrialLog in
Avatar of jksung
jksung

asked on

Is it possible to "sandbox" html content within a JSP?

I am trying to create a tool within my Spring MVC webapp where the JSP page takes in text from a user from a textbox, then displays the user text below the textbox with every non-UTF8 decode-able character highlighted in yellow (by taking in the user text as a string, and wrapping every non-UTF8 character with <span style='background:yellow'>(character)</span> and saving the result as form.userDataHighlighted), then display it in the webpage as such:

                                          <TABLE...>
                                          ........
                                          <TR>
                                                <TD valign="top">
                                                      <div>${form.userDataHighlighted}</div>
                                                </TD>
                                          </TR>
                                           </TABLE>

The problem is that the user may enter html content with CSS styling as such:

<html>
    <head>
        <meta http-equiv=Content-Type content="text/plain; charset=utf-8">
        <title></title>

        <style>
                (some user defined styling)
                ......
        </style>
    </head>
   <body>
       ....
    </body>
</html>

and this can affect the styling of the main webpage (for example, change the background color of the main webpage).

Is there a way I can "sandbox" the user text within the JSP so that it cannot affect the main JSP styling (such as display it in some kind of frame)?  I have tried something like:

<table border="1">
<tr>
<td style="width:500px;height:400px">
<iframe srcdoc=${form.userDataHighlighted} frameborder="0" style="width:100%;height:100%"></iframe>
</td>
</tr>
</table>

and also:

<jsp:include.......>

but in both cases, the background color of the main page is still affected.  Is there a way I can display the user's text with the non-UTF8 characters highlighted without allowing the user content to affect the styling of the main page?
ASKER CERTIFIED SOLUTION
Avatar of mccarl
mccarl
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Escaping the user input (if they enter html, styled or otherwise) will leave you with tags on the page of course. Why not just strip out the tags? That will remove any styling too
Avatar of jksung
jksung

ASKER

Thank you!  This works perfectly for me.

To get the non-UTF characters (or the original string before the browser encodes it in utf8), we manually re-decode the string in the controller.
(String originalString = StringManipulation.decodeUTF8String(inputString);)
You're welcome!

I was just thinking though, it would probably be beneficial to escape the & character as well. Like this...
String userDataEscaped = form.userData.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;");

Open in new window

(Note the order of the above 'replace' operations are important, the '&' must be escaped first, otherwise it would break what the other two 'replace' are doing)