2012-09-21 56 views
4

Cross Site Scripting Cheat Sheet有许多防范XSS攻击的规则。我想在使用Spring MVC + Jackson + JPA + Hibernate Bean验证的Web应用程序中实现这些建议。作为一个例子,请考虑下面的代码,它类似于我在我的应用程序中的代码。如何用SpringMVC + Jackson应用程序防止XSS攻击?

public class MessageJson { 
    @NotEmpty // Bean Validation annotation 
    private String title; 

    @NotEmpty 
    private String body; 

    // ... etc getters/setters 
} 

public class BolgPostController 
{ 

    @RequestMapping(value="messages",method=RequestMethod.POST) 
    public void createMessage(@Valid @RequestBody MessageJson message) 
    { 
      // **Question** How do I check that the message title and body don't contain 
      // nasty javascripts and other junk that should not be there? 

      // Call services to write data to the datababse 
    } 

    @RequestMapping(value="messages",method=RequestMethod.get) 
    public @ResponseBody List<MessageJson> createMessage() 
    { 
      // get data from the database 

      // **Question** How do I escape all the data in the list of MessageJson before 
      I send it back to the data. 
    } 
} 

我可以看到下面的方式来实现备忘单规则:

  • 选项A在每个控制器方法手动实现它们。
  • 选项B配置一些扩展Spring MVC的,可以自动为我做
  • 选项C配置杰克逊,以便它可以因为我的大部分输入的为我做的/输出通过杰克逊

我找的用SpringMVC任何这些三个选项的一些示例配置,与选项B和C的偏好

回答

4

这将是最简单的setter方法要做的性质(如属性),当阅读JSON。或者,如果您正在考虑转义附加字符(比如说阻止嵌入HTML标记),请查看此博客条目:escaping HTML characters in JSON with Jackson

+1

这是最简单的解决方案,我使用它与http://owasp-java-html-sanitizer.googlecode.com它工作得很好。 – ams