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
Как я могу исправить этот код, чтобы избежать уязвимости сценариев XXS с помощью сканирования CheckMarx? ⇐ JAVA
Программисты JAVA общаются здесь
1738303373
Anonymous
CheckMarx Состояния:
Метод [b] getEntity [/b] встроенные данные в сгенерированном выходе с [b] body [/b] в [b] proxycontrollerservice [/b] на этой линии:
< emponseanty.status(rawstatuscode).Headers(copyresponseHeaders(ResponseHeaders)).body(body);; встроен в вывод без надлежащей дезинфекции или кодирования, что позволяет злоумышленнику внедрить почтовый код в веб-страницу. Злоумышленник сможет изменить возвращенную веб -страницу, просто предоставив модифицированные данные при вводе пользователя [b] servletRequest [/b] & [b] httpmethod [/b], который читается [b] serverproxy [/b] Полем Ввод протекает через код прямо на веб -страницу вывода без дезинфекции.@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.
Подробнее здесь: [url]https://stackoverflow.com/questions/79401887/how-can-i-fix-this-code-to-avoid-xxs-cross-site-scripting-vulnerability-from-che[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия