由于Nginx漏洞导致的入侵事件WEB安全

2024-05-14

由于Nginx漏洞导致的入侵事件WEB安全(通用13篇)

篇1:由于Nginx漏洞导致的入侵事件WEB安全

本文主要分为两大部分,第一部分介绍了Nginx的一些常见安全漏洞的形成原因、利用方法,并给出了相应的解决办法;第二部分介绍了Nginx安全加固时需要关注的主要内容,

Nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,可以稳定地运行在Linux、Windows等操作系统上,其特点是占用内存少,并发能力强。

同其他软件一样,Nginx也出现过一些安全漏洞,利用这些漏洞可以对Web服务器进行渗透攻击。

下面我们通过实例来介绍几个关于Nginx的安全漏洞,以及相应的漏洞利用方法。

Nginx漏洞分析实例

Nginx文件类型错误解析漏洞

在的时候,国内安全组织80Sec发现了一个Nginx文件类型解析漏洞,但实际上这个并非Nginx本身的漏洞,而是由于配置导致的安全问题。下面我们详细分析一下这个漏洞。

漏洞分析:Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。配置文件中会有类似如下内容,如图1所示。

图1

location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAME是由Nginx生成的$fastcgi_script_name来决定的。而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。当访问192.168.1.103/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?

这就要说到fix_pathinfo这个选项了,如图2所示。

图2

如果开启了这个选项,那么就会触发在PHP中的如下逻辑,如图3所示。

图3

到这里,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了。

漏洞危害:利用该漏洞,攻击者可以将任意文件类型作为PHP文件解析,攻击者通常利用该漏洞来获取到一个WebShell。

漏洞利用:假设某一服务器存在该漏洞,攻击者可以通过上传一张包含PHP后门代码的图片来获取WebShell,这是一种常见的攻击方式,如图4所示。

图4

解决方案:这里介绍两种解决方案:一、修改php.ini文件,将cgi.fix_pathinfo的值设置为0;二、在Nginx配置文件中添加以下代码:

if ( $fastcgi_script_name ~ ..*/.*php ) {

return 403;

}

这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码,如图5所示。

图5

Nginx配置错误而导致目录遍历漏洞

在Nginx的配置文件中如果开启了autoindex选项,并采用类似下面的配置时会造成目录遍历漏洞,如图6所示。

图6

当访问192.168.1.103/test/这个URL时,正常情况应该遍历html/test/这个目录,但是如果访问192.168.1.103/test../这个URL时,则会遍历上一级目录(html/)了。

下面我们通过一个实例来演示下这个漏洞,先来看下正常访问时返回的页面,如图7所示。

图7

现在我们再来看下漏洞被触发后返回的页面,如图8所示。

图8

通过图8所示的返回结果,我们可以看到利用该漏洞我们成功遍历到了其上一级目录,

下面提供两种方法来解决这个问题,从中选择一种即可,具体配置如下图9所示。

图9

现在我们再来验证下当采用上面的代码加固Nginx以后,服务器是否还存在漏洞。

图10

从图10的返回结果可以看到漏洞没有被触发,而是返回了404页面,说明漏洞被修复。

Nginx安全加固

针对Nginx的安全加固,主要从以下两个方面考虑:一、Nginx Web Server程序本身是否安全,如是否存在安全漏洞;二、Nginx Web Server是否提供了可使用的安全功能,这部分主要是检查Nginx的配置是否得当,是否存在由于配置失误导致的安全问题。

Nginx版本的选择与安装注意事项

在选择Nginx版本时,需要关注是否存在安全漏洞和版本的稳定性。一般选择最新的稳定版本,这样可以在稳定性和安全之间取得一个平衡。在升级Nginx版本前建议先在测试环境中测试通过后再正式升级,以避免由于兼容性带来其他不可预知的问题。

关于Nginx的安全漏洞可以关注Nginx官方发布的安全公告(nginx.org/en/security_advisories.html)或到其他一些漏洞发布平台上查找。

在安装Nginx时建议使用自定义安装路径,如果采用默认安装路径,很容易被攻击者和一些自动化攻击工具猜测到,为其进行下一步的攻击提供便利。

Nginx安全配置

1. 修改/隐藏Nginx Banner信息

攻击者在对目标服务器进行渗透攻击前,通常会有一个目标信息收集阶段,这个阶段的任务就是通过各种手段获取到目标服务器的信息,如获取目标服务器的系统版本、Web、数据库的类型及相关信息,这个阶段获取到的信息将直接关系到攻击者下一步采取的攻击手段。因此,修改/隐藏Nginx的相关信息将在一定程度上可以增大攻击者的攻击难度,也可以骗过一些自动化攻击工具。

在Linux平台下以源码方式安装Nginx时,可以通过修改“src/core/nginx.h”中的信息来达到隐藏或自定义Banner信息的目的。

我们先来看下nginx.h这个文件中默认的内容,类似图11所示。

图11

这时当我们访问Nginx服务器时,Server字段会返回真实的Banner信息,如图12所示。

图12

现在我们来自定义nginx.h中关于Banner信息的内容,可参考图13。

图13

修改完成后,重新编译Nginx,然后安装即可。安装完成后,我们再来访问下该Nginx服务器,发现这时Server返回的内容为自定义的Banner信息了,如图14所示。

图14

2. Nginx日志安全

不论在那种服务器上,日志都是一个非常重要的部分,我们需要对它严加保护。在Nginx上也是如此。Nginx的日志默认存放在安装目录的logs目录下,首先要修改日志的默认保存路径,然后设置只允许管理员有日志存放目录的完全控制权限。

3. Nginx权限设置

Nginx权限设置分为Nginx运行权限设置和网站目录权限设置两部分。

Nginx运行权限是指Nginx以什么权限运行,以管理员权限运行是一个非常糟糕的决定。这样的后果是攻击者一旦攻击成功,将直接获取到一个高权限的WebShell。因此,我们需要设置Nginx以一个低权限的身份运行,可通过修改“Nginx.conf”这个配置文件来实现。

网站目录权限设置则要遵循以下原则:

a) 如果目录有写入权限,一定不要分配执行权限

b) 如果目录有执行权限,一定不要分配写入权限

c) 网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限

d) 其他目录一般只分配“读取”权限即可

篇2:由于Nginx漏洞导致的入侵事件WEB安全

日前,两家顶级安全公司发出警告:Wi-Fi无线设备驱动有可能导致 入侵,据互联网安全系统I研究人员透露,他们正在酝酿一次实验计划,以此向外界展示“Wi-Fi无线驱动漏洞所存在的隐患”。据悉,在即将于下个月召开的0拉斯维加斯黑帽子大会上,I研究人员将现场表演“如何利用笔记本中的Wi-Fi驱动入侵电脑,并且完成对整套系统的操控,

安全专家表示,目前移动设备无线驱动的编写,并且考虑安全方面的问题,因此其中存在的安全隐患更是数不胜数。实际上,针对这种漏洞的攻击工具已经出现在互联网上,并且已经被安全专家所关注。不过无线驱动诊断软件也已经出现,例如一款名为Iorcon的软件,可以通过诊断80.技术标准的无线网卡来检测无线设备驱动程序中是否存在漏洞。“如今的无线设备领域就好像曾经的美国西部,基本上处于待开发的状态。”分析家在接受采访的时候表示。

篇3:妊娠期急性脂肪肝的护理

1 临床资料

患者23岁, 是妊娠28周的农村女性, 10d前患者出现腹痛伴有黑便, 2d前于当地医院检查:血肝功能示转氨酶1000u/L, 胆红素正常, 肾功示肌酐640μmol/L, 血常规示HGB50g/L, 血压120/70mmHg, 于院外输血后病情无明显改善。急诊入住我院, 急行肝功能、乙型肝炎两对半检查, 病来精神、饮食、睡眠差, 小便正常, 黑便10d, 贫血貌。

2 病情观察

患者入院查:T 37.8℃, P 93次/分, R 20次/分, BP 120/70mmHg。全身体质消瘦, 营养不良, 神志清楚, 贫血貌, 自动体位, 查体合作, 步入病房。皮肤、黏膜黄染, 患者自诉起病初期仅有持续性恶心、呕吐、乏力、继之出现腹痛伴有黑便, 并出现黄疸且进行性加深, 无皮肤瘙痒。腹痛局限于右上腹, 双下肢及眼睑轻度水肿, 入院查出现凝血功能障碍 (皮肤瘀点、消化道出血、齿龈出血等) 、肌酐640μmol/L, 无低血糖、意识障碍、精神症状及肝性脑病。

3 病情检查

3.1 实验室检查

血清总胆红素中度或重度升高, 碱性磷酸酶明显升高;血清白蛋白偏低, β脂蛋白升高;血糖可降至正常值的1/3~1/2, 是AFLP的一个显著特征;血氨升高, 出现肝性脑病时可高达正常值的10倍;凝血酶原时间和部分凝血酶原时间延长;血尿素氮、尿酸、肌酐均升高[1]。

3.2

其他辅助检查病理学检查是确诊AFLP的唯一方法, 可在B超定位下行肝穿刺活检。

4 病情治疗

4.1

保守治疗母婴病死率极高, 应尽可能早期行肝穿刺确诊, 立即终止妊娠后, 大多数患者的肝功能得到迅速改善。

4.2

本病发生于妊娠近足月, 多在28~40周, 且初产妇多见, 妊娠期高血压疾病双胎和男胎较易发生。目前认为AFLP患者再次妊娠有复发可能。

4.3

保肝治疗维生素C、支链氨基酸、三磷酸腺苷、辅酶A等。

4.4 保护胃黏膜

根据病情使用H2受体阻滞剂, 维持胃液pH>5, 以防发生应激性溃疡。

4.5 换血或血浆置换

国外使用3倍于血容量的换血, 配以血液透析, 对1例AFLP多脏器衰竭患者治疗获得成功[2]。

5 护理措施

5.1 一般护理

卧床休息给予低脂肪低蛋白、高碳水化合物, 保证足够热卡, 纠正低血糖;注意水电解质平衡。生活规律, 保持室内空气新鲜, 睡眠充足, 双下肢水肿者给予抬高双下肢。

5.2 妊娠期脂肪肝用血制品的护理

对AFLP的患者, 支持疗法非常重要, 可补充新鲜或冰冻血浆, 血小板及全血。输血前由两名护士核对输血申请单、交叉配血实验结果, 并检查血袋有无破损, 血袋内血液有无溶血及凝块。输血时, 要遵循先慢后快的原则。输血开始前十五分钟要慢, 并严密观察病情变化, 若无不良反应, 再根据需要调节滴数, 不可向血液内加入任何药物。输血结束后, 护士将交叉配血报告单贴在病历中, 并将血袋送回输血科保存至少24h。

5.3 妊娠期脂肪肝感染的护理

因AFLP患者抵抗力下降, 易并发感染, 应实行保护性隔离, 严格执行消毒隔离、无菌操作制度, 规范手卫生, 控制环境污染, 重视环境清洁, 合理使用抗生素, 防止各种感染发生[3]。

5.4 妊娠期脂肪肝出血的护理

AFLP患者因肝功受损严重。凝血机制障碍, 易发生消化道出血, 应迅速建立两组以上的静脉通道, 遵医嘱使用止血药物, 交叉配同型血, 给予精神安慰, 解除患者恐惧心理。呕血时头侧位以防发生误吸, 患者禁食、禁饮, 记录出入量。

5.5 妊娠期脂肪肝肾功能衰竭的护理

AFLP因肝功能衰竭, 而导致器质性肾功能衰竭。除定期给予抽血检查, 准确记录24h出入量、定时测量体质量、血压, 护理要密切观察患者的神志、情绪、和行为的变化, 及早发现因使用利尿剂而出现的低血钠或无尿出现的高血钾。

5.6 妊娠期脂肪肝的心理护理

因该病危及母婴生命, 患者及家属会有不同程度的恐惧、紧张, 护理人员应告知患者家属及时终止妊娠是改善AFLP预后的关键, 其次是与患者有效沟通, 耐心倾听孕妇的叙述和提问, 建立和谐, 信任的护患关系, 帮助患者尽量降低恐惧、焦虑情绪, 最大限度认识了解疾病的相关知识, 从而积极配合治疗方案的选择和有效的护理措施。

6 体会

该例年轻女性患者入院后, 在护理该患者的过程中, 护理人员应使用通俗易懂的语言, 介绍疾病的相关知识, 告知患者及家属此病危及母婴, 早期终止妊娠才能减轻肝脏负担, 立即分娩的措施可使产妇病情改善, 预后良好, 且能明显提高婴儿的存活率, 帮助患者树立治疗疾病的积极态度。其次是护士耐心倾听孕妇的叙述和提问, 建立和谐, 信任的护患关系, 帮助患者尽量降低恐惧、焦虑情绪, 最大限度认识了解疾病的相关知识, 从而积极配合治疗方案的选择和有效的护理措施。同时严密观察病情变化, 加强专科临床护理, 从细微的生活护理做起, 关心患者的饮食情况、睡眠情况、大小便正常与否, 用专业知识做指导, 及时找出护理问题, 尤其是针对并发症应密切观察患者的病情变化, 及早报告医生, 按医嘱执行治疗计划及护理措施, 通过积极的选择治疗方案和有效的护理措施, 可以减低母婴病死率。

摘要:妊娠期急性脂肪肝 (AFLP) 是妊娠期特发性疾病, 起病急骤、病情凶险, 常伴有肝、肾等器官的衰竭。若能早期诊断、及时合理的处理、早期终止妊娠的措施和有效的护理, 可降低母婴病死率。近几年, 随着对该疾病认识的不断加深, AFLP的预后已有明显改善, 母婴病死率有很大程度的下降。

关键词:妊娠期急性脂肪肝,早期终止妊娠,护理

参考文献

[1]郭新菊, 刘芝梅.妊娠期急性脂肪肝的护理体会[J].现代中西医结合杂志, 2003, 12 (13) :73.

[2]张小红, 蒋佩茹.41例妊娠期急性脂肪肝的诊断及治疗[J].中国妇幼保健杂志, 2009 (11) :252.

篇4:由于Nginx漏洞导致的入侵事件WEB安全

【关键词】Web应用程序;安全;漏洞

0.引言

随着Internet的普及,人们对其依赖也越来越强,但是由于Internet的开放性,及在设计时对于信息的保密和系统的安全考虑不完备,造成现在网络的攻击与破坏事件层出不穷,给人们的日常生活和经济活动造成了很大麻烦。WWW服务作为现今Internet上使用的最广泛的服务,Web站点被黑客入侵的事件屡有发生,Web安全问题已引起人们的极大重视。

1.Web安全的主要技术

1.1认证

1.1.1身份认证

当系统的用户要访问系统资源时要求确认是否是合法的用户,这就是身份认证。常采用用户名和口令等最简易方法进行用户身份的认证识别。

1.1.2报文认证

主要是通信双方对通信的内容进行验证,以保证报文由确认的發送方产生、报文传到了要发给的接受方、传送中报文没被修改过。

1.1.3访问授权

主要是确认用户对某资源的访问权限。

1.1.4数字签名

数字签名是一种使用加密认证电子信息的方法,其安全性和有用性主要取决于用户私匙的保护和安全的哈希函数。数字签名技术是基于加密技术的,可用对称加密算法、非对称加密算法或混合加密算法来实现。

1.2数据加密

1.2.1私匙加密

私匙加密又称对称密匙加密,因为用来加密信息的密匙就是解密信息所使用的密匙。私匙加密为信息提供了进一步的紧密性,它不提供认证,因为使用该密匙的任何人都可以创建、加密和平共处送一条有效的消息。这种加密方法的优点是速度很快,很容易在硬件和软件件中实现。

1.2.2公匙加密

公匙加密比私匙加密出现得晚,私匙加密使用同一个密匙加密和解密,而公匙加密使用两个密匙,一个用于加密信息,另一个用于解密信息。公匙加密系统的缺点是它们通常是计算密集的,因而比私匙加密系统的速度慢得多,不过若将两者结合起来,就可以得到一个更复杂的系统。

1.3防火墙技术

防火墙是网络访问控制设备,用于拒绝除了明确允许通过之外的所有通信数据,它不同于只会确定网络信息传输方向的简单路由器,而是在网络传输通过相关的访问站点时对其实施一整套访问策略的一个或一组系统。大多数防火墙都采用几种功能相结合的形式来保护自己的网络不受恶意传输的攻击,其中最流行的技术有静态分组过滤、动态分组过滤、状态过滤和代理服务器技术,它们的安全级别依次升高,但具体实践中既要考虑体系的性价比,又要考虑安全兼顾网络连接能力。此外,现今良好的防火墙还采用了VPN、检视和入侵检测技术。

防火墙的安全控制主要是基于IP地址的,难以为用户在防火墙内外提供一致的安全策略;而且防火墙只实现了粗粒度的访问控制,也不能与企业内部使用的其他安全机制(如访问控制)集成使用;另外,防火墙难于管理和配置,由多个系统(路由器、过滤器、代理服务器、网关、保垒主机)组成的防火墙,管理上难免有所疏忽。

1.4入侵检测系统

入侵检测技术是Web安全研究的一个热点,是一种积极主动的安全防护技术,提供了对内部入侵、外部入侵和误操作的实时保护,在网络系统受到危害之前拦截相应入侵。随着时代的发展,入侵检测技术将朝着三个方向发展:分布式入侵检测、智能化入侵检测和全面的安全防御方案。

入侵检测系统(Instusion Detection System简称IDS)是进行入侵检测的软件与硬件的组合,其主要功能是检测,除此之外还有检测部分阻止不了的入侵;检测入侵的前兆,从而加以处理,如阻止、封闭等;入侵事件的归档,从而提供法律依据;网络遭受威胁程度的评估和入侵事件的恢复等功能。

2.Web安全问题的由来

网络设计之初仅考虑到信息交流的便利和开放,而对于保障信息安全方面的规划则非常有限,这样,伴随计算机与通信技术的迅猛发展,网络攻击与防御技术循环递升,原来网络固有优越性的开放性和互联性变成信息的安全性隐患之便利桥梁。Web安全已变成越来越棘手的问题,只要是接入到因特网中的主机都有可能被攻击或入侵了,而遭受安全问题的困扰。

目前所运用的TCP/IP协议在设计时,对安全问题的忽视造成网络自身的一些特点,而所有的应用安全协议都架设在TCP/IP之上,TCP/IP协议本身的安全问题,极大地影响了上层应用的安全。网络的普及和应用还是近10年的事,而操作系统的产生和应用要远早于此,故而操作系统、软件系统的不完善性也造成安全漏洞;在安全体系结构的设计和实现方面,即使再完美的体系结构,也可能一个小小的编程缺陷,带来巨大的安全隐患;而且,安全体系中的各种构件间缺乏紧密的通信和合作,容易导致整个系统被各个击破。

3.Web安全问题对策的思考

Web安全建设是一个系统工程、是一个社会工程,Web安全问题的对策可从下面4个方面着手。

Web安全的保障从技术角度看。首先,要树立正确的思想准备。Web安全的特性决定了这是一个不断变化、快速更新的领域,况且我国在信息安全领域技术方面和国外发达国家还有较大的差距,这都意味着技术上的“持久战”,也意味着人们对于Web安全领域的投资是长期的行为。其次,建立高素质的人才队伍。目前在我国,网络信息安全存在的突出问题是人才稀缺、人才流失,尤其是拔尖人才,同时Web安全人才培养方面的投入还有较大缺欠。最后,在具体完成Web安全保障的需求时,要根据实际情况,结合各种要求(如性价比等),需要多种技术的合理综合运用。

Web安全的保障从管理角度看。考察一个内部网是否安全,不仅要看其技术手段,而更重要的是看对该网络所采取的综合措施,不光看重物理的防范因素,更要看重人员的素质等“软”因素,这主要是重在管理,“安全源于管理,向管理要安全”。再好的技术、设备,而没有高质量的管理,也只是一堆废铁。

Web安全的保障从组织体系角度看。要尽快建立完善的Web安全组织体系,明确各级的责任。建立科学的认证认可组织管理体系、技术体系的组织体系,和认证认可各级结构,保证信息安全技术、信息安全工程、信息安全产品,信息安全管理工作的组织体系。

4.结束语

我们在欢呼Web应用程序的迅速发展所带给我们得更加愉快地用户体验的同时必须看到,Web应用程序的安全性也正在变得越来越复杂。而Web应用程序的跨平台和公来访问特点,使

得互联网上所有可以访问该Web应用程序的用户都可能成为潜在的攻击者,所以Web应用程序的安全性控制可谓任重而到远。在尽快加强网络立法和执法力度的同时,不断提高全民的文明道德水准,倡导健康的“网络道德”,增强每个网络用户的安全意识,只有这样才能从根本上解决Web安全问题。 [科]

【参考文献】

[1]周博文,杜山泽.社会管理创新:从伦理观念、管理理念到思维方式的转变.载于.行政管理改革,2012(11).

[2]马恒太.Web服务安全[M].电子工业出版社,2007(12).

篇5:由于Nginx漏洞导致的入侵事件WEB安全

这种方式最好把网站集中到一个目录下,另外网站目录名字最好规范统一方便辨认。否则启动和维护起来非常麻烦容易混淆。

第一步修改php-fpm配置文件,为每个站点单独建立一个配置文件,

cd /usr/loca/php/etc/

cp php-fpm.conf php-fpm-www.zhaoyi.info.conf

修改其中

Pid file

/usr/local/webserver/php/logs/php-fpm-www.zhaoyi.info.pid

Error log file

/usr/local/webserver/php/logs/php-fpm-ww.zhaoyi.info.log

以及

/tmp/php-cgi-站点目录名.sock若使用TCP端口传输方式每个都使用单独的端口

4此处可根据主机情况来,配置点的就不需要开多了

第二步修改php-fpm启动脚本

cd /usr/local/php/sbin

# vim /usr/local/sbin/php-fpm

vhost=$2###

php_fpm_BIN=/usr/local/bin/php-cgi

php_fpm_CONF=/usr/local/etc/php-fpm-$vhost.conf##

php_fpm_PID=/usr/local/logs/php-fpm-$vhost.pid###

#php_opts=”–fpm-config $php_fpm_CONF”

php_opts=”-d open_basedir=/www/$vhost/ --fpm-config $php_fpm_CONF“ #此处为网站目录

启动方式为php-fpm start www.zhaoyi.info 多个虚拟主机以此类推

第三步修改网站conf配置文件中

fastcgi_passunix:/tmp/php-cgi-www.zhaoyi.info.sock; 要与php-fpm配置中的对应,tcp方式的启单独端口

OK,测试一下

/usr/local/php/sbin/php-fpm stop

/usr/local/php/sbin/php-fpm start www.zhaoyi.info

ps -ef | grep php中可以看到open_basedir=/www/www.zhaoyi.info就成功了

reload一下nginx的配置文件基本就可以实现各个主机隔离了,

我用phpspy测试已经访问不到别的目录了

nginx配置文件最好也采用每个网站单独一个的方式统一放在vhosts下

为了方便启动php-fpm可以写个脚本一起启动

#!/bin/bash

auto=$1

/bin/bash /usr/local/webserver/php/sbin/php-fpm $auto www.zhaoyi.info &&

/bin/bash /usr/local/webserver/php/sbin/php-fpm $auto www.xx.com &&

/bin/bash /usr/local/webserver/php/sbin/php-fpm $auto www.xxxx.com

保存为start.sh

开启sh start.sh start

关闭sh start.sh stop

篇6:由于Nginx漏洞导致的入侵事件WEB安全

if ( $fastcgi_script_name ~ ..*/.*php ) {

return 403;

}

当匹配*/*.php*的时候则返回403

但是有些fastcgi配置的却不只有.php,有些甚至配置了ph*,(网上有一篇文章就是这么写的)

这样.ph*就没法匹配.php*也就又引发漏洞

此bug是我一个朋友Clouds发现的,

解决方法就是看fastcgi配置文件来设置要deny掉的文件后缀

在有些特定的时候,还可以用robots.txt/1.PhP

例如

if ( $fastcgi_script_name ~ ..*/.*ph* ) {

return 403;

}

篇7:由于Nginx漏洞导致的入侵事件WEB安全

很久没写文章了,睡觉去去法客转了圈看到一片nginx漏洞的渗透文章,才发现自己似乎也没写过。

于是乎~~~

nginx解析漏洞是由于nginx部分版本程序本身的漏洞导致解析非可以执行脚本程序如PHP.

如下面两个假设在存在漏洞的站点上有一张图片url地址为:

1www.myhack58.com/logo.jpg//假设存在这个图片

2

31

4

5而当我们正常访问,nginx会把这个当作非脚本语言直接读取传送会客户端(也就是浏览器),但是

6

7存在解析漏洞的nginx会把如下连接解析并且执行~:

8

91

10

11www.creturn.com/logo.jpg/a.php//(老的解析方式)这样写的话nginx会把logo.jpg当作脚本解析执行后再输出

12

13www.creturn.com/logo.jpg%00.php//这个是7月中旬爆出的解析漏洞

这样的解析漏洞有什么危害?其实很多站的安全或者程序样做的比较严谨的话,就没办法直接拿下,但是很多社交类

或者交互类的站点上往往允许用户上传图片,如社交网站一般都会允许上传头像~这样如果有心人传送一个图马上去

就可以直接解析了,

好了,就拿一个实例来说明:

某交友网站:

看到这么多图片,嘿嘿~~~肯定有上传的地方。先注册个帐号。刚注册完就提示你上传照片。

上传一张事先准备好的图马。博客内有制作方法,可查询。

看到图片,还需要审核~~

右击图片审查元素(我用的是chrome浏览器):

可以看到图片的连接,不过不要高兴~~ 看到名称middle.jpg了没,如果你是程序员的话,你应该知道

为了减少服务器压力,图片资源也会被进行处理某些区域显示的只是缩略图,缩略图是经过处理的所以

图马是不起作用的。所以必须找原图,其实原图的真实地址就是把.middle去掉,为啥?因为原图肯定会

保存的,由于我的图片在审核(当然我的头像肯定通过不了审核了),如果审核通过可以点击查看大图

一般这个大图就是你的原图(理论上)。

好了上菜刀看看连接地址为:

1www.creturn.com/upload/picture/photo/006/65/26/503d136ee3aaf.jpg/.php

如下图,图片已经成功解析为可执行脚本:

稍微浏览了下,权限很松~~~

好了,还是希望各大站长能够对安全重视~

篇8:自动漏洞入侵防护拦截最危险威胁

为了通过漏洞感染计算机系统,网络诈骗者经常利用电子邮件或社交网络发布大量垃圾信息。这些邮件中通常包含指向受感染网页或特殊文档的链接,一旦打开就会触发其中的恶意代码。通常情况下,攻击者会利用Windows系统下的常用软件作为入侵系统的大门,因为这样潜在受害计算机的数量最多。

根据卡巴斯基实验室近期的一项报告显示,每三次网络攻击中的就会有两次攻击针对Adobe Acrobat Reader和Java虚拟机。而针对其它软件发动的攻击数量则少得多。网络罪犯之所以选择这些程序,是因为他们在多个平台上都非常常见。

能够利用软件漏洞进行攻击的恶意程序被称为漏洞利用程序。大多数漏洞利用程序能够被传统的反病毒工具拦截。但是,对抗利用零日漏洞进行攻击的恶意软件,需要更为高级的解决方案。正是基于此,卡巴斯基实验室开发了全新的自动漏洞入侵防护技术,专门用于对抗复杂的漏洞利用程序。卡巴斯基实验室近日刚刚发布的全新个人安全解决方案——卡巴斯基安全部队2013和卡巴斯基反病毒软件2013就包含了该技术。

自动漏洞入侵防护技术能够阻止恶意程序利用计算机中的程序漏洞或系统漏洞发动攻击。该技术基于对现有漏洞利用程序的行为分析和最容易遭受恶意攻击的应用程序信息。通过对这些程序进行密切监视,能够在第一时间发现其试图运行可疑代码的行为,可立刻终止该行为并开始扫描。

有时候应用程序启动的可执行代码是完全合法的,例如程序会从开发者那里获取更新内容。为了区别正常的行为和恶意感染行为,卡巴斯基实验室的最新技术会利用典型已知漏洞利用程序行为信息进行分析。这样即使是之前未知的漏洞利用程序或零日漏洞攻击,同样可以被阻止。

通常,漏洞利用程序在感染系统之前,就会下载文件到计算机。自动漏洞入侵防护技术能够监控程序所有的网络请求,分析下载文件的来源。此外,该技术还能够区别用户创建的文件和未经授权创建的文件。所以,未经用户许可,任何试图运行下载自可疑资源的文件的行为都会被拦截。

此外,自动漏洞入侵防护还使用了一种基于地址空间布局随机化(ASLR)技术的保护手段。Windows操作系统从Vista开始就引入和集成了对这一技术的支持,将关键数据如系统库随机存储在地址空间,使得对特定漏洞的利用变得更为苦难。卡巴斯基实验室的新技术向用户提供了一种强制地址空间布局随机化功能,其功能同Windows相应功能一致,能够在Windows无法执行该操作时执行该功能。此外,强制地址空间布局随机化功能还能运行于Windows XP系统下。

篇9:检测企业Web平台的安全漏洞

四种漏洞扫描技术

漏洞扫描通常采用两种策略,第一种是被动式策略,第二种是主动式策略。所谓被动式策略就是基于主机之上,对系统中不合适的设置、脆弱的口令以及其他与安全规则抵触的对象进行检查;而主动式策略是基于网络的,它通过执行一些脚本文件模拟对系统进行攻击的行为并记录系统的反应,从而发现其中的漏洞。利用被动式策略的扫描称为系统安全扫描,利用主动式的策略扫描称为网络安全扫描。

漏洞扫描有以下四种检测技术:

1.基于应用的检测技术。它采用被动的、非破坏性的办法检查应用软件包的设置,发现安全漏洞。

2.基于主机的检测技术。它采用被动的、非破坏性的办法对系统进行检测。通常,它涉及到系统的内核、文件的属性、操作系统的补丁等。这种技术还包括口令解密、把一些简单的口令剔除。因此,这种技术可以非常准确地定位系统的问题,发现系统的漏洞。它的缺点是与平台相关,升级复杂。

3.基于目标的漏洞检测技术。它采用被动的、非破坏性的办法检查系统属性和文件属性,如数据库、注册号等。通过消息文摘算法,对文件的加密数进行检验。这种技术的实现是运行在一个闭环上,不断地处理文件、系统目标、系统目标属性,然后产生检验数,把这些检验数同原来的检验数相比较。一旦发现改变就通知管理员。

4.基于网络的检测技术。它采用积极的、非破坏性的办法来检验系统是否有可能被攻击崩溃。它利用了一系列的脚本模拟对系统进行攻击的行为,然后对结果进行分析。它还针对已知的网络漏洞进行检验。网络检测技术常被用来进行穿透实验和安全审记。这种技术可以发现一系列平台的漏洞,也容易安装。但是,它可能会影响网络的性能。

网络漏洞扫描

在上述四种方式当中,网络漏洞扫描最为适合我们的Web信息系统的风险评估工作,其扫描原理和工作原理为:通过远程检测目标主机TCP/IP不同端口的服务,记录目标的回答。通过这种方法,可以搜集到很多目标主机的各种信息(例如:是否能用匿名登录,是否有可写的FTP目录,是否能用Telnet,httpd是否是用root在运行)。

在获得目标主机TCP/IP端口和其对应的网络访问服务的相关信息后,与网络漏洞扫描系统提供的漏洞库进行匹配,如果满足匹配条件,则视为漏洞存在。此外,通过模拟 的进攻手法,对目标主机系统进行攻击性的安全漏洞扫描,如测试弱势口令等,也是扫描模块的实现方法之一。如果模拟攻击成功,则视为漏洞存在。

在匹配原理上,网络漏洞扫描器采用的是基于规则的匹配技术,即根据安全专家对网络系统安全漏洞、攻击案例的分析和系统管理员关于网络系统安全配置的实际经验,形成一套标准的系统漏洞库,然后再在此基础之上构成相应的匹配规则,由程序自动进行系统漏洞扫描的分析工作。

所谓基于规则是基于一套由专家经验事先定义的规则的匹配系统。例如,在对TCP80端口的扫描中,如果发现/cgi-bin/phf/cgi-bin/Count.cgi,根据专家经验以及CGI程序的共享性和标准化,可以推知该WWW服务存在两个CGI漏洞。同时应当说明的是,基于规则的匹配系统有其局限性,因为作为这类系统的基础的推理规则一般都是根据已知的安全漏洞进行安排和策划的,而对网络系统的很多危险的威胁是来自未知的安全漏洞,这一点和PC杀毒很相似。

这种漏洞扫描器是基于浏览器/服务器(B/S)结构。它的工作原理是:当用户通过控制平台发出了扫描命令之后,控制平台即向扫描模块发出相应的扫描请求,扫描模块在接到请求之后立即启动相应的子功能模块,对被扫描主机进行扫描。通过分析被扫描主机返回的信息进行判断,扫描模块将扫描结果返回给控制平台,再由控制平台最终呈现给用户。

另一种结构的扫描器是采用插件程序结构。可以针对某一具体漏洞,编写对应的外部测试脚本。通过调用服务检测插件,检测目标主机TCP/IP不同端口的服务,并将结果保存在信息库中,然后调用相应的插件程序,向远程主机发送构造好的数据,检测结果同样保存于信息库,以给其他的脚本运行提供所需的信息,这样可提高检测效率,

如,在针对某FTP服务的攻击中,可以首先查看服务检测插件的返回结果,只有在确认目标主机服务器开启FTP服务时,对应的针对某FTP服务的攻击脚本才能被执行。采用这种插件结构的扫描器,可以让任何人构造自己的攻击测试脚本,而不用去了解太多扫描器的原理。这种扫描器也可以用做模拟 攻击的平台。采用这种结构的扫描器具有很强的生命力,如著名的Nessus就是采用这种结构。这种网络漏洞扫描器是基于客户端/服务器(C/S)结构,其中客户端主要设置服务器端的扫描参数及收集扫描信息。具体扫描工作由服务器来完成。漏洞扫描器的发展趋势

值得我们注意的是漏洞扫描软件从最初的专门为UNIX系统编写的一些只具有简单功能的小程序,发展到现在,已经出现了多个运行在各种操作系统平台上的、具有复杂功能的商业程序。今后的发展趋势主要有以下几点,我们可以根据实际Web信息系统风险评估的需求进行选用:

1.使用插件或者叫做功能模块技术。每个插件都封装一个或者多个漏洞的测试手段,主扫描程序通过调用插件的方法来执行扫描。仅仅是添加新的插件就可以使软件增加新功能,扫描更多漏洞。在插件编写规范公布的情况下,用户或者第三方公司甚至可以自己编写插件来扩充软件的功能。同时这种技术使软件的升级维护都变得相对简单,并具有非常强的扩展性。

2.使用专用脚本语言。这其实就是一种更高级的插件技术,用户可以使用专用脚本语言来扩充软件功能。这些脚本语言语法通常比较简单易学,往往用十几行代码就可以定制一个简单的测试,为软件添加新的测试项。脚本语言的使用,简化了编写新插件的编程工作,使扩充软件功能的工作变得更加容易,也更加有趣。

3.由漏洞扫描程序到安全评估专家系统。最早的漏洞扫描程序只是简单地把各个扫描测试项的执行结果罗列出来,直接提供给测试者而不对信息进行任何分析处理。而当前较成熟的扫描系统都能够将对单个主机的扫描结果整理,形成报表,能够并对具体漏洞提出一些解决方法。不足之处是对网络的状况缺乏一个整体的评估,对网络安全没有系统的解决方案。未来的安全扫描系统,应该不但能够扫描安全漏洞,还能够智能化地协助网络信息系统管理人员评估本网络的安全状况,给出安全建议,成为一个安全评估专家系统。

Web系统的风险等级评估

在实现了对Web信息系统的安全扫描后,便可根据扫描结果,对Web信息系统的安全性能进行评估,从而给出Web信息系统的风险状况。这里,风险评估的依据是根据扫描结果,根据Web信息系统所具有的漏洞数目及漏洞的危害程度,将Web信息系统的安全状态进行分级。

划分的风险评估级别如下:

1.A级:扫描结果显示没有漏洞,但这并不表明系统没有漏洞,因为有许多漏洞是尚未发现的,我们只能针对已知的漏洞进行测试。

2.B级:具有一些泄漏服务器版本信息之类的不是很重要内容的漏洞,或者提供容易造成被攻击的服务,如允许匿名登录,这种服务可能会造成许多其它漏洞。

3.C级:具有危害级别较小的一些漏洞,如可以验证某账号的存在,可以造成列出一些页面目录、文件目录等,不会造成严重后果的漏洞。

4.D级:具有一般的危害程度的漏洞。如拒绝服务漏洞,造成Web信息系统不能正常工作;可以让 获得重要文件的访问权的漏洞等。

5.E级:具有严重危害程度的漏洞。如存在缓冲区溢出漏洞,存在木马后门,存在可以让 获得根用户权限或根用户的shell漏洞,根目录被设置一般用户可写等一些后果非常严重的漏洞。

另外,我们需要强调的是:漏洞的产生主要源于Web信息系统的不正当配置以及其提供的服务自身的弱点。前面我们详细介绍了如何使用漏洞扫描来进行风险评估。其实还有一个非常重要的问题我们不能忽略,那就是需要检测Web信息系统到底提供了哪些服务,因为它直接关系到系统的漏洞的产生以及危害。一方面,Web信息系统为用户提供了多种优质的网络服务,包括Http、Ftp、Smtp、Pop3等;另一方面,服务的增多意味着更多的风险。每种服务本身都必然存在着某些缺陷,而这些缺陷很有可能被高明的 利用来对系统进行攻击。所以,提供特定服务的服务器应该尽可能开放提供服务必不可少的端口,而将与服务器服务无关的服务关闭,比如:一台作为www和ftp服务器的机器,应该只开放80和25端口,而将其他无关的服务如关掉,以减少系统漏洞。

篇10:由于Nginx漏洞导致的入侵事件WEB安全

apache如何防范目录遍历漏洞?

编辑httpd.conf

找到“

1Options Indexes FollowSymLinks

将Indexes去掉,更改为“

1OptionsFollowSymLinks

”即可。

apache tomcat如何防范目录遍历漏洞?

1、编辑apache的httpd.conf

找到“

1Options Indexes MultiViews

”中的Indexs去掉,更改为“

1OptionsMultiViews

”即可。

2、编辑tomcat的conf/web.xml

找到

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

default

org.apache.catalina.servlets.DefaultServlet

debug

0

listings

true

1

将“

true”此行的true改为false即可,

编辑好后,记得重启相应的服务生效。

篇11:由于Nginx漏洞导致的入侵事件WEB安全

由今年1至3月扫描过的网站记录,排除掉ASafaWeb测试网站及非ASP.NET网站后共有7,184份检测结果,Hunt做出简单的统计。虽然我觉得这份结果由于是使用者主动提供网站进行检测,甚至无法排除用户会刻意制造问题情境考验ASafaWeb的检查效果,因此数据高低未必能精确反应实际情况,但还是很有参考价值,值得我们关心一下ASP.NET有哪些常见的配置漏洞,确定自己都了解并检查手边网站有无类似状况,绝对是件好事。以下是Hunt列出的常见ASP.NET配置安全漏洞:

未隐藏错误讯息

开发人员常会将方便排错,但正式上线时却忘了移除,导致一旦程序出错,相关程序代码细节甚至程序片段就赤裸裸地展示出来,

可能由其中找到相关的文件位置、数据库信息、组件版本... 等信息,提供入侵的指引。

关闭Request Validation

依Hunt的统计,近30%的网站豪迈地关闭了全站的Request验证。若真有需要,针对页面关闭就好,至少伤害面变小,但如果心有余力,避开此限制保持后门紧闭还是上策。

未更新Windows/IIS

去年底被揭露的HTTP POST Hash DoS漏洞,攻击者用简单的Request就能让网站忙到死去活来,终至服务瘫痪。微软已在2月发布补定,但是似乎还有50%的网站未完成更新。

ELMAH存取未设限

关于ELMAH存取设定的风险之前也有文章 《大叔手记(18):利用Elmah和Google体验一把入侵的快感》提过,稍有不慎,程序里的秘密就会大放送,十分危险,甚至 还可能藉此伪造ASP.NET Session冒充身份,挺恐怖的。

未关闭Trace

虽然比例不高,但通过trace.axd 还是能搜集到很多重要情报,上线到正式环境时记得关闭。

篇12:监管漏洞导致中国环境污染频发

2010年7月,紫金矿业下属工厂污水池发生铜酸水渗漏,约9100立方米的污水进入汀江,造成上千吨鱼类的死亡。

7月16日晚18时许,大连市大连新港附近的一条中石油输油管道发生爆炸起火,至少造成附近海域50平方公里的海面污染,此次事故造成的不仅是资源浪费、海洋污染,同时也造成周边土壤和空气污染,并严重影响到海洋生物的生长。

7月28日上午,受洪水影响,吉林市永吉县新亚强化工厂装有三甲基一氯硅烷的原料桶被冲入松花江。官方称,该事件“对松花江水质影响极微”。不过,恐慌的居民还是纷纷抢购矿泉水和桶装水。

10月22日,韶关冶炼厂从澳大利亚进口高含铊量矿石,在生产过程中近300公斤的铊排入北江,造成严重水污染。

为什么2010年中国污染、环境灾难频发呢?正如华南师范大学副教授唐吴所言,这些污染物之所以频频泄漏,最终都可归结为是管理和监督层面巨大的体制“漏洞”所导致。

体制漏洞谁来“织补”?

在《2010——体制漏洞,环境之殇》一文中,唐吴表示,2010年的环境灾害多发于国有企业以及与能源、矿产相关的产业,凸显了这些企业管理模式的陈旧,缺乏预警及罔顾公益等问题。在这个意义上,中国的环境污染就不单纯是经济扩张的自然后果,而更像是一系列人为错误的结果。

“2009年度中国最诚信企業”紫金矿业,对汀江流域的污染实际上已有数年的时间,此次污染更是在其承认的9天前就已经发生。但其第一时间的反应却不是报告环保部门或采取措施堵漏,而是用“封口费”和人身侵害阻止调查报道。

事情败露之后,重庆绿联建议环保部依法起诉紫金矿业,而非行政处罚,但被环保部以“没有利害关系”为由回绝;民间环保人士冯永锋要求中国企业联合会、中国企业家协会取消紫金矿业“最诚信企业”称号,未得到回应。

大连石油泄漏事故后,8月2日,在清污工作收尾时,中石油大连分公司召开了“7·16”火灾事故抢险救援表彰大会,向公司主要负责人及下属9个单位和197人授予“先进集体”和“先进个人”的称号。但是,关于损害评估及污染赔偿事宜却一直无人提及。8月26日,近千名养殖户本拟集体赴京上访,却因警方打断未能成行。9月2日,邵德善与20多位养殖大户再次进京讨要说法,遭到中石油信访办有关负责人的推诿。

比大连早一个月发生的墨西哥湾漏油事故,同样是因为企业唯利是图而忽视安全预防、政府监管不力而纵容隐患发生,但事情出了,犯错的几方谁也不敢怠慢。漏油发生后不到两个月,BP就承诺成立200亿美元的赔偿基金,4个月后,第一笔30亿美元的资金已经注入账户,BP董事长低头向受害者郑重道歉。与此同时,众多民间和官方机构迅速对事故调查和发布评估报告,政府建立专门网站公开详细调查结果、救济方案和联系方式,接受公众监督。

著名环保网站“中外对话”北京办公室副主编孟斯在《回顾2010中国环境:缺少公众参与》一文中质问:为什么“诚信企业”敢于瞒报重大污染事实?为什么破坏居民生计的国有石油企业非但不公开道歉,反而为自己的抢险庆功?为什么公众的关切不能加速环境影响评估报告的出台?

这主要是由于政府与企业之间的关系过于密切,比如紫金矿业与福建上杭县权力机关之间,就存在紧密的关系,以致在事件处理上,行政和司法部门也未能尽到管理和裁判责任。

在一些环境灾害中,新闻记者很难在第一时间进入现场、掌握真相,部分记者甚至因采访环境事件而被抓被打。地方政府以“维稳”的名义拒绝及时公布真相、限制媒体报道,使得社会监督力度大打折扣。

公众监督仍是雾里看花

但掩耳盗铃并不能解决问题。据环境保护部应急办的官员称,2010年1~7月份,环境保护部共接报并妥善处置突发环境事件119起,比去年同期增长35.2%。而7月底彭博新闻社的数据更为惊人——2010年前六个月中国的突发环境事件上涨了98%!

2010年1~11月,环境保护部共接报并妥善处置突发环境事件149起,其中重大环境事件4起,较大环境事件39起。这些环境突发事件涉及27个省区市,主要分布在华东、华南、西北等地区。

国家环保部副部长张力军说,国内环境风险异常突出,环境污染事件总量居高不下,且类型多、发生区域广。因为污染事件诱因复杂,环保部门预警防范难,形成了事件危害大、处置难、社会关注度高的难题。此外,安全生产、交通事故等引发的次生突发环境事件也在持续上升,百年一遇甚至几百年一遇的自然灾害多发频发。

2010年,自然灾害频发、环境风险隐患突出的企业,特别是设防能力不足的尾矿库企业和化工企业,在大灾中成为威胁环境安全的“不定时炸弹”。重金属污染事件仍保持高发态势,也给环境应急管理工作带来不小挑战。2010年相继发生了江苏大丰、四川隆昌、湖南嘉禾、甘肃瓜州、湖北崇阳、安徽怀宁等9起血铅事件,这表明目前铅冶炼企业造成的污染仍然很严重。

在官方体制格局下,民间无奈,只有翘首盼望官方为其代言。学者孟斯认为,解决环境问题,政府不可能包打天下,也不能指望企业随时随地心怀社会责任。根本乃是政府改变“包办”思想,给公众以有效的参与权,让公众的声音成为真的声音、公众的压力成为真的压力。

2010年11月11日,山东省泰安市一份名为《吴家林村全体村民心声》的联名诉状送到某报记者手中,这封信状告当地利税大户——生产铅酸蓄电池用极板及蓄电池的山东超威电源有限公司,称由于该公司在与该村相隔不到200米处建厂,造成村民集体血铅超标,尤以儿童最重。在屡次与超威电源、村党支部、镇政府、县环保局接洽后,不仅没有引起重视,反而从10月底开始房屋被拆迁,使部分村民无家可归。

除了新闻媒体的舆论,2010年环保真正的亮点恰恰来自于公众参与的深化:4月,公众环境研究中心联合34家国内环保领域的非政府组织,公布了《IT品牌供应链重金属污染调研报告》,向世界27家知名IT公司发出呼吁,要求其对供货商进行审查;5月,“绿色流域”和国内9家环保非政府组织联合发布了《中国银行业环境记录NGO(非政府组织)版》,倡导绿色信贷,减少对“两高”项目贷款;7月,环保组织向上海和香港证券交易所发出提示信,要求他们对紫金矿业故意延迟披露环境信息进行曝光。此外,环保组织“淮河卫士”给淮河沿岸农户安装生物净水设备、阿拉善生态协会开展“绿色领导力”培训等,更意味着民间环保力量从组织和功能上走向成熟。

篇13:由于Nginx漏洞导致的入侵事件WEB安全

在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据,当然,入侵检测可以用很多方法实现,包括软件、硬件防火墙,入侵检测的策略也很多。在这里我们主要介绍的是Java Web应用程序中通过软件的方式实现简单的入侵检测及防御。

该方法的实现原理很简单,就是用户访问Web系统时记录每个用户的信息,然后进行对照,并根据设定的策略(比如:1秒钟刷新页面10次)判断用户是否属于恶意刷新。

我们的入侵检测程序应该放到所有Java Web程序的执行前,也即若发现用户是恶意刷新就不再继续执行Java Web中的其它部分内容,否则就会失去了意义。这就需要以插件的方式把入侵检测的程序置入Java Web应用中,使得每次用户访问Java Web,都先要到这个入侵检测程序中报一次到,符合规则才能放行。

Java Web应用大致分为两种,一种纯JSP(+Java Bean)方式,一种是基于框架(如Struts、EasyJWeb等)的。第一种方式的Java Web可以通过Java Servlet中的Filter接口实现,也即实现一个Filter接口,在其doFilter方法中插入入侵检测程序,然后再web.xml中作简单的配置即可。在基于框架的Web应用中,由于所有应用都有一个入口,因此可以把入侵检测的程序直接插入框架入口引擎中,使框架本身支持入侵检测功能。当然,也可以通过实现Filter接口来实现。

在EasyJWeb框架中,已经置入了简单入侵检测的程序,因此,这里我们以EasyJWeb框架为例,介绍具体的实现方法及源码,完整的代码可以在EasyJWeb源码中找到。

在基于EasyJWeb的Java Web应用中(如www.easyjf.com/bbs/),默认情况下你只要连续刷新页面次数过多,即会弹出如下的错误:

EasyJWeb框架友情提示!:-):

您对页面的刷新太快,请等待60秒后再刷新页面!

详细请查询www.easyjf.com

二、用户访问信息记录UserConnect.java类

这个类是一个简单的Java Bean,主要代表用户的信息,包括用户名、IP、第一次访问时间、最后登录时间、登录次数、用户状态等。全部代码如下:

package com.easyjf.web;

import java.util.Date;

/**

*

*

Title:用户验证信息

*

Description:记录用户登录信息,判断用户登录情况

*

Copyright: Copyright (c)

*

Company: www.easyjf.com

* @author 蔡世友

* @version 1.0

*/

public class UserConnect {

private String userName;

private String ip;

private Date firstFailureTime;

private Date lastLoginTime;

private int failureTimes;//用户登录失败次数

private int status=0;//用户状态0表示正常,-1表示锁定

public int getFailureTimes {

return failureTimes;

}

public void setFailureTimes(int failureTimes) {

this.failureTimes = failureTimes;

}

public Date getFirstFailureTime() {

return firstFailureTime;

}

public void setFirstFailureTime(Date firstFailureTime) {

this.firstFailureTime = firstFailureTime;

}

public String getIp() {

return ip;

}

public void setIp(String ip) {

this.ip = ip;

}

public Date getLastLoginTime() {

return lastLoginTime;

}

public void setLastLoginTime(Date lastLoginTime) {

this.lastLoginTime = lastLoginTime;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public int getStatus() {

return status;

}

public void setStatus(int status) {

this.status = status;

}

}

三、监控线程UserConnectManage.java类

这是入侵检测的核心部分,主要实现具体的入侵检测、记录、判断用户信息、在线用户的刷新等功能,并提供其它应用程序使用本组件的调用接口。

package com.easyjf.web;

import java.util.Date;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

import org.apache.log4j.Logger;

/**

*

*

Title:用户入侵检测信息

*

Description:用于判断用户刷新情况检查,默认为10秒钟之内连续连接10次为超时

*

Copyright: Copyright (c) 2006

*

Company: www.easyjf.com

* @author 蔡世友

* @version 1.0

*/

public class UserConnectManage {

private static final Logger logger = (Logger) Logger.getLogger(UserConnectManage.class.getName());

private static int maxFailureTimes=10;//最大登录失败次数

private static long maxFailureInterval=10000;//毫秒,达到最大登录次数且在这个时间范围内

private static long waitInterval=60000;//失败后接受连接的等待时间,默认1分钟

private static int maxOnlineUser=200;//同时在线的最大数

private final static Map users=new HashMap();//使用ip+userName为key存放用户登录信息UserLoginAuth

private static Thread checkThread=null;

private static class CheckTimeOut implements Runnable{

private Thread parentThread;

public CheckTimeOut(Thread parentThread)

{

this.parentThread=parentThread;

synchronized(this){

if(checkThread==null){

checkThread= new Thread(this);

//System.out.println(“创建一个新线程!”);

checkThread.start();

}

}

}

public void run() {

while(true)

{

if(parentThread.isAlive()){

try{

Thread.sleep();

int i=0;

if(users.size()>maxOnlineUser)//当达到最大用户数时清除

{

synchronized(users){//执行删除操作

Iterator it=users.keySet().iterator();

Set set=new HashSet();

Date now=new Date();

while(it.hasNext())

{

Object key=it.next();

UserConnect user=(UserConnect)users.get(key);

if(now.getTime()-user.getFirstFailureTime().getTime()>maxFailureInterval)//删除超时的用户

{

set.add(key);

logger.info(“删除了一个超时的连接”+i);

i++;

}

}

if(i<5)//如果删除少于5个,则强行删除1/2在线记录,牺牲性能的情况下保证内存

{

int num=maxOnlineUser/2;

it=users.keySet().iterator();

while(it.hasNext() && i

{

set.add(it.next());

logger.info(“删除了一个多余的连接”+i);

i++;

}

}

users.keySet().removeAll(set);

}

}

}

catch(Exception e)

{

e.printStackTrace();

}

}

else

{

break;

}

}

logger.info(“监视程序运行结束!”);

}

}

//通过checkLoginValidate判断是否合法的登录连接,如果合法则继续,非法则执行

public static boolean checkLoginValidate(String ip,String userName)//只检查认证失败次数

{

boolean ret=true;

Date now=new Date();

String key=ip+“:”+userName;

UserConnect auth=(UserConnect)users.get(key);

if(auth==null)//把用户当前的访问信息加入到users容器中

{

auth=new UserConnect();

auth.setIp(ip);

auth.setUserName(userName);

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

users.put(key,auth);

if(checkThread==null)new CheckTimeOut(Thread.currentThread());

}

else

{

if(auth.getFailureTimes()>maxFailureTimes)

{

//如果在限定的时间间隔内,则返回拒绝用户连接的信息

if((now.getTime()-auth.getFirstFailureTime().getTime())

{

ret=false;

auth.setStatus(-1);

}

else if(auth.getStatus()==-1 && (now.getTime()-auth.getFirstFailureTime().getTime()<(maxFailureInterval+waitInterval)))//重置计数器

{

ret=false;

}

else

{

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

auth.setStatus(0);

}

}

//登录次数加1

auth.setFailureTimes(auth.getFailureTimes()+1);

}

//System.out.println(key+“:”+auth.getFailureTimes()+“:”+ret+“:”+(now.getTime()-auth.getFirstFailureTime().getTime()));

return ret;

}

public static void reset(String ip,String userName)//重置用户信息

{

Date now=new Date();

String key=ip+“:”+userName;

UserConnect auth=(UserConnect)users.get(key);

if(auth==null)//把用户当前的访问信息加入到users容器中

{

auth=new UserConnect();

auth.setIp(ip);

auth.setUserName(userName);

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

users.put(key,auth);

}

else

{

auth.setFailureTimes(0);

auth.setFirstFailureTime(now);

}

}

public static void remove(String ip,String userName)//删除用户在容器中的记录

{

String key=ip+“:”+userName;

users.remove(key);

}

public static void clear()//清空容器中内容

{

if(!users.isEmpty())users.clear();

}

public static long getMaxFailureInterval() {

return maxFailureInterval;

}

public static void setMaxFailureInterval(long maxFailureInterval) {

UserConnectManage.maxFailureInterval = maxFailureInterval;

}

public static int getMaxFailureTimes() {

return maxFailureTimes;

}

public static void setMaxFailureTimes(int maxFailureTimes) {

UserConnectManage.maxFailureTimes = maxFailureTimes;

}

public static int getMaxOnlineUser() {

return maxOnlineUser;

}

public static void setMaxOnlineUser(int maxOnlineUser) {

UserConnectManage.maxOnlineUser = maxOnlineUser;

}

public static long getWaitInterval() {

return waitInterval;

}

public static void setWaitInterval(long waitInterval) {

UserConnectManage.waitInterval = waitInterval;

}

四、调用接口

在需要进入侵检测判断的地方,直接使用UserConnectManage类中的checkLoginValidate方法即可,

如EasyJWeb的核心Servlet

com.easyjf.web.ActionServlet中调用UserConnectManage的代码:

if(!UserConnectManage.checkLoginValidate(request.getRemoteAddr(),“guest”))

{

info(request,response,new Exception(“您对页面的刷新太快,请等待”+UserConnectManage.getWaitInterval()/1000+“秒后再刷新页面!”));

return;

}

五、总结

上一篇:高分子学习体会下一篇:《国民党人与前期中华民国》读后感

本站热搜