Cookie parsing added添加cookie解析

现在你可以使用新的可选的过滤器变量(COOKIE_name, COOKIE_NAMES, COOKIE_VALUES)分析cookies。虽然之前你就可以查看cookie(cookie就是HTTP头),但是功能有限。现在ModSecurity可以分析cookie。

假设你想通过PHP会话cookie阻止XSS攻击,这个过滤器会确保cookie正常:

SecFilterSelective COOKIE_PHPSESSID "^[0-9a-z]+$"

COOKIE_NAMES和COOKIE_VALUES将会分别检测所有的cookie名字和值。

ModSecurity Cookie and Link Protection Patch

ModSecurity Cookie以及链路保护补丁18 August 2006

六月份,关于mod-security-users邮件列表,发生了一件重大事件:Daniel Fernndez Bleda and Carles Bonamusa Prez从Internet Security Auditors贡献了大量代码。针对ModSecurity 1.9.4的这个补丁,使用hash加密实现cookie以及链路的保护。现在可以从download from the ModSecurity web site获取这个补丁。请注意代码现在还没有上市,只能用于测试。我期待这段代码能尽快融入到官方代码库(为2.0.0之后的稳定版本发布做好准备)

 

Helping Protect Cookies with HTTPOnly Flag使用HTTPOnly标志保护Cookies安全

如果你不熟悉HTTPOnly cookie标志或者不明白网络应用为什么要使用它,请参考以下资源:

本质内容是:虽然cookie选项标志对防止XSS攻击没有任何帮助,但是他能阻止#1 XSS攻击,即能防止盗取SessionIDs。虽然HTTPOnly并不是一个很厉害的新技术,但是它的潜力很大。注意必须同时满足两个条件,才能实现它的潜力:

  • Web应用 –能为所有的Set-Cookie响应头的SessionIDs附上“HTTPOnly”标志
  • Web浏览器 – 对cookie数据确定并执行安全约束,这样javascript就不能访问它的内容。

目前使用HTTPOnly标志进行安全防护还存在挑战,因为HTTPOnly还没有在web应用和web浏览器上得到广泛的应用。例如:受你的web应用平台的限制,你可能需要一个复杂的机制来实现这个特性。例如:

- 在Java,你可以参考OWASP网站提供的例子: http://www.owasp.org/index.php/HTTPOnly#Using_Java_to_Set_HTTPOnly, 虽然对平台添加的JSESSIONID来说,效果不是很好。Jim Manico努力尝试并让 Apache Tomcat开发者在HTTPOnly支持上执行他提供的补丁- http://manicode.blogspot.com/2008/08/httponly-in-tomcat-almost.html. 关键是不同的web应用开发平台太多了,在每一个需要保护的web应用里面寻找支持不是一件容易的事情。

对浏览器来说-间断性的使用HTTPOnly。这就是为什么OWAS内在安全组开始建立一个HTTPOnly的RFC规格说明书- http://groups.google.com/group/ietf-httponly-wg. 希望这个组能够带动各种浏览器开发人员。

那么,看到这儿你可能会问,- Ryan,这是一则有趣的消息,但是为什么要发表在 ModSecurity站点上呢?针对这一主题,web应用防火墙能做什么呢?我会说 – 好问题,非常高兴你会问这个问题。

在web应用安全空间里面我的一个pet peevs是和WAF结合在一起的stigma。大部分时候,每个人只关注典型WAF部署条件下的消极的安全防护和攻击阻断方面,而没有意识到WAFs时为HTTP设计的高度专业化的工具。根据你的情况,你可能并不想进行攻击阻断。还有许多其他的用处-作为一个战略性反应工具,它可以处理潜在的弱点。当后端/受保护的web应用服务器向外分发缺少HTTPOnly标志的 SessionIDs时候,可以实现监听。这样可以提高警觉,通知合适的人去检查一下编辑网络语言编码是否可能把这一特性加进来。ModSecurity使用以下规则来做这件事情-

# Identifies SessiondIDs without HTTPOnly flag
#
SecRule RESPONSE_HEADERS:/Set-Cookie2?/ "!(?i:\;? ?httponly;?)" "chain,phase:3,t:none,pass,log,auditlog,msg:'AppDefect: Missing HttpOnly Cookie Flag.'"
  SecRule MATCHED_VAR "(?i:(j?sessionid|(php)?sessid|(asp|jserv|jw)?session[-_]?(id)?|cf(id|token)|sid))" "t:none"

尽管这条规则对问题的识别以及报警非常有用,很多组织更愿意采取下一步尝试解决这个问题。如果web应用不能把HTTPOnly cookie标志选项进行内部添加,实际上你可以采取modsecurity+Apache实现这一个目的。ModSecurity能够设置Apache读取/使用的环境数据。在这种情况下,我们可以稍微调整一下之前的规则,使用“setenv”动作之后,再添加一个额外的Apache“header”命令,“header”命令会使用新的包含HTTPOnly标志的Set-Cookie数据来重写数据-

# Identifies SessiondIDs without HTTPOnly flag and sets the "http_cookie" ENV
# Token for Apache to read
SecRule RESPONSE_HEADERS:/Set-Cookie2?/ "!(?i:\;? ?httponly;?)" "chain,phase:3,t:none,pass,nolog"
  SecRule MATCHED_VAR "(?i:(j?sessionid|(php)?sessid|(asp|jserv|jw)?session[-_]?(id)?|cf(id|token)|sid))" "t:none,setenv:http_cookie=%{matched_var}"

# Now we use the Apache Header directive to set the new data

Header set Set-Cookie "%{http_cookie}e; HTTPOnly" env=http_cookie

这条规则集的结果就是:ModSecurity+Apache在定义的set-cookie数据上面增加HTTPOnly标志。谢谢你从Breach来到Brian Rectanus并与我合作使Header指令语法正确。

有一点要提醒-你必须理解web应用是怎么设置SessionIDs,也就是说创建了服务器

- make sure that you understand how the web application is handling setting SessionIDs meaning if they are created server-side vs. client-side (in javascript).  This rule set will work fine if the SessionIDs are generated server-side.  If they are created client-side, however, this will disrupt session management.

 

Fixing Both Missing HTTPOnly and Secure Cookie Flags

Cookie既缺少HTTPOnly标志也缺少Secure标志时的修复

In a previous post I showed how you can use both ModSecurity and Apache together to identify/modify SessionIDs that are missing the HTTPOnly flag.  I received some feedback where people were asking how to accomplish the same thing but for the "Secure" cookie flag which instructs the browser to *only* send the SessionID back over an SSL connection.

我在以前的帖子中说过,怎么把modsecurity和Apache结合使用来识别/修改那些没有HTTPOnly标志的SessionIDs。我收到很多的人的回复,都问及,如果是”Secure”cookie标志的话,怎么完成同样的事情,即怎么把modsecurity和Apache结合使用来识别/修改那些没有”Secure”cookie标志的SessionIDs。并命令浏览器通过SSL通信“只”发送SessionID。

#

# First we want to capture Set-Cookie SessionID data for later inspection

SecRule RESPONSE_HEADERS:/Set-Cookie2?/ "(?i:(j?sessionid|(php)?sessid|(asp|jserv|jw)?session[-_]?(id)?|cf(id|token)|sid))" "phase:3,t:none,pass,nolog,setvar:tx.sessionid=%{matched_var}"

#

# We now check the saved SessionID data for the HTTPOnly flag and set an Apache

# ENV variable if it is missing.

SecRule TX:SESSIONID "!(?i:\;? ?httponly;?)" "phase:3,t:none,setenv:httponly_cookie=%{matched_var},pass,log,auditlog,msg:'AppDefect: Missing HttpOnly Cookie Flag.'"

#

# Next we check the saved SessionID data for the Secure flag (if this is an SSL session)

# and set an Apache ENV variable if it is missing.

SecRule SERVER_PORT "@streq 443" "chain,phase:3,t:none,pass,log,auditlog,msg:'AppDefect: Missing Secure Cookie Flag.'"

SecRule TX:SESSIONID "!(?i:\;? ?secure;?)" "t:none,setenv:secure_cookie=%{matched_var}"

#

# The final check is to see if BOTH of the HTTPOnly and Secure cookie flags are missing

# and set an Apache ENV variable if they are missing.

SecRule TX:SESSIONID "!(?i:\;? ?httponly;?)" "chain,phase:3,t:none,pass,log,auditlog,msg:'AppDefect: Missing HttpOnly and Secure Cookie Flag.'"

SecRule SERVER_PORT "@streq 443" "chain,t:none"

SecRule TX:SESSIONID "!(?i:\;? ?secure;?)" "t:none,setenv:secure_httponly_cookie=%{matched_var}"

#

# This last section executes the Apache Header command to

# add the appropriate Cookie flags

Header set Set-Cookie "%{httponly_cookie}e; HTTPOnly" env=httponly_cookie

Header set Set-Cookie "%{secure_cookie}e; Secure" env=secure_cookie

Header set Set-Cookie "%{secure_httponly_cookie}e; Secure; HTTPOnly" env=secure_httponly_cookie

modsecookie的更多相关文章

随机推荐

  1. jQuery按钮复制文本内容

    这种方法能保证文本内容被复制到windows剪切板,代码示例是复制url <!doctype html> <html> <head> <meta charse ...

  2. Web前端新人笔记之jquery选择符

    jquery利用了CSS选择符的能力,让我们能够在DOM中快捷而轻松的获取元素或元素集合.本章将介绍以下内容: 1.网页中的元素结构: 2.如何通过CSS选择符在页面中查找元素: 3.扩展jquery ...

  3. 通过正则表达式获取url中参数

    url: http://xxxx.com?name=魅力&id=123 js中: var name = getUrlParam("name"); /*通过正则获取url中的 ...

  4. Javascript中setTimeout和setInterval的区别和使用

    在javascript中,window对象有两个主要的定时方法,分别是setTimeout 和 setInterval,其语法基本上相同,但是完成的功能取有区别. setTimeout方法是定时程序, ...

  5. call(this)引起的对闭包的重新理解

    call(this)引起的对闭包的重新理解.md 变量的作用域 全局变量局部变量 Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. 函数外部无法读取函数内的局部变量. 函数内部 ...

  6. POJ1384完全背包问题

    题目大意:给你一个储蓄罐空的,和满的重量,然后给出各种硬币的价值和对应的重量,要你估计出储蓄罐里面硬币价值和最小为多少,注意要保证重量和恰好为给出满的重量解题思路:完全背包问题,只是求最小值,注意初始 ...

  7. 安装Android Studio报failed to find java version for 'C:\windows\system32\java.exe':[2] The system cannot find the specified file.错误的解决方案

    方案很简单,找到SYSTEM32目录下的java.exe文件,重命名为java.exe.orj. 方案出处:http://stackoverflow.com/questions/10339679/an ...

  8. 【BZOJ】1053: [HAOI2007]反素数ant

    1053: [HAOI2007]反素数ant Description: g(x)表示x的约数个数,反素数:对于任意的i (i < x),均有g(i) < g(x),则x为反素数:现在输入不 ...

  9. TypeScript学习指南--目录索引

    关于TypeScript: TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程. TypeS ...

  10. <四> SQL存储过程

    存储过程的定义: create procedure procedurename @param1 nvarchar(30) as select * from tablename where name = ...