首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Checkmarx -如何验证和消毒HttpServletRequest .getInputStream以通过checkmarx扫描

Checkmarx -如何验证和消毒HttpServletRequest .getInputStream以通过checkmarx扫描
EN

Stack Overflow用户
提问于 2020-10-01 09:45:10
回答 5查看 15.4K关注 0票数 4

下面是checkmarx问题的详细信息无限制文件上传

来源: req (第39行)

目标目标: getInputStream (第41号线)

代码语言:javascript
复制
    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()));
    }
    //...
}

请求对象在checkmarx工具中突出显示-

如何正确验证、筛选、转义和/或编码用户可控输入以通过Checkmarx扫描?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-10-07 17:49:59

这对我有用- checkmarx通过了这个高漏洞

我使用了@ comment和@tgdavies评论的组合。

代码语言:javascript
复制
@Override
public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res)
        throws IOException
{
    int len = req.getContentLength();
    len = Integer.parseInt(Encode.forHtml(String.valueOf(len)));
    String type = req.getContentType();
    type =  Encode.forHtml(type);
    Entitlements creds;
    if(len == INPUT_LENGTH && type.equals(MIMETYPE_TEXT_PLAIN_UTF_8)) {
        creds = new ObjectMapper().readValue(req.getReader().lines().collect(Collectors.joining(System.lineSeparator())), Entitlements.class);
    }else{
        creds = new Entitlements();
    }

    return getAuthenticationManager().authenticate(
            new UsernamePasswordAuthenticationToken(creds.getId(), "", Collections.emptyList()));
}
票数 1
EN

Stack Overflow用户

发布于 2021-08-14 09:46:58

下面的解决方案为我工作的checkmarx扫描。在存储xss的情况下,我使用HtmlUtils.escapeHtmlContent(String)

如果我们想净化@requestbody中使用的bean类,我们必须使用

代码语言:javascript
复制
Jsoup.clean(StringEscapeUtils.escapHtml4(objectMapper.writeValueAsString(object)), Whitelist.basic());

这为我解决了checkmarx漏洞问题。

票数 1
EN

Stack Overflow用户

发布于 2020-10-06 12:24:51

有时,我们可以通过一定程度的间接欺骗工具。你能不能试试下面的方法,看看能不能解决你的问题,

取代:

代码语言:javascript
复制
Entitlements creds = new ObjectMapper().readValue(req.getInputStream(), Entitlements.class);

带着,

代码语言:javascript
复制
Entitlements creds = new ObjectMapper().readValue(req.getReader().lines().collect(Collectors.joining(System.lineSeparator())), Entitlements.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64152836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档