【发布时间】:2020-10-01 09:45:10
【问题描述】:
以下是 checkmarx 问题的详细信息 无限制的文件上传
源对象:req(第 39 行)
目标对象:getInputStream(第-41行)
public class JWTLoginFilter extends AbstractAuthenticationProcessingFilter
{
//...
38 public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res)
39 throws AuthenticationException, IOException, ServletException
40 {
41 Entitlements creds = new ObjectMapper().readValue(req.getInputStream(), Entitlements.class);
return getAuthenticationManager().authenticate(
new UsernamePasswordAuthenticationToken(creds.getId(), "", Collections.emptyList()));
}
//...
}
request 对象在 checkmarx 工具中突出显示 -
如何正确验证、过滤、转义和/或编码用户可控输入以通过 Checkmarx 扫描?
【问题讨论】:
-
您的问题有点宽泛,但我假设您具体指的是请求对象。验证或过滤或转义的内容取决于您正在使用和处理的 HttpServletRequest 的哪个属性。介意你分享更多代码吗?
-
@RomanCanlas 添加更多代码 sn-p 以供参考。
-
关于代码的上下文,我认为这是一个误报。这里明显的来源是 request.getHeader("Authorization") ,其中 Checkmarx 怀疑它是恶意输入的入口点,但令牌似乎没有呈现在会导致 XSS 的页面上
-
您可以在使用输入流之前尝试检查内容类型标头是否为 application/json,但如果没有有关 Checkmarx 查找内容的更多信息,很难说。
-
if (req.getHeader("Content-Type") == null || !req.getHeader("Content-Type").startsWith("application/json")} { // 返回a 400 result } 但实际上您需要确切了解 Checkmarx 的期望。
标签: java spring-boot security sonarqube checkmarx