небезопасная конфигурация связывателя массовых назначений. Rest Framework, JSON http request: я не использую Spring MVC - PullRequest
0 голосов
/ 28 мая 2018

Я реализую веб-службу с полным отдыхом на Джерси, которая принимает http-запрос от клиента в форме json.

При сканировании фортификации я получаю критическую проблему: - «Конфигурация ненадежного связующего массового назначения».

Я хочу связать значения json в запросе htttp с классом модели в моем коде на стороне сервера, и, поскольку это небольшой модуль, я хочу избегать использования среды MVC Framework.

Ниже приведен мой фрагмент кодакоторый работает нормально, но мне нужно сопоставить запрос json с классом модели ниже без использования Spring MVC.

@POST
@Path("/TimRestService")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response crunchifyREST**(JsonObject model**, @Context HttpServletRequest request) {


    System.out.println(model);

    return Response.status(200).entity(model).build();

}

Это класс модели: -

public class ActivateService  {

public String mWalletToken;
public String topMerchantEMPID;
public String serviceCategory;
}

Я проверил эти ссылки,однако ответ более специфичен для Spring MVC fmwrk:

Какое решение для массового назначения: уязвимость небезопасной конфигурации Binder? Как исправить массовое назначение: небезопасная конфигурация Binder (APIЗлоупотребление, структурное) в Java

1 Ответ

0 голосов
/ 29 мая 2018

Это может быть реализовано через Джексонсона.Джексон является одним из лучших провайдеров / анализаторов JSON и может использоваться с реализацией Jersey in Rest. Службы REST будут генерировать и потреблять JSON, а сериализация и десериализация JSON происходит автоматически за кулисами

Класс Create Viewкак:

public class View {

public static class Editable {}
public static class Viewable extends Editable {}
public static class Internal extends Viewable {}
}

Создать класс модели как:

@JsonIgnoreProperties(ignoreUnknown = true)
@XmlRootElement(name = "activateService")
public class ActivateService implements Serializable  {

@JsonView(View.Editable.class)
public String mWalletToken;
@JsonView(View.Editable.class)
public String topMerchantEMPID;
@JsonView(View.Editable.class)
public String serviceCategory;
  }

и метод веб-службы Rest-full:

@POST
@Path("/TimRestService")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public Response crunchifyREST(@JsonView(View.Editable.class) final ActivateService model, @Context HttpServletRequest request) {

В JAX-RS, если онМодель (запрос или ответ) аннотируется с помощью @JsonView (View.Editable.class), в нашем случае метод добавления Джексон будет только сериализовать или десериализовать поля, аннотированные с помощью @JsonView (View.Editable.class).В нашем случае клиент может передать только editableField, если клиент пропустит какие-либо другие поля, сервер просто молча проигнорирует их.

Используйте приведенные ниже зависимости в pom.xml

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson- 
databind -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.5</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-json -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>1.19.4</version>
    </dependency>

Источник: - https://www.owasp.org/index.php/Mass_Assignment_Cheat_Sheet и http://lifelongprogrammer.blogspot.com/2015/09/using-jackson-view-to-protect-mass-assignment.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...