Как предотвратить использование API в вашем контроллере от XSS-атак, отраженных при сканировании CheckMarx?

#java #spring-boot #xss #checkmarx #stringescapeutils

Вопрос:

Я запустил проверку на маркеры в своем репозитории, и это дало довольно много потенциальных результатов отраженной атаки XSS. Вот код для моего контроллера :

 @PutMapping("/calculate")
    public UpdatedResponse calculateModel(
            @RequestBody ModelDocument modelDocument, @RequestParam String clientFirstName,
            @PathVariable String clientId, @PathVariable String clientLastName
 ) {

        // Sanitize the parameters

        modelDocument = checkForCSS(modelDocument); // NOT ACCEPTING THIS
        clientId = StringEscapeUtils.escapeHtml4(clientId);
        clientFirstName = StringEscapeUtils.escapeHtml4(clientFirstName);
        clientLastName = StringEscapeUtils.escapeHtml4(clientLastName);
.....
}
 

В то время как я смог разрешить предупреждения clientId, clientFirstName and clientLastName , так как все они были строковыми переменными. Но как мне это сделать, modelDocument поскольку это сама по себе определяемая пользователем переменная, внутри которой определены различные строки, карты и т. Д.

Метод checkForCSS определен, как показано ниже, но не распознается сканированием:

 public static <T> T checkForCSS(T t) {
        Gson gson = new GsonBuilder().serializeSpecialFloatingPointValues().create();
        String agendaModelStr = sanitize(gson.toJson(t));
        return gson.fromJson(agendaModelStr, (Type) t.getClass());
    }

public static String sanitize(String string) {
        return Jsoup.clean(string, "", Whitelist.none(), new Document.OutputSettings().prettyPrint(false));
 

Любая помощь будет признательна. Спасибо!

Комментарии:

1. XSS-это проблема вывода, а не проблема ввода. Этот метод возвращает JSON или HTML?

2. @DujSn28 вам придется использовать Checkmarx CxAudit для создания пользовательского запроса Checkmarx (переопределяющего базовый отраженный запрос XSS Checkmarx), чтобы распознать ваш метод checkCSS как допустимое средство очистки

Ответ №1:

попробуйте это:

 ESAPI.encoder().encodeForHTML(clientFirstName);
 

и сделайте это для всех ваших параметров запроса.

Комментарии:

1. В вопросе говорится, что они решили этот вопрос для clientFirstName .