Dou*_*oug 53 xss spring jsp spring-mvc html-escape-characters
我应该怎么做才能阻止Spring MVC中的XSS?现在我只是把我输出用户文本的所有地方放到JSTL <c:out>
标签或fn:escapeXml()
函数中,但这似乎容易出错,因为我可能会错过一个地方.
是否有一种简单的系统方法来防止这种情况?也许像过滤器或什么?我通过@RequestParam
在控制器方法上指定参数来收集输入.
Ten*_*she 54
在Spring中,您可以从<form>
标记生成的JSP页面中转义html .这为XSS攻击带来了很多途径,可以通过三种方式自动完成:
对于web.xml
文件中的整个应用程序:
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
Run Code Online (Sandbox Code Playgroud)
对于文件本身中给定页面上的所有表单:
<spring:htmlEscape defaultHtmlEscape="true" />
Run Code Online (Sandbox Code Playgroud)
对于每种形式:
<form:input path="someFormField" htmlEscape="true" />
Run Code Online (Sandbox Code Playgroud)
我@Valid
对所有输入对象使用Hibernate Validator via (binding和@RequestBody
json,请参阅https://dzone.com/articles/spring-31-valid-requestbody).@org.hibernate.validator.constraints.SafeHtml
对我来说这是一个很好的解决方案.
Hibernate SafeHtmlValidator
依赖于org.jsoup
,因此需要再添加一个项目依赖项:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
对于豆User
田
@NotEmpty
@SafeHtml
protected String name;
Run Code Online (Sandbox Code Playgroud)
用于<script>alert(123)</script>
在控制器中使用值的更新尝试
@PutMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
public void update(@Valid @RequestBody User user, @PathVariable("id") int id)
Run Code Online (Sandbox Code Playgroud)
要么
@PostMapping
public void createOrUpdate(@Valid User user) {
Run Code Online (Sandbox Code Playgroud)
是抛出BindException
了约束力,MethodArgumentNotValidException
对@RequestBody
与缺省的消息:
name may have unsafe html content
Run Code Online (Sandbox Code Playgroud)
Validator也适用于绑定,就像之前的持久化一样.可以在http://topjava.herokuapp.com/上测试应用
当您尝试阻止XSS时,重要的是要考虑上下文.例如,如果您在javascript片段中输出变量内的数据而不是在HTML标记或HTML属性中输出数据,那么如何以及要逃避的内容就会大不相同.
我在这里有一个例子:http://erlend.oftedal.no/blog/?blogid = 91
另请查看 OWASP XSS预防备忘单:http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
所以简短的回答是,确保你像Tendayi Mawushe建议的那样逃避输出,但在输出HTML属性或javascript中的数据时要特别小心.
归档时间: |
|
查看次数: |
85856 次 |
最近记录: |