我正在使用 Stripes 框架来实现一个 Web 应用程序。为了避免各种攻击,文本被存储到数据库中,并且清理过程包括 HTML 实体的编码。
当我制作带有条纹的表格时,我的问题就出现了。当表格开始为空时,一切都很好。然而,当用户之前输入的东西是这个表单,并且现有的值是从数据库中获取的,在动作 bean 中设置然后由条纹表单标签显示时,条纹再次转义它。这导致我的字符串双重转义。
无论如何我可以告诉条纹我知道我在做什么并且我给你的字符串已经被转义了吗?
我正在使用 Stripes 框架来实现一个 Web 应用程序。为了避免各种攻击,文本被存储到数据库中,并且清理过程包括 HTML 实体的编码。
当我制作带有条纹的表格时,我的问题就出现了。当表格开始为空时,一切都很好。然而,当用户之前输入的东西是这个表单,并且现有的值是从数据库中获取的,在动作 bean 中设置然后由条纹表单标签显示时,条纹再次转义它。这导致我的字符串双重转义。
无论如何我可以告诉条纹我知道我在做什么并且我给你的字符串已经被转义了吗?
似乎最好的解决方案就是不对有问题的字段使用条纹。如果在您的 jsp 中替换,例如:
<stripes:textarea name="userEntryComment"/>
和
<textarea name="userEntryComment">${actionBean.userEntryComment}</textarea>
Thenexcept stripes 根本不被调用来生成第二个版本的 HTML。此外,由于在这种情况下我们不使用 <c:out> 标记,因此不会重新转义字符串。
HTML 实体的编码和解码由 Stripes 处理,因此实际上没有必要将编码的 HTML 实体存储在数据库中。只需从您的清理过程中删除 HTML 实体的编码,Stripes 就会安全地处理数据。
还有一点需要说明:以HTML 等表示格式存储模型数据( MVC 模型! )可能被认为是一种不好的做法。HTML 实体当然也是 HTML 格式的数据。在执行各种其他操作(例如搜索、发送文本电子邮件等)时,它们会限制/阻碍您对数据的使用。