使用 xsd 验证 xml 的代理

Proxy to validate xml with xsd

我一直在寻找可以充当代理的东西,我可以为它提供 XSD 以验证 HTTP 流量请求主体中的 xml 内容。

有谁知道 Windows 或 Linux 上是否存在这样的东西? 我检查了 ModSecurity,但我有点迷失了它——我相信 SecRule XML 也许能够做到,但我找不到如何检查 xml 与多个 xsd文件以查看它是否通过了任何特定文件?

validateSchema
Description: This operator requires the request body to be processed as XML.
Example:
SecDefaultAction log,deny,status:403,phase:2
SecRule REQUEST_HEADERS:Content-Type ^text/xml$ \
phase:1,t:lowercase,nolog,pass,ctl:requestBodyProcessor=XML
SecRule REQBODY_PROCESSOR "!^XML$" nolog,pass,skip:1
SecRule XML "@validateSchema /path/to/apache2/conf/xml.xsd"
This operator requires request body to be processed as XML.

https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual-(v2.x)#validateSchema

我认为有一些方法可以创建链式规则评估,如果满足任何规则,它允许消息通过,但在满足 none 时拒绝消息通过。

谢谢!

XML / XSD 检查 ModSecurity 是有效的,但它并没有被很多人使用(不像 ModSec 的核心功能),所以如果你发现粗糙的边缘我不会感到惊讶. 所以谨慎使用并考虑替代方案(-> mod_lua,使用 XML 库等)。

是什么阻止你检查它们

SecRule XML "@validateSchema /path/to/apache2/conf/xml.xsd"  "phase:2,id:1,log,deny"
SecRule XML "@validateSchema /path/to/apache2/conf/xml2.xsd" "phase:2,id:2,log,deny"

如果这样做,您还可以根据上下文分支和跳过规则。如Header-X,则通过id:1传递,如果Header-Not-X,则通过id:2.

传递

如果您缺乏实现此目的的 ModSecurity 知识,那么您可能需要购买 ModSec 手册或查看 https://netnea.com 上的教程。