当提交向数据库中插入记录并且操作成功的表单时,我会进行重定向,然后在 Url 中传递一些参数以显示新插入的记录以及标题消息(即“插入成功”) .
response.sendRedirect(yPage + "?pid=" + ipd + "&feedback=" + form.getFormFeebackSB() );
然后我会在jsp中显示如下:
<c:out value="${param.feedback}" />
我使用重定向而不是转发,因为我希望操作是幂等的。当我使用forward
成功插入后点击刷新的用户时,通常总是在警告弹出窗口上单击重试,这会导致重复插入。
然后我们的 IT 部门发现我有一个 XSS 漏洞:
page.jsp?feedback=%3Cscript%20type=%22text/javascript%22%3Ealert%28%27xss%27%29;%3C/script%3E
所以我改成这样:
<c:out value="${param.feedback}" escapeXml='true'/>
但是现在<br>
我的 FeedbackSB 中的任何内容都被转义了,我最终得到了这样的标题消息
Insert was successful<br>An email was sent to Joe<br>Now Complete the XYZ Form;
将消息传递回用户的标准方法是什么,同时保持任何提交幂等并防止 XSS?
编辑:
我搜索了 Flash Scope 并遇到了这个http://blog.smartkey.co.uk/2011/01/implementing-flash-scope-in-java -web -applications/ 因为我的应用程序需要做很多工作才能合并框架,该链接中提到的过滤器很容易合并,并且能够轻松实现闪存范围。