您需要小心使用这些扫描工具,因为有时这些工具确实会报告误报,有时不需要更改代码。我不是 checkmarx 专家,但请确保该工具真正理解您正在使用的 Bean 验证注释和调用Jsoup.clean(personName, Whitelist.basic())
.
我想我已经完成了所有必要的验证。还有什么???
首先您需要了解应用程序级别之间的差异输入卫生& 业务层面输入验证对于控制器。您在这里所做的是第二部分,第一部分可能在您的设置中丢失,这是专门从安全角度完成的并且通常是为整个应用程序设置的。
您正在使用@Size
注释来限制输入的大小,但这并不能保证坏字符串 - 可能导致 XSS 攻击的字符串。然后,您正在使用呼叫Jsoup.clean(personName, Whitelist.basic()))
清理这个大小经过验证的输入。由于我不确定该调用的作用,因此您需要确保新值是 XSS - 安全的。您立即将该值传递给数据库调用,然后返回Integer
对于调用者/客户端,所以我对这里发生 XSS 攻击的可能性非常悲观,但工具是这么说的。
肯定有一些缺失的验证。如何验证 HTTP GET
正确使用 Spring Boot
正如我之前所解释的,输入验证是一个通常用于业务逻辑级别输入验证的术语,而输入清理/清理则与安全性有关。在Spring Boot环境中,这通常是通过使用来完成的Spring 安全 API& 启用 XSS 过滤器或编写您自己的 XSS 过滤器并将其插入您的应用程序中。过滤器先出现,控制器随后出现,因此您的控制器将始终具有经过净化的值,并且您将对该经过净化的值应用业务验证。
这是一个广泛的答案,对于代码等,您可能会进行谷歌搜索。还建议阅读更多有关 XSS 攻击的内容。只要明白有多种方法可以实现同一目标。
预防 XSS 的 3 种方法 https://www.checkmarx.com/2017/10/09/3-ways-prevent-xss/
Java 中的 XSS 预防 https://searchsoftwarequality.techtarget.com/answer/XSS-prevention-in-Java
如何在 Spring RESTful 中创建过滤器来防止 XSS? https://stackoverflow.com/questions/31282379/how-to-use-spring-security-to-prevent-xss-and-xframe-attack
跨站脚本 (XSS) 攻击教程,包含示例、类型和预防 https://www.softwaretestinghelp.com/cross-site-scripting-xss-attack-test/
在最后一个链接中,提到了,
预防这种攻击的第一步是输入验证。
用户输入的所有内容都应该经过精确验证,
因为用户的输入可能会找到输出。
并且您没有在代码中执行此操作,因此我猜测不存在 XSS。
EDIT:
XSS 安全有两个方面 - 首先不允许对服务器端代码进行恶意输入&这可以通过 XSS 过滤器来完成&有时,允许恶意输入没有任何害处(假设您正在将恶意输入保存到数据库或在 API 响应中返回)。
第二个方面是指导 HTML 客户端有关可能的 XSS 攻击(如果我们确定 API 客户端将是 HTML / UI),那么我们需要添加X-XSS-Protection
header & 这将通过下面的代码完成。这将使浏览器能够打开其 XSS 保护功能(如果有)。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers().xssProtection()....
}
什么是 http 标头“X-XSS-Protection”? https://stackoverflow.com/questions/9090577/what-is-the-http-header-x-xss-protection
Spring security中的Xss防护默认开启吗? https://stackoverflow.com/questions/37606227/is-xss-protection-in-spring-security-enabled-by-default
对于第一个方面,即编写过滤器 - 请参阅我的这个答案 https://stackoverflow.com/a/49399129/3850730以及该答案中的链接。
我想,我上面错误地写了 Spring Security 提供了输入卫生过滤器,我想,它没有。将核实并通知您。我已经在回答这个问题时提到的行上编写了我的自定义过滤器 -防止 Spring MVC 控制器中的 XSS https://stackoverflow.com/questions/41938010/prevent-xss-in-spring-mvc-controller
您还必须了解 Spring Boot 也用于编写传统的 MVC 应用程序,其中服务器端也呈现要渲染的 HTML。在 JSON 响应(REST API)的情况下,UI 客户端可以控制要转义的内容和不转义的内容,因此会出现复杂性,因为 JSON 输出并不总是提供给 HTML 客户端(即浏览器)。