Как санировать и проверять пользовательский ввод, чтобы пройти проверку Checkmarx

У меня есть конечная точка, которая получает строку от пользователя, как показано ниже.

@GET
@Path("/{x}")
public Response doSomething(@PathParam("x") String x) {
    String y = myService.process(x);
    return Response.status(OK).entity(y).build();
}

Checkmarx жалуется, что значение этого элемента затем "проходит через код без надлежащей очистки или проверки и в конечном итоге отображается пользователю в методе doSomething"

Тогда я попробовал это:

@GET
@Path("/{x}")
public Response doSomething(@PathParam("x") String x) {
    if (StringUtils.trimToNull(x) == null || x.length() > 100) 
    { 
        throw new RuntimeException(); 
    }
    x = x.replace("'", "").replace("`", "").replace("\\", "").replace("\"", "")
    String y = myService.process(x);
    y = y.replace("'", "").replace("`", "").replace("\\", "").replace("\"", "")
    return Response.status(OK).entity(y).build();
}

Но он все еще жалуется и считает это уязвимостью высокой степени серьезности.

Как правильно санировать или проверять, чтобы удовлетворить Checkmarx?

1 ответ

Решение

HtmlUtils от Spring -web сделал свою работу:

HtmlUtils.htmlEscape(x)

В .Net framework > 4.0 используйте AntiXSS

AntiXssEncoder.HtmlEncode()

Другие вопросы по тегам