首页 > 解决方案 > 使用 xsd 验证 xml 的代理

问题描述

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

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

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

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

谢谢!

标签: proxyreverse-proxymod-proxymod-securitymod-security2

解决方案


ModSecurity 中的 XML / XSD 检查有效,但并没有被很多人使用(与 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上的教程。


推荐阅读