Как санировать и проверять пользовательский ввод, чтобы пройти проверку 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()