我目前有一个使用 jersey-server 1.1 框架创建的简单 xml 端点(示例)。它使用以下表示法使用和生成 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)
?