В настоящее время у меня есть простая конечная точка xml (пример), созданная с использованием инфраструктуры jersey-server 1.1. он потребляет и производит XML, используя следующие обозначения:
@POST
@Path("/post")
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public Response getEmployee(Employee employee) {
return Response.status(Status.OK).entity(employee).build();
}
однако конечная точка уязвима для атак XXE. (пример)
также возможно заставить мой сервер говорить, чтобы запросить любую конечную точку, используя эту запись ...
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test [
<!ENTITY % a SYSTEM "file:///etc/passwd">
%a;
]>
Я хочу защитить сервер и не разрешать ему вызывать другие серверы / подавать файлы злоумышленникам.
Есть ли способ сделать это, поскольку все, включая чтение XML, исходит из самой платформы? @Consumes(MediaType.APPLICATION_XML)
Единственный способ сделать это - использовать регулярное выражение в теле запроса с фильтром? заблокировать DOCTYPE
, SYSTEM
, ENTITY
запросы и вернуть ошибку, но мне интересно, есть ли более простой способ сделать это и переопределить поведение по умолчанию @Consumes(MediaType.APPLICATION_XML)
?