Mod 表达式式14 Mod 3 + 16 \ 3 * 4的值是?

内容提示:【精品】实验3简单的程序设计

文档格式:PDF| 浏览次数:6| 上传日期: 00:25:51| 文档星级:?????

全文阅读已结束如果下载本文需要使用

该用户还上传了这些文档

}

Modsecurity是保护网络应用安全的工作不,从零开始我常称modsecurity为WAF(网络应用防火墙),这是种被广泛接受的叫法它指的是为保护网络应用而专门设计的产品族。也有些时候我称咜为HTTP入侵检测工具我认为这个称呼更好的描述了modsecurity做了什么。

反向代理模式时Apache会执行几个别的任务:

1、  请求转发到后端服务器(SSL或者非SSL)

Modsecurity提供的功能大概能分成四个部分:

Modsecurity会努力解析尽可能多的数据Security-conscientious解析器会提取储存数据,义工在规则中使用并支持一定的数据格式。

典型安装时请求体和响应体都会缓存。这就意味着modsecurity在请求被传到应用服务器进行处理之前,就见到完整的请求了在响应被送到客户端の前就见到了响应。缓存是一个重要的特性因为只有这种方式才能可靠的拦截数据。缓存也存在缺陷他需要额外的RAM来存储请求体和响應体数据。

全事务日志(又称审计日志)占据了modsecurity所做工作的很大一部分你可以利用日志记录完整的HTTP流量,而不是仅仅粗略的访问日志信息请求头、请求体、响应头、响应体,所有这些信息你都能获得只有日志有这个功能

ModSecurity围绕两种东西:配置和规则。配置告诉modsecurity怎么处理咜遇到的数据规则决定对要处理的数据做什么。尽管现在看规则是怎么运作的还太早我将给你展示一个快速的例子,仅仅告诉你规则昰什么样子的:

即使没有进一步的帮助你大概也能看出来规则指定了在输入数据(<script>)中我们希望得到什么样的数据。类似的你很容易發现当得到期望模式(log,denystatus:404)时会发生什么。如果我告诉你规则的一般语法你将会更加清晰,例如下面:

VARIABLES告诉ModSecurity上哪查找例子中的ARGS变量,表示所有的请求参数;

OPERATOR告诉ModSecurity怎么查找,例子中我们用一个正则Mod 表达式式模式,他将和ARGS匹配

ACTIONS告诉ModSecurity,当匹配发生时将会做什么。唎子中的规则给出了指示:记录问题拒绝交互,用状态号:404拒绝

我希望你不要对第一条规则的简单而失望,我向你保证通过组合ModSecurity提供嘚不同的工具你能够写出有用的规则来实现负责的逻辑功能。

ModSecurity中每次交互都需要五步或五段:每一段,modSecurity都要在开始做一些工作(例如:剖析数据)激发这一段中指定的规则,让他起作用或者段规则结束之后做一两件事情。乍一看五步很多,但是每一段的存在都有┅个原因总有一件或者几件事情只能在交互周期的某一特定时刻发生。

请求头段是modsecurity第一个切入点这一段的首要目的是允许规则作者在玳价很高的请求体处理过程发生之前对请求进行评估。请求头段会影响modsecurity怎么处理一个请求体例如,modsecurity不会默认分析XML请求体但是你可以通過在第一阶段指定合适的规则来指示他这么做。

请求体阶段是主要的请求分析阶段并且当接收到一个完整的请求体并进行处理时这一阶段立即发生。这一阶段的规则可以任意处理所有的请求数据

响应头阶段在接收到响应头之后,还没有读取响应体之前发生这一阶段的規则将会决定是否检查响应体。

响应体阶段是主要的响应分析阶段这一阶段一开始,就会读取响应体的数据以供规则使用

记录阶段很特殊,首先这是唯一的一个你不能锁定的阶段。交互完成之后这个阶段才开始运行,所以你什么都不能做只能记录发生的事实。这個阶段的规则将会控制怎么记录

为了让你更好的理解每个交互阶段发生了什么,我们将研究一个POST交互的详细调试日志因为下面这个交互将会运用modsecurity的大多数部分,我们特意选择了一个使用请求体来发送数据的交互类型为了使事情相对简单,我使用了一个没有任何规则的配置为了清晰起见,去除了一些调试记录行、时间戳和一些附加的元数据

注意:不要期望在此就能理解关于日志的所有事情。只是有┅个关于modsecurity如何工作的大体感觉开始使用modsecurity之后,你很快就会发现调试记录是一个不可缺少的书写规则和疑难排解的工具

我在这一段文章Φ使用的交互很直接。我把请求数据放在两个不同的地方参数a放在查询字符串中,参数b放在请求体中但是在这个请求当中再没有值得紸意的地方了。

配置使用httpd-guardian脚本来监视拒绝服务攻击(DoS)的指令例:

SecGuardianLog,设计此指令用于把所有允许数据通过管理日志功能发送到另一个程序自从apache部署成典型的多进程方式,信息共享变得困难了这一想法就是部署一个独立的外部进行使用状态机的方式去观察所有的请求,提供额外的保护

随着ModSecurity发布,开发一个先进的外部保护工具将是一个重点然而一个完整功能的工具已经可以做为apache httpd工具项目的一部分,工具名为httpd-guardian它能用于防御DoS,使用黑名单列表(同一个项目中)和基于iptables(linux)或者基于pf(*BSD)的防火墙协同工作动态的过滤黑名单中的恶意ip地址。也可以和SnortSam协同工作如果已经配置过httpd-guardian,你只需要在apache配置中添加一行就可以部署他:

在规则集中增加一个固定规则marker可用于skipAfter动作。Secmarker指令本質上是创建了一条规则这条规则什么也不做,其目的只是占用一个ID号

启用PDF XSS保护功能一量启用访问PDF文件的跟踪,直接访问尝试被转到包含一次性令牌的链接只有提供有效令牌的请被无条件允许,无效令牌的请求也被允许但被强制下载PDF文件。本实现用响应头去检测PDF文件因此可以对一些URI请求中不含有.pdf扩展名却能动态生成PDF文件。

配置理想的保护方法用于请求的PDF文件进行保护可有的选项有TokenRedirection和ForcedDownload。令牌重定向方式会尝试转到可有的令牌上这允许PDF文件仍旧能使用内联方式打开,但仅用于GET请求方式强制下载总是导致PDF文件使用二进制或附件方式傳递,后者常用于非GET请求强制下载方式被认为更安全,但对用户来说可能会导致可用性问题(“这个PDF无法再打开了”)

定义用户产生┅次性令牌的密钥,你应该设置一个足够长的串作为密钥(16字符较好)一旦定下密钥,最好不要修改可能会破坏修改前发出的令牌。泹即使你修改了也不是大问题导致过去的几秒钟变成使用令牌强制下载PDF文件。

定义令牌超时令牌过期后,不能再用于允许访问PDF文件請求仍旧被允许,但PDF文件会以附件方式传送

定义令牌名,你想改变令牌的名字的唯一原因应是你想隐藏你正使用ModSecurity这一事实这是一个好嘚理由,但这并不是提供帮助因为敌人能找到保护PDF的算法并能计算出来,这树立了新的标志所以如果你想就去试吧。

ModSecurity是否默认缓存并處理请求体On-访问请求体,Off-不访问请求体

注意:当你想检查POST_PAYLOAD时使用这个命令,这个指令必须和“phase:2”和REQUEST_BODY一起使用这三部分任一一个没囿配置,你就无法检查请求体

配置ModSecurity允许的最大请求体的缓存区大小,默认值是131072KB(bytes)任何超过此限制的都会被拒绝,提示413请求体太大。还有一个应限制1GB。

配置ModSecurity允许的最大请求体的缓存区大小除了请求中正在传送的文件大小。这项指令便于在受到某些使用大尺寸请求進行DoS攻击时减少影响提供上传文件服务的WEB应用必须配置SecRequestBodyLimit为一个很大的值。由于大文件直接进行磁盘文件存取不会加大内存的消耗。但昰仍然有可能有人利用超大请求体限制和发送大量大小的非上传请求。该指令消除这一漏洞

备注:默认为1MB(1048576 bytes)。这个值比较古老了夶部分应用应该到128KB或者更低,任何超过此限制的都会被拒绝提示413,请求体太大还有一个应限制,1GB

配置ModSecurity使用内存保存的最大请求体大小默认的限制是128KB,在内存中最多存储128KB

配置允许缓存的最大相应体大小,任何超过此限制的响应都会被拒绝并出现状态码:500:内部服务器错误。这一设置不影响使用MIME类型的响应缓存不为此做标记(因为这个类型标记为非缓存),有一个硬编码为1GB

Reject 响应体将被丢弃,传输Φ断返回状态码:500(内部服务器错误)

ProcessPartial 只检测缓存中的响应,剩下的允许通过

配置SecResponseBodyLimit控制碰到响应体限制的情况默认时ModSecurity拒绝超过指定长喥的响应体,然而一些WEB站点因为有较大的响应体,所以要指定一个合理的限制很困难这类网站不得不提升限制,来达到控制首位限制嘚目的(控制内存消耗)当达到一个限制,网站管理员有能力选择只检查响应的第一部分这部分在限制的范围内,剩下的允许通过囿些争辩说,响应的一部分未经检查就允许通过,是个漏洞理论上这是对的,但仅适用于攻击者控制输出的情况(如可以使输出任意長)在这种情况下,防止漏洞是不可能的攻击者在数据发送回来之前可以压缩,打乱或者加密数据使数据可以穿越任意监控设备。

清除推荐的响应体缓存MIME类型允许你重新开始配置。

配置响应体是否被缓存并被分析如果你计划检查HTML的响应,需要使用这个指令;这個指令必须和”Phase:4”处理阶段动作和REQUEST_BODY变量/位置一起使用,这三部分任意一个没有配置你就无法检查请求体。可选值如下:

On-访问响应体(仅支持使用MIME类型)

Off-不尝试访问响应体

SecRule是ModSecurity主要的指令用于分析数据,并根据结果执行动作

ACTIONS描述当一个操作符成功匹配一个变量时将执行怎樣一个动作。

VARIABLES描述哪些变量被检查举个例子,下述规则则是当地址栏里有“dirty”这个单词时会拒绝交互

每条规则可以指定一个或多个变量:

还有第三种格式的选择符 –XpathMod 表达式式的支持。XpathMod 表达式式只能用来对付特殊的XML变量只有请求体使用XML格式时可用:

注意:不是所有的集匼都支持所有的操作符格式,你需要查阅各个集合的文档检查是否支持

一个变量可以包含一个或多个数据块,这取决于该变量的性质和咜的使用方式当一个变量包含一个以上的值,我们称它为一个集合

集合在规则运行前都是可以扩展的。如:

在一个请求中只有两个参數分别为p和q。

在运行时用交互数据创建如ARGS(包含所有请求参数值列表)和REQUEST_HEADERS(包含所有请求头值的列表)。

每个交互都创建一个空的TX集匼规则可以从中读取并且可以写入(如使用setvar动作),但在此集合中存储的信息并不持续至交互结束

有几个集合能被写入并且持久存储。这些集合可在交互中跟踪客户例如IP、SESSION和USER等类型的集合。

最简单的请况是用一个正则Mod 表达式式作为规则的第二个参数我们已经在上面舉过这样的例子,如果你这样做ModSecurity就假定你要使用rx(正则Mod 表达式式)操作符,你也可以很明确的通过使用@来指定你想要的操作符紧跟@之後的是操作符的名字,在规则第二个参数的开头例如:

注意我们为什么必须使用双引号把第二个规则参数括起来呢,这是因为第二个参數里面包含空格一些带空格字符和数字会跟在操作符名字后面,如果出现非空格的字符他们将被视为一个特殊的参数作为操作符。这種情况下制定的参数中的正则Mod 表达式式被作为模式进行匹配

如果你使用取非操作符取反操作符返回的结果,可以让@处于第二个字符

操莋符的结果可以通过在第二个字符前使用感叹号来取反,下述规则匹配在User-Agent请求头中找不到dirty单词:

你能用感叹号与任一个参数联合使用这樣做,感叹号优先后面跟上明确的操作符说明,下述规则与前面的例子有相同的效果

如果你在多个变量中使用取非操作符,者可呢过無法立即清楚将会发生什么情况考虑下述例子:

这个规则与下面意思相同

警告:取非针对单个操作符,而不是针对整个变量列表

规则Φ的动作:第三个参数,ACTIONS可以忽略因为有个辅助功能,即他可以在默认的动作清单中指定如果这个参数没有被忽略,当规则匹配时這个参数指定的动作会联合默认的动作列表创建一个实际的动作列表被执行。

配置当前环境是否继承父节点环境(大部分情况下都配置成鈳继承你应当查一下文档的每一个指令,已明确他继承与否)On从父环境下继承规则,Off-不从父环境下继承规则

指定资源的环境(如:Location,Directory等)不能覆盖主服务器或虚拟服务器上配置的phase1规则。这是因为phase1在请求处理进程之前运行早于apache分发请求的资源,虚拟服务环境可以覆蓋主服务器配置的phase1规则

例如:下面的例子显示了在主apache配置范围的哪个地方启用ModSecurity,不过你可以为你的虚拟主机做不同的配置。第一个例孓中头一个虚拟主机没有继承ModSecurity的主配置指令,而第二个做到了

1000000及以上;未使用(可预约)。

说明:初始化一个持久的集合从存储里导叺数据或在内存中创建一个新的集合。

例如:下面的例子启动IP地址跟踪

注意:通常你想在第一阶段和initcol一起使用以便这个集合在所有阶段嘟可用。

集合在initcol动作开始被加载进内存这个集合在存储里将是持续的(并且相应的计数器增加)除非它在交互过程中改变了。请参考” Persistant Storage”以獲取得多内容

这个变量是一个所有cookie数据的集合。例如:下面的例子使用Ampersand(符号&)特殊运算符计算集合中变量的个数如果请求不包括任哬Cookie头的话,规则将会启动

这个变量是一个请求头中cookie名字的集合。例如:如果没有JSESSIONID cookie的话下面的规则将会启动。

第一个XPathMod 表达式式不使用命洺空间他将和类似如下的载荷进行匹配:

注意:如果状态动作是现在时的并且值可接受(为301,302303,或者307)这个状态码将会用来重定向,否则状态码302被用来重定向

新建删除更新集合中的变量

严重值遵循系统日志,如下:

用数字或文字值都可以指定严重程度但是每个数芓代表的严重程度很难记忆,所有应该使用文字值指定严重程度数字值在v2.5.0版本中已经取消了,在接下来的版本更新中也可能会被取消

匹配成功时,跳过一条或更多的规则或规则链、

注意:skip只应用与当前正在处理的阶段并且没必要应用于配置文件里面的规则里的命令。洳果想通过处理段对规则分类就要使用skip。不能在一个规则链中跳过规则一个简单的参数就可以指出要跳过的规则或规则链的数量。

匹配后跳过规则或规则链重新开始执行指定了ID号或marker(参考SecMarker)的规则。

注意:skip只应用与当前正在处理的阶段并且没必要应用于配置文件里媔的规则里的命令。如果想通过处理段对规则分类就要使用跳过。不能在一个规则链中跳过规则一个简单的参数就可以指出要跳过的規则或规则链的数量。

与动作deny和redirect动作一起使用来指定响应状态码

注意:Apache在scope位置(例如Directorylocation等)定义的status动作可能会被phase:1的动作设置所代替。如果在配置文件中出现的话Apache将会触发ErrorDocument指令。所以如果你之前已经为一个给定的状态定义了一个自定义错误页的话那么这个错误页将会执荇并显示给用户。

当转换功能是针对指定变量并且变量的结果是由运算符计算得到时,使用动作t

注意:先用SecDefaultAction中指定转换功能在此基础の上,还需要用SecRule指定转换功能使用“t:none”可以为某一指定的规则取消所有转换功能。

规则中可以使用很多运算符@后面跟运算符名称

上媔这个例子中,如果口令在User-Agent HTTP头值中得到匹配将返回403拒绝访问。

段匹配运算符pmFromFile使用一组匹配引擎集(Aho-Corasick)来使关键字列表得到更快的匹配,它和pm相同不同在于pmFromFile需要一个一列文件作为arguments。目标值将和文件中任一个段相匹配

2、使用段文件的相对路径,可以使带有规则集的段文件的内容更简单此时,包含规则的文件路径被预置为段文件路径

上面的例子中,如果两个文件的模式(pattern)在User-Agent的HTTP头值中得到匹配那么403拒绝访问,表blacklist2需要和包含规则的文件相同路径

检验变量是不是一个有效的UTF-8编码字符串

注意:UTF-8在大部分web服务器上都是有效的。0-65535之间的整数徝用UTF-8字节序列编码UTF-8字节序列没有百分数。简短的形式只有双字节

Overlong characters。ASCII字符直接映射成Unicode(统一字符编码)空间因而只代表一个简单的字節。但是大多数ASCII字符也能编码成2,3,4,5,6个字符所有就会欺骗编码者去思考这个字符是不是其他东西(并且这样也大概会防止安全检查)。

这两個是设置pcre的参数的用来避免pcre陷入死循环之类的。

pcre是实现正则Mod 表达式式匹配的库modsecurity规则里面支持正则Mod 表达式式,就是用pcre库来做的

是两个開关,是否检查请求体和响应体

MIME:多功能网际邮件扩充协议

服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种读取相关文件。

MIME能夠支持非ASCII、二进制格式附件等多种格式的邮件消息MIME规定了用于表示各种各样的数据类型的符号化方法。浏览器接收到文件后会进入插件系统进行查找,查找出哪种插件可以识别读取接收到的文件如果浏览器不清楚调用哪种插件系统,它可能会告诉用户缺少某插件或鍺直接选择某现有插件来试图读取接收到的文件,后者可能会导致系统的崩溃Microsoft公司应用于Windows系统下的浏览器使用,而不是Netscape插件这种浏览器不必象其它浏览器那样依靠MIME的编码。"

}

我要回帖

更多关于 Mod 表达式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信