proxy - 使用 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
我在想有一些方法可以创建链式规则评估,如果满足任何规则,它允许消息通过,但在不满足任何规则时拒绝消息。
谢谢!
解决方案
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上的教程。
推荐阅读
- java - 在 ConditionalOnProperty 注释中使用主机名
- logstash - 使用 dissect 进行日志解析
- javascript - ts-node 在 OS X 上运行测试,但不在 Ubuntu 上
- xamarin.forms - 以 xamarin 形式接收来自 android 光束的消息
- c# - 每次要使用类中的函数时调用“新”
- sql-server-2012 - 如何在 SQL Server 2012 中使用 OPENROWSET 在文件名中插入基于当前日期的数据?
- docker - 多阶段构建映像不起作用,而正常构建则起作用
- javascript - JavaScript 将数组从一个文件导出到另一个文件以供使用。节点.js
- laravel - Laravel:给定特定时间时调度程序不起作用
- php - 如何在php中合并两个mysql结果?