当前位置:  开发笔记 > 程序员 > 正文

如何阻止人们在Spring MVC中进行XSS操作?

如何解决《如何阻止人们在SpringMVC中进行XSS操作?》经验,为你挑选了4个好方法。

我应该怎么做才能阻止Spring MVC中的XSS?现在我只是把我输出用户文本的所有地方放到JSTL 标签或fn:escapeXml()函数中,但这似乎容易出错,因为我可能会错过一个地方.

是否有一种简单的系统方法来防止这种情况?也许像过滤器或什么?我通过@RequestParam在控制器方法上指定参数来收集输入.



1> Tendayi Mawu..:

在Spring中,您可以从

标记生成的JSP页面中转义html .这为XSS攻击带来了很多途径,可以通过三种方式自动完成:

对于web.xml文件中的整个应用程序:


    defaultHtmlEscape
    true

对于文件本身中给定页面上的所有表单:

 

对于每种形式:

 


我将context-param添加到我的web.xml但它不起作用.
我将放在我包含在所有页面中的包含文件中,但它似乎没有什么区别.该标记会导致$ {param.q}被转义吗?
如果你在HTML属性或Javascript中使用结果字符串,'defaultHTMLEscape`是不够的,那么使用``-tag.似乎defaultHtmlEscape不会转义所有html字符.它逃脱了例如'''''或'&',但双引号```没有为我转义.如果结果字符串被用在例如html属性或javascript中,这可能会导致问题. Erlend回答)

2> Bozho..:

试试XSSFilter.



3> GKislin..:

@Valid对所有输入对象使用Hibernate Validator via (binding和@RequestBodyjson,请参阅https://dzone.com/articles/spring-31-valid-requestbody).@org.hibernate.validator.constraints.SafeHtml对我来说这是一个很好的解决方案.

Hibernate SafeHtmlValidator依赖于org.jsoup,因此需要再添加一个项目依赖项:


    org.jsoup
    jsoup
    1.10.1

对于豆User

@NotEmpty
@SafeHtml
protected String name;

用于在控制器中使用值的更新尝试

@PutMapping(value = "/{id}", consumes = MediaType.APPLICATION_JSON_VALUE)
public void update(@Valid @RequestBody User user, @PathVariable("id") int id) 

要么

@PostMapping
public void createOrUpdate(@Valid User user) {

是抛出BindException了约束力,MethodArgumentNotValidException@RequestBody与缺省的消息:

name may have unsafe html content

Validator也适用于绑定,就像之前的持久化一样.可以在http://topjava.herokuapp.com/上测试应用



4> Erlend..:

当您尝试阻止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中的数据时要特别小心.

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有