Как я могу исправить этот код, чтобы избежать уязвимости сценариев XXS с помощью сканирования CheckMarx?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как я могу исправить этот код, чтобы избежать уязвимости сценариев XXS с помощью сканирования CheckMarx?

Сообщение Anonymous »

CheckMarx Состояния:
Метод getEntity встроенные данные в сгенерированном выходе с body в proxycontrollerservice на этой линии:
< emponseanty.status(rawstatuscode).Headers(copyresponseHeaders(ResponseHeaders)).body(body);; встроен в вывод без надлежащей дезинфекции или кодирования, что позволяет злоумышленнику внедрить почтовый код в веб-страницу. Злоумышленник сможет изменить возвращенную веб -страницу, просто предоставив модифицированные данные при вводе пользователя servletRequest & httpmethod , который читается serverproxy Полем Ввод протекает через код прямо на веб -страницу вывода без дезинфекции.@Controller
@Slf4j
public class ProxyController {
private final RestTemplate RestTemplate;
private final URI proxyUri;
private final ProxyControllerService controllerService;
private final ServiceHelper serviceHelper;

public ProxyController(ResrTemplate, restTemplate, @Value("${proxy.url") String proxyUrl, ProxyControllerService controllerService, ServiceHelper serviceHelper) {
this.restTemplate = restTemplate;
this.proxyUri= new URI(proxyUrl);
this.controllerService = controllerService;
this.serviceHelper = serviceHelper;
}

@RequestMapping(${proxy.contextPath})
public ResponseEntity serverProxy(@RequestBody(required = false) String body, HttpServletRequest servletRequest,
HttpMethod httpMethod, JwtAuthenticationToken jwtAuthenticationToken) {

Set userRoles = serviceHelper.getRoles(jwtAuthenticationToken);

var uri = ServletUriComponentsBuilder.fromRequest(servletRequest)
.host(proxyUri.getHost())
.port(proxyUri.getPort())
.scheme(proxyUri.getScheme())
.build(true)
.toUri();

var httpEntity = new HttpEntity(body, controllerService.createRequestHeader(servletRequest, proxyUri.getHost(), userRoles));

try {
return controllerService.createResponseEntity(restTemplate.exchange(uri, httpMethod, httpEntity. String.class));
} catch (HttpStatusCodeException exp) {
return controllerService.createErrorResponseEntity(exp);
}
}
}
< /code>
@Service
@Slf4j
public class ProxyControllerService {

public static final String USER_ROLES = "userRoles";
private final Pattern pattern;

public ProxyControllerService(@Value("${proxy.copyHeaderMatchRegex}") String copyHeaderRegex) {
this.pattern = Pattern.compile(copyHeadersRegex, Pattern.CASE_INSENSITIVE);
}

public HttpHeaders createRequestHeaders(HttpServletRequest servletRequest, String hostName, Set userRoles) {
var headers = new HttpHeaders;
var currentHeader = servletRequest.getHeaderNames();
while (currentHeader.hasMoreElements()) {
var headerName = currentHeader.nextElement();
if (pattern.matcher(headerName).matches()) {
headers.set(headerName, servletRequest.getHeader(headerName));
}
}
headers.set(HOST, hostName);
headers.addAll(USER_ROLES, new ArrayList(userRoles));
return headers;
}

public ResponseEntity createResponseEntity(ResponseEntity exchange) {
return getEntity(exchange.getStatusCodeValue(), exchange.getHeaders(). exchange.getBody());
}

public ResponseEntity getEntity(int rawStatusCode, HttpHeaders responseHeaders, String body) {
return ResponseEntity.status(rawStatusCode).headers(copyResponseHeaders(responseHeaders)).body(body);
}

private HttpHeaders copyResponseHeaders(HttpHeaders responseHeaders) {
return responseHeaders.entrySet().stream()
.filter(entry -> pattern.matcher(entry.getKey()).matches())
.collect(HttpHeaders::new, (httpHeaders, entry) -> httpHeaders.addAll(entry.getKey(), entry.getValue()), HttpHeaders::putAll);
}

}
< /code>
I have tried to sanitize the body in some places but no luck. Checkmarx is still showing same vulnerability.
public ResponseEntity getEntity(int rawStatusCode, HttpHeaders responseHeaders, String body) {

String sanitizedBody = Encode.forHtmlContent(body);
return ResponseEntity.status(rawStatusCode).headers(copyResponseHeaders(responseHeaders)).body(sanitizedBody);
}
< /code>
@RequestMapping(${proxy.contextPath})
public ResponseEntity serverProxy(@RequestBody(required = false) String body, HttpServletRequest servletRequest,
HttpMethod httpMethod, JwtAuthenticationToken jwtAuthenticationToken) {

Set userRoles = serviceHelper.getRoles(jwtAuthenticationToken);
String sanitizedBody = Encode.forHtmlContent(body);

var uri = ServletUriComponentsBuilder.fromRequest(servletRequest)
.host(proxyUri.getHost())
.port(proxyUri.getPort())
.scheme(proxyUri.getScheme())
.build(true)
.toUri();

var httpEntity = new HttpEntity(sanitizedBody, controllerService.createRequestHeader(servletRequest, proxyUri.getHost(), userRoles));

try {
return controllerService.createResponseEntity(restTemplate.exchange(uri, httpMethod, httpEntity. String.class));
} catch (HttpStatusCodeException exp) {
return controllerService.createErrorResponseEntity(exp);
}
}
}
< /code>
I have tried similar method for the httpMethod too.

Подробнее здесь: https://stackoverflow.com/questions/794 ... y-from-che
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»