Уязвимость подделки запросов на стороне сервера - PullRequest
0 голосов
/ 10 марта 2020

У меня есть контроллер сервиса RESTful, который запрашивает другой сервис RESTful

@ResponseBody
@RequestMapping(value = "/headerparameters/{instanceId}", method = RequestMethod.DELETE)
public RestContainerFormBean passivizeHeaderParameter(@PathVariable String instanceId) throws GenericException, IOException {

    String url = proactiveURL + "/customerheaders/" + instanceId;
    if(isSecurityCheckOK(url)){
        ResponseEntity<CustomerHeaderParameterBean> response = restTemplate.exchange(url, HttpMethod.DELETE, new HttpEntity<>(new HttpHeaders()), CustomerHeaderParameterBean.class);
        CustomerHeaderParameterBean result = response.getBody();
        setButtonActivity(result);
        l10nOfValue(result);
        return new RestContainerFormBean(result);
    } else{
        throw new IOException();
    }
}

Этот код не может пройти политику SonarQube.

Рефакторинг этого кода, чтобы не создавать URL из испорченного ,

Данные, предоставленные пользователем, такие как параметры URL, полезные данные POST или файлы cookie, всегда должны рассматриваться как ненадежные и испорченные. Удаленный сервер, выполняющий запросы к URL-адресам на основе испорченных данных, может позволить злоумышленникам отправлять произвольные запросы во внутреннюю сеть или локальную файловую систему.

Проблема может быть устранена любым из следующих способов:

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

Как я могу пройти политику, придерживаясь соглашений REST?

1 Ответ

1 голос
/ 10 марта 2020

Используйте UriComponentsBuilder для кодирования URL вместо использования необработанного URL.

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