Mod security 阻止对 URI 路径的 GET 请求

2024-03-09

我需要阻止某个 URI 路径的 GET 请求。 我正在使用异常模式,但我使用的是直接块规则,我无法使规则正常工作

example GET /secure/test/bla/bla/例子https://bla.bla.com/secure/test/bla/bla?www.test.com

SecRule REQUEST_URI "@streq \/secure\/test\/bla\/bla\?.+" \
 "phase:1,id:92,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:'403 Access Denied',chain"
SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase"

我可以用这样的正则表达式来写这个吗?

SecRule REQUEST_URI "!@rx ^(:?\/secure\/test\/bla\/bla\?.+)$" \
 "phase:1,id:91,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:'403 Access Denied',chain"
SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase"

这些不起作用,我不明白为什么,我需要以不同的方式编写正则表达式吗?

在第二条规则中我需要添加"@rx?有什么区别"!@rx and @rx


所以这是这个问题的延续:modsecurity 创建规则禁用 GET 请求 https://stackoverflow.com/questions/39980992/modsecurity-create-rule-disable-get-request/39983843

example GET /secure/test/bla/bla/ example
https://bla.bla.com/secure/test/bla/bla?www.test.com

我不懂这啥意思。你能把它改写得更有意义吗?您是说 URL 将包含另一个域吗?

您给出的例子有几个问题。例如这部分:

"@streq \/secure\/test\/bla\/bla\?.+"

The @streq意味着这是一个直接的字符串比较。所以你不能使用?.+部分 - 我猜这看起来是正则表达式的一部分?如果您想要正则表达式,那么这是默认的,所以不要包含@streq bit:

"\/secure\/test\/bla\/bla\?.+"

我也不认为你需要逃避正斜杠,但这样做应该没有什么坏处。

你还有这个:

SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase"

你为什么要检查post当你想阻止时get要求?

在第二条规则中我需要添加“@rx吗?”!@rx和@rx之间有什么区别

@rx 表示后面是正则表达式。正如我所说,它是默认值,因此实际上不需要包含在内,因为除非提供另一个 @ 命令,否则将假定 @rx。

!@rx 表示正则表达式应该not被匹配 - 即将此规则应用于与此正则表达式不匹配的任何请求。

我可以用这样的正则表达式来写这个吗?

SecRule REQUEST_URI "!@rx ^(:?\/secure\/test\/bla\/bla\?.+)$" \
 "phase:1,id:91,t:none,t:urlDecode,t:lowercase,t:normalizePath,deny,status:403,msg:'403

访问被拒绝',链” SecRule REQUEST_METHOD "@streq post" "t:none,t:lowercase"

不,这说明了任何事情not匹配第一个正则表达式,也是应该被阻止的帖子。

因此对 /anything 的 POST 请求将被阻止。 并且对 /anything 的 GET 请求不会被阻止。 这似乎与您想要的完全相反! 尽管 POST 到 /secure/test/bla/bla/ 仍将被允许,因为它与第一个规则不匹配,因此被允许通过。

我真的认为你需要学习 ModSecurity 的基础知识,因为你显然很难理解这一点。

ModSecurity 规则的基本语法是:

SecRule \
  VARIABLE_TO_CHECK \
  VALUE_TO_CHECK_FOR \
  ACTION_TO_TAKE_IF_MATCHED \

使用 \ 允许您将规则分隔为多个行以提高可读性。

  • VARIABLE_TO_CHECK 可以是 ModSecurity 变量列表中的任何一个 (https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Variables https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Variables)

  • VALUE_TO_CHECK_FOR 默认是正则表达式。虽然可以 例如,更改为直字符串比较。这将是 与 VARIABLE_TO_CHECK 的值进行比较,如果它与 ACTION_TO_TAKE_IF_MATCHED 将被运行,如果不匹配则 ModSecurity 将停止处理此请求的此规则并移动 继续下一条规则。

  • ACTION_TO_TAKE_IF_MATCHED 是操作列表 (https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Actions https://github.com/SpiderLabs/ModSecurity/wiki/Reference-Manual#Actions)。 每个规则必须有一个 id,然后通常会阻止请求 上面的匹配(使用deny)或白名单请求(使用allow).

例如:

SecRule \
  REQUEST_URI \
  "^/secure/test/bla/bla/.*" \
  "id:1234,deny"

将拒绝任何对 /secure/test/bla/bla/ 的请求(GET 和 POST)。

如果您想检查两个变量,那么您需要将两个不同的规则链接在一起,在这种情况下,只有当整个链与所有规则匹配时,才会发生任何破坏性操作(例如拒绝) - 但令人困惑的是,第一个规则必须说明最终操作拿。

SecRule \
  REQUEST_URI \
  "^/secure/test/bla/bla/.*" \
  "id:1234,deny,chain"
 SecRule \
    REQUEST_METHOD \
    "GET"

因此,此规则将拒绝对以 /secure/test/bla/bla/ 开头的任何位置的任何请求,这也是一个 GET 请求。

构建链接规则时,它很快就会变得混乱,因此建议您首先测试每个单独的规则,以确认其块是否合适,然后将它们链接在一起。

正如我之前建议的,我强烈建议您购买并阅读Mod安全手册 https://www.feistyduck.com/books/modsecurity-handbook/教您 ModSecurity 如何工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mod security 阻止对 URI 路径的 GET 请求 的相关文章

  • 我应该如何处理 Android 应用程序中 http post 的服务器超时和错误代码响应?

    我的 Android 应用程序会向 URL 发送 http 帖子 例如http example com 电子邮件受保护 http example com abc php email abc xyz com因此 Android 应用程序基本上
  • 使用 php 和 jquery 的简单彗星示例

    谁能给我一个使用 PHP 的彗星技术的简单好例子 我只需要一个使用持久 HTTP 连接或类似连接的示例 我不想使用轮询技术 因为我已经设置了类似的东西 并且不仅难以使用和管理它的大量资源 另外我使用的是 IIS7 而不是 Apache 一个
  • Elasticsearch:如何查询连接数?

    如何询问我的 Elasticsearch 服务器现在有多少个连接 这与插座数量相同吗 我也不知道如何获得这些数字 这与客户端的数量不同 对吧 因为每个客户端可能打开多个连接 找不到任何相关信息 但我确实发现您可以在 Elasticsearc
  • 处理原始 HTTP 请求内容

    我正在 ASP NET 中做一个电子商务解决方案 它使用PayPal 网站支付标准 https www paypal com IntegrationCenter ic standard home html服务 除此之外 我还使用他们提供的服
  • 检查隐藏是否等于 true 或 false jQuery

    我有这个 div attr hidden true i tried var a div attr hidden var b div attr hidden val var c div hidden var a div disabled 我只
  • 使用 HTML 表单时如何在 HTTP 请求正文中发送数据?

    HTTP 规范规定 POST 请求可以包含任意数据体 An HTML form元素可以 POST 到 URL 并且可能包含input元素 但那些input元素变成查询字符串 我怎样才能得到一个form还可以在按下提交按钮时发送的 HTTP
  • 如何在 Android 中从服务器检索数据时更新滚动的 ListView?

    目前 我正在使用 AsyncTask 来处理 Http 连接并以 JSON 格式检索数据 加载所有数据很简单 但会消耗太多时间 因此我决定使用一次加载 10 个项目LIMIT OFFSET mysql 接下来我设置事件onScroll为我的
  • 在弹性搜索中使用 GET/POST 时的不同结果

    我正在通过 Elastic Search Head 插件尝试弹性搜索 当我通过 POST 提交查询时 结果符合预期 但是 当我使用 GET 尝试相同的查询时 我总是会返回索引中的所有值 那么 如何通过 GET 将查询传递到弹性搜索服务器 以
  • iOS 安全性将带有密码的数据发送至服务器或从服务器发送数据

    我正在构建一个应用程序 需要在服务器执行任何操作之前从用户设备发送密码以在服务器上进行身份验证 事情是这样的 用户的手机上有一个纯文本密码 该密码也在服务器中以 bcrypt 二进制文件的形式存在 用户想要从数据库中获取某些内容 因此用户通
  • HTTP 查询字符串和 []

    PHP 使用 在查询参数名称中 以确保多次出现的参数都出现在 GET超全局变量 否则只出现最后一次出现的情况 还有其他软件可以做到这一点吗 但从RFC 3986 https www rfc editor org rfc rfc3986 以及
  • gRPC(HTTP/2) 比使用 HTTP/2 的 REST 更快吗?

    目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量 目前 该应用程序使用REST with HTTP 1 1并且我们遇到了很高的延迟 我需要解决这个延迟问题并且我愿意使用gRPC HTTP 2 or 休息 HTTP2
  • 有人成功用 Robolectric 模拟 HttpRequests 吗?

    我刚刚开始使用 Robolectric 模拟大多数 Android 类似乎工作正常 但是当我的测试类尝试创建 DefaultHttpClient 时 它会收到可怕的 Stub 错误 被测试的类在这一行失败 HttpClient httpcl
  • 对过期会话进行休息调用:HTTP 401 响应导致浏览器显示登录窗口

    我编写了一个 HTML 5 应用程序 它使用 AngularJS 并与在 Tomcat 上运行的 Java REST 后端进行交互 我使用 Spring Security 来处理登录和安全性 当用户进入网站时 他将被转发到登录页面 该页面创
  • ReverseProxy取决于golang中的request.Body

    我想构建一个 http 反向代理 它检查 HTTP 主体 然后将 HTTP 请求发送到它的上游服务器 你怎么能在 Go 中做到这一点 初始尝试 如下 失败 因为 ReverseProxy 复制传入请求 修改它并发送 但正文已被读取 func
  • 是否有用于通过 HTTP、HTTP 隧道发送二进制数据的 Java 库?

    我想通过 HTTP 以二进制格式发送相当大的数据块 也称为HTTP 隧道 http en wikipedia org wiki HTTP tunnel 我想通过 Java 将这种技术用于一些 Java Swing 应用程序 也可能是 And
  • 使用 Google OAuth2.0 时出现错误请求

    从 Salesforce 中使用 Google OAuth 时 我收到 400 错误请求 以下错误与无效的 grant type 有关 但如果您查看 使用刷新令牌 下的文档 您会发现它是正确的 https developers google
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • 服务器返回网页 404,但页面在浏览器中显示正常 - 为什么?

    一个奇怪的网页横亘在我面前 作为一名开发人员 我必须解开这个谜团 在任何浏览器中访问网页时 一切似乎都很正常 网页按预期显示 但是当查看控制台时 服务器实际上返回了 404 状态代码 那么浏览器为什么要渲染页面呢 查看正文显示返回了有效的
  • Go中如何自定义http.Client或http.Transport超时重试?

    我想实现一个自定义http Transport对于标准http Client 如果客户端超时 它将自动重试 附 由于某种原因 习俗http Transport is a 一定有 我已经查过了hashcorp go retryablehttp
  • 将 HttpApi 与 I/O 完成端口结合使用

    我刚刚偶然发现了微软的HTTP 服务器 API http msdn microsoft com en us library aa364510 28v vs 85 29 aspx 简介中写道 HTTP 服务器 API 使应用程序能够通过 HT

随机推荐

  • API 来比较 AST? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有一个开源java api允许比较java源代码的两个抽象语法树 我想看看两个语法树之间的差异 类
  • 关键字 CONSTRAINT 在此 CREATE TABLE 语句中起什么作用

    我正在学习如何将 sqlite3 与 python 一起使用 我所关注的教科书中的示例是一个数据库 其中每个国家 地区记录都有一个地区 国家 地区和人口 书上说 以下代码片段使用 CONSTRAINT 关键字来指定 表中没有两个条目是 所创
  • 使用 Javascript 的 8 位异或校验和

    我正在尝试模仿 Windows 应用程序格式化消息并发送通过 USB 通过 UART 传输到显示该消息的设备 该应用程序计算checksum并将其粘贴到消息后面 否则设备将不会接受该命令 校验和不是 crc8 校验和 但它是什么 使用 US
  • 使用 powershell 从路径获取最新创建的文件夹

    如何使用 Windows PowerShell 从路径获取最新创建的文件夹 我有路C temp我想在此路径中找到最近创建的文件夹 PowerShell 主要与管道一起工作 因此您编写的大部分内容将包括创建表示某些信息的对象 以及过滤和操作它
  • 查找最近一小时内产生的记录

    我有一个smalldatetime字段命名myTime创建记录时进行记录 我需要选择过去一小时内创建的记录的语法 我认为会是 and DATEDIFF hh datePart hh myTime DatePart hh GETDATE lt
  • 是否可以保留自定义元素的内部 html?

    使用自定义元素 我想对自定义元素内的元素进行样式设置 但是当我定义该元素时 除了影子 dom 之外的所有内容都会消失 如何将内容从元素移动到 Shadow dom 我已经有一个包装元素 div class wrapper 在阴影内 但尝试使
  • Keras:将预测与使用标准化数据训练的模型结合使用?

    我正在 Keras 中创建一个深度神经网络 以使用表格数据执行 NN 回归 最佳实践是标准化输入和输出序列 我也想使用predict函数提供各种输入集的模型输出估计 如果训练数据已标准化 我想我还需要标准化predict使用相同的缩放参数的
  • 温莎城堡延迟加载服务

    有时 我发现自己处于这样的情况 只有在满足特定条件时才需要解决服务 例如 用户可以选择发送电子邮件或短信通知 我想根据用户的选择来延迟加载电子邮件或短信服务 这样我就不必同时加载它们并浪费资源 例如 如果用户有 10 个选项怎么办 我遇到的
  • Node.js Express - 如何将 Stylus .styl 文件编译为 CSS

    我正在尝试从 Balloons http balloons io 开始构建一个应用程序 它使用 Backbone js 和 Express 来设置 UI 我从未使用过这些框架 而且我很难真正做出改变 据我了解 styl 文件被编译成 CSS
  • /etc/lsb-release 与 /etc/os-release

    我需要使用 bash 找出我正在运行的 Linux 发行版 成立这一页 https www cyberciti biz faq find linux distribution name version number 这非常有帮助 但是我的系
  • XSLT 和 xpath v1.0 查找重复项并聚合

    我想知道是否有一种方法可以在 xml 中搜索重复项 然后在找到时将所有重复项聚合到一个节点 埃克斯
  • 为什么我的 PDO 不起作用?

    我开始使用 PDO 并使用 PDO 成功连接到 MySQL 但是 当我尝试从数据库中选择内容时 什么也没有发生 没有任何回声 即使我在该表中有记录 并且列 username 存在 我的 PHP 日志中没有错误 我正在使用 MAMP 并且所有
  • 如何在 Objective-C 中编写调用 `super` 实现的 c 函数? [复制]

    这个问题在这里已经有答案了 我需要实现一个通用 C 函数 它将调用super的实现并返回值 我将在运行时将此函数注入到目标类中 目标选择器的参数数量可以是任意数量 并且只有在运行时才知道 我实现了一个C函数 如下所示 但我不知道如何调用su
  • 根据另一个数组的值对 JS 数组进行排序的最快方法?

    有一些类似的帖子 但我找不到任何可以完全解决这个特定问题的内容 我有两个配对值数组 var A 0 5 0 6 0 5 0 7 0 8 0 1 var B a b c d e f note a 0 5 b 0 6 c 0 5 d 0 7 e
  • 单击部分透明图像上的透明区域

    Given some shape I would like it to be clickable on its filled parts and not clickable thus clicking through to the elem
  • 当我使用没有 OleDBConnection 对象的 OleDbDataAdapter 对象时,为什么我的 .NET 2.0 应用程序在 .NET 4.0 下崩溃?

    这是一个使用 VS 2005 编写的 NET 2 0 应用程序 它在运行 NET 2 0 的系统上运行良好 但在运行 NET 4 0 的系统上会严重崩溃 这是代码的关键部分 string selectCommand1 string conn
  • Backbone 和 bindAll:“func 未定义”

    我在使用 bindAll 时遇到问题 我得到的错误是func is undefined 对我做错了什么有什么想法吗 我都尝试过 bindAll 因上述错误而失败 并且 个人binds 不起作用 window test Backbone Vi
  • 命令行“sort | uniq -c | sort -n”的替代方法

    I use sort uniq c sort n多年来 但今天它失败了 因为我的输入文件是 10 GB 并且我的 tmp宽度为 1 GB sort write failed tmp sortmIGbL No space left on de
  • 如何在 JavaFX 中将图像显示为工具提示?

    我想显示图像作为工具提示 它工作正常 但在某些随机点它显示出波动 我想正常显示而不出现波动 我在鼠标输入事件上显示一个新场景 其中我添加了带有图像的图像视图 并在鼠标离开事件事件上关闭它 MOUSE ENTER PHOTO CORRECTI
  • Mod security 阻止对 URI 路径的 GET 请求

    我需要阻止某个 URI 路径的 GET 请求 我正在使用异常模式 但我使用的是直接块规则 我无法使规则正常工作 example GET secure test bla bla 例子https bla bla com secure test