1. 什么是XSS攻击?
XSS攻击全称跨站脚本攻击,是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。也就是作恶的用户通过表单提交一些前端代码,如果不做处理的话,这些前端代码将会在展示的时候被浏览器执行。
2. 如何防范?
有两种方式,一种是一些特殊字符转义,另一种是去除一些危险html元素。本文通过JSOUP库实现第二种方式。
2.1 什么时候注入请求参数
常见的控制器方法有下面几种,分别是通过GET获取请求参数,POST获取json或者form表单的参数
/** * 通过url的path,获取请求参数 */ @ResponseBody @GetMapping("/xssByGetUsingPath/{content}") public String testGetUsingPath(@PathVariable(name = "content") String content) { return content; } /** * 通过url的query params获取请求数据. 方法使用简单类型进行接收 */ @ResponseBody @GetMapping("/xssByGetUsingSimple") public String testUsingSimple(@RequestParam(name = "content") String content) { return content; } /** * 通过url的query params获取请求数据. 方法使用model进行接收 */ @ResponseBody @GetMapping("/xssByGetUsingModel") public String testGetUsingModel(BaseTest.Paper paper) { return paper.getContent(); } /** * 通过 form 表单的方式获取数据. 方法使用简单类型进行接收 */ @ResponseBody @PostMapping("/xssByFormPostUsingSimple") public String testFormPostUsingSimple(@RequestParam(name = "content") String content) { return content; } /** * 通过 form 表单的方式获取数据. 方法使用model进行参数接收 */ @ResponseBody @PostMapping("/xssByFormPostUsingModel") public String testFormPostUsingModel(BaseTest.Paper paper) { return paper.getContent(); } /** * 通过 request body 发送 json数据 */ @ResponseBody @PostMapping("/xssByPostJsonBody") public String testPostJsonBody(@RequestBody BaseTest.Paper paper) { return paper.getContent(); }
大家都知道,在spring mvc中处理请求的入口在 DispatcherServlet 类中,其中 doDispatch() 方法完成所有核心功能。在该主流程中,HandlerAdapter 将会对HTTP请求进行 Controller 的方法调用,以及对请求结果进行转换,并封装为 DispatcherServlet 类需要的 ModelAndView 。在这里,由于使用注解的方式进行 Controller 定义,所以 Handle