在PHP应用程序修复CSRF漏洞WEB安全

2024-04-14

在PHP应用程序修复CSRF漏洞WEB安全(通用15篇)

篇1:在PHP应用程序修复CSRF漏洞WEB安全

简要描述:

某功能修改为get提交,可利用

详细说明:

博客的权限设置为GET提交,可在博文中插入链接图片,致使目标用户开放权限,

漏洞证明:

如control.blog.sina.com.cn/blogprofile/profilepower.php页面的权限设置,

1.博文中插入

control.blog.sina.com.cn/riaapi/conf/update_user_private.php?uid=***&privatekey=cms%2Cpageset%2Cinvitationset%2Cspamcms%2Cquote%2Cfoot%2Cisprivate&privatevalue=4%2C0%2C0%2C1%2C0%2C0%2C0 图片链接

2.在用户登录的前提下,诱使用户点击此博文,可使用户ID为***(博文目录地址暴露)博客对所有用户开放。

修复方案:

1.get修改为post提交

2.token机制

篇2:在PHP应用程序修复CSRF漏洞WEB安全

关键词: intitle:”Chat Room“ ”Powered By X7 Chat 2.0.5“

作者: DennSpec下载地址: x7chat.com/releases/v2/x7chat2_0_5_1.zip

影响版本: <= 2.0.5.1

首先注册获得一个用户名

(frame.html in path of your main html page)

替换www.xxx..com /x7path/为你的目标地址. 别忘了替换 YOURUSERNAME 到YOURUSERNAME.

add this code to inside body tag of main html page:

and... upload main page and frame.html .

把这个页面传给任意管理员,

X7 Chat 2.0.5.1及以下版本CSRF添加管理员缺陷及修复漏洞预警

篇3:在PHP应用程序修复CSRF漏洞WEB安全

聊城市住建委李济哲副主任和山东工程技师学院徐昌然院长分别致辞。济南等十七市代表分别座谈交流今年工作成绩、先进经验、存在的问题和明年的工作计划。从汇报来看, 各市能够认真贯彻落实省政府第219号令等发展散装水泥政策法规, 结合本地实际, 积极出台地方政策法规;强化散装水泥专项资金的征收、管理和使用, 实施依法征收, 提高了专项资金征收率;积极推进预拌砂浆的发展, 加大城市“禁现”力度;抓住新农村建设机遇, 开拓农村散装水泥市场;做好散装水泥宣传工作, 进一步提高散装水泥社会知名度;转变工作作风, 积极为企业开展服务工作, 以服务促管理。对于明年工作, 各市分别提出了具体工作打算, 表示要进一步加大工作力度, 继续认真贯彻落实省政府第219号令等政策法规, 扎实开展各项工作, 开拓创新, 促进各项工作再上一个新台阶。

丁建一副理事长对近年来我省发展散装水泥“三位一体”工作所取得的成绩给予充分肯定, 就山东对全国散装水泥行业发展作出的突出贡献给予褒奖。他指出, 近年来, 山东省在政策体系建设、农村推散、信息化建设和散装水泥常规工作等方面都取得很大进展, 对指导全国散装水泥行业发展具有借鉴意义。丁建一副理事长还介绍了全国发展散装水泥、预拌混凝土、预拌砂浆的有关情况。

于东威主任认真听取了各市工作总结汇报, 充分肯定了今年全省各市发展散装水泥工作取得的成绩, 逐一点评了各市工作亮点。对明年工作提出七点要求:一是要严格执行省经信委制定的《散装水泥行政处罚裁量基准》, 做到有法必依, 依法行政。积极推进我省立法工作, 要求各市对立法《草案》提出意见和建议。二是要加大工作力度, 力争完成我省散装水泥“十二五”规划;着手制定“十三五”规划, 做到切实、可行、合理。三是要进一步加快高性能混凝土和预拌砂浆的发展。按照山东省人民政府办公厅《关于进一步提升建筑质量的意见》的要求, 加快出台县级政策文件, 尽快落实“禁现”工作, 确保2017年底实现此项工作。四是要抓住城镇化建设有利时机, 积极拓展农村散装水泥市场。五是要认真做好散装水泥专项资金的征收、使用和管理工作。六是要进一步完善机构队伍建设。各市散办要积极协调有关部门, 切实抓住事业单位机构改革有利时机, 争取尽快、尽早解决县级散办机构建设问题。七是要不断转变工作作风, 积极为企业服务。

篇4:在PHP应用程序修复CSRF漏洞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:在PHP应用程序修复CSRF漏洞WEB安全

解析漏洞的修补方法,刚好在渗透一个站的时候遇到了这个问题,搭建了环境测试了下,顺便就想起了写这个文章了,进主题吧,IIS6.0的解析

漏洞大家都清楚,这里用asp作说明,比如 seay.asp;.jpg 或者seay.asp;asp之类的,呵呵……就不说那么多了,这样都是以asp解析的,那么比

如这么一个URL:seay.sinaapp.com/seay.asp;.jpg那么实际上,还是一个以jpg为扩展名的文件,在渗透的时候,我们需要访问

seay.sinaapp.com/seay.asp;.jpg这个URL来执行我们的shell,那么,我们来想一个办法,让所有为jpg扩展名的文件,都不能在地址栏

直接访问,就相当于文件防止下载(扯到主题了),那么我们可以用到一个很实用的工具:IISColander,这是一个防盗链小程序,用法很简单,看截图吧

很清晰明朗了,把我们要禁止在浏览器上直接访问的文件扩展名添加上去,开启就OK了,这样再访问seay.sinaapp.com/seay.asp;.jpg的话,是不会解析出来的,利用防盗链来修补这个功能,还是很不错的,当然还有很多方法,比如说目录禁止脚本执行啊什么的,

防盗链系统修复IIS6.0解析漏洞技巧WEB安全

呵呵……只是说下这个思路而已,还有几个功能大家就自己去看吧,比如检测非法文件等等,这个防盗链的我传网盘去吧,这是下载地址pan.baidu.com/netdisk/singlepublic?fid=486051_1625278183

不放心的就自己去网上下载吧。

篇6:在PHP应用程序修复CSRF漏洞WEB安全

图1-1csrf漏洞的攻击过程

CSRF(Cross-site request forgery跨站请求伪造)通常缩写为CSRF或者XSRF,CSRF使 可以冒充合法用户的身份,使合法用户在不知情的情况下触发如金融支付,发表微博等危险操作,并可直接导致蠕虫,危害巨大,从至今,CSRF漏洞已连续几年位于OWASP统计的十大Web安全漏洞前列。具体利用过程如图1-1所示。

攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。举一个简单的例子,例如:用户A在自己的博客站点中写了一篇文章C,用户B在回复中贴了一张图,在贴图的URL中写入删除文章C的链接,当A看见这张图片的时候,文章C便被不知不觉间删除了。这就是CSRF攻击了。

2.业界现有CSRF检测技术

2.1业界现有的技术方案

目前对于csrf的检测,业界还没有成熟有效的工具,唯一的一款比较有名的检测工具是由开放式Web应用程序安全项目(OWASP,Open Web Application Security Project)发布的Csrftester,该工具仅支持简单的对页面所提交的表单信息进行抓取,然后由用户人工地进行修改该数据来确定是否存在csrf漏洞,效率低下,无法适应互联网海量CGI漏洞检测的需求。

而其他的扫描器只能半自动发现,但误报极高,例如著名的awvs对csrf扫描的逻辑就比较简单,导致误报率很高。所以,业界一直缺少一个自动的和高准确率的csrf检测工具。

2.2业界现有技术的缺点

1)、不支持自动csrf漏洞检测;

2)、误报率很高。

3.创新的CSRF检测技术

针对近期外部报告的大量csrf漏洞,为快速地解决当前面临的问题,腾讯安全团队自研了一款全自动检测csrf漏洞的工具——CsrfScanner,主要检测基础数据库中的存在的漏洞。csrf产生危险的核心就是利用的他人的cookie来进行有敏感的操作,区别对待带cookie和不带cookie两种情况是扫描器的检测逻辑的关键点。CsrfScanner的检测步骤如下:

1)、不带cooie访问页面得到表单form1。

2)、带cookie访问页面得到表单form2。

3)、判断form1与form2是否为同一个表单,如果不是则转到步骤4。这是因为要取出能利用cookie的form。

4)、判断form2是否存在token、g_tk等字样,如果不存在,则转到步骤5;否则,则说明该指向的cgi有极大的可能做了csrf防御,为了降低误报率,应过滤掉,

5)、判断form2是否存在search、login等黑名单字样,如果不存在,则转到步骤6;否则,则说明该指向的cgi有极大的可能不存在敏感性,为了减低误报率,应过滤掉。

6)、判断form2是否存在保存、修改,提交等白名单字样,如果存在,则说明该form2所指向的cgi具有相当的敏感性,因此检测出该指向的cgi存在csrf漏洞。

CsrfScanner的主要是使用C++开发,使用qtwebkit库在返回的html内容中解析出尽可能多的form,即将js动态生成的form也能显示出来。

以下是CsrfScanner所检测出的漏洞及其利用截图,此为公司微博业务存在CSRF漏洞,可以导致 任意创建微活动并导致蠕虫:

A.用户原本是没有创建微活动的

B. CsrfScanner检测出微活动创建的cgi存在csrf漏洞

据此编写出poc,并挂在站点:hacker.com上

C. 向用户发送一个hacker.com的链接,用户在点击之后,便不知不觉间创建了名为hacker.com的微活动。

D.用户的好友看见此活动后,又去点击链接hacker.com,再度被欺骗性地发起同样的微活动,于是便导致微博蠕虫的泛滥,后果非常严重。

4.效果

csrf漏洞的自动检测一直是业界的技术难点,到目前也没有很好的解决方案,所以一直是我们的扫描器中未覆盖的漏洞类型。而csrf漏洞的数量在tsrc上一直占据前3位。图4-1为7月的tsrc上的漏洞情况,其中csrf有65个,占据了第一位。

自CsrfScanner在7月20日上线后,共发现数千个cgi、数百个域名存在漏洞,误报率低于20%。其中包括discuz, 微博,邮箱等多个重要业务,tsrc上每月仅有个位数的csrf漏洞,较7月的数十个外报有明显收敛。

5.后续

目前腾讯安全团队已经设计出新的csrf漏洞检测方案来进一步提升CsrfScanner的检测能力。简单的说,该方案通过使用webkit内核,hook住敏感的请求,在该请求中检测token是否存在来判断是否存在csrf漏洞,正在排期完成。该方案的增强点主要在

1)、覆盖form以外的csrf漏洞检测,提供更广的检测宽度

2)、更高精度的检测

3)、通过hook每一个敏感请求,能准确定位漏洞的原因

篇7:在PHP应用程序修复CSRF漏洞WEB安全

PHPWIND & DISCUZ! CSRF漏洞影响版本:

Discuz! 6.0.0 & 6.1.0 & 7.0.0

PHPWIND 6.0 & 6.3 & 7.0

漏洞描述:

PHPWIND & DISCUZ!存在CSRF漏洞,引发PHPWIND & DISCUZ! CSRF WORM!

groups.google.com/group/p ... d/b31e4d2e6270c384#

<*参考

groups.google.com/group/p ... d/b31e4d2e6270c384#

*>

安全建议:

DISCUZ删除templates/default/header.htm 里面的 $seohead就可以了,

暂无,等待官方补丁。

测试方法:

本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负!hk.chinakernel.org/worm.tar.gz

ring牛利用Discuz.net 域名服务商的漏洞,劫持了Custom.discuz.net这个域名,将这个域名解析到自己构造的一个假站点上。而在这个假站点上存放了exp攻击代码,主要文件为news.php。这里说明一下,discuz后台有一个通知功能用来通知站长修补漏洞等,该方式应该是在论坛后台script包含了custom.discuz.net/news.php。域名劫持之后就在后台包含了ring构造的这个news.php,分析news.php里包含了两个js文件,其中dz.js用于使用ajax模拟站长提交修改seo设置的表单,

dz.stats.js则iframe了dz_stats.php文件用于记录中招了的论坛地址,只要站长登陆后台就会中招.

修改后的seo设置里包含了一段js代码,而在论坛前台页面里会直接调用seo的设置。所以直接将这段js在前台的页面中执行了.

测试环境:centos5.1 apache2.2 php5.2 mysql5.0 discuz6.0

首先伪造customer.discuz.net

在apache里面配置虚拟主机如下:

NameVirtualHost 192.168.25.100:80

ServerName customer.discuz.net

DocumentRoot /usr/local/apache/htdocs/worm

ServerName www.test.com

DocumentRoot /usr/local/apache/htdocs/discuz/upload

/usr/local/apache/htdocs/discuz/upload为discuz程序地址。

/usr/local/apache/htdocs/worm 为exp存放地址

本地host里面customer.discuz.net和www.test.com改为192.168.25.100

访问www.test.com 登陆后台,成功被改

虽然不好利用,但是思路非常好,杀伤力和攻击范围很大,顶ring牛!

小菜乱写的,大牛飘过

篇8:串口通信新模型的研究与C#实现

串口即串行通信接口, 在工业控制领域, 它是连接计算机和外部串行设备的常用数据传输通道。大量的智能仪器或数据采集模块都带有串口, 通过相应的通信协议和串口通信程序, 可以将测试、采集的数据传输到上位工控机, 以满足各种形式后续数据处理的要求。同时上位监控系统也会根据系统运行情况通过串口向监控设备发送指令, 调节设备的运行参数等使得生产过程平稳进行。串口通信具有稳定可靠、成本低廉、软件易实现等优点, 是当前工业控制行业运用比较广泛的通信方式。

传统的串口编程要综合考虑底层通信细节和串口通信协议。这一方面导致调试串口的时候要对这两种情况进行分析, 增加了调试的困难;另一方面二者深度耦合, 当串口通信协议改变的时候整个通信程序要重写, 不符合现代编程的模块化思想。鉴于此, 参考I/O完成端口模型 (IOCP) 建立了一个适用于协议性串口通信的新模型, 将底层通信的细节进行封装并和通信协议分离, 很好地解决了上述问题。

2 串口通信新模型

2.1 完成端口简介

IOCP是性能最好的一种I/O模型。它是应用程序使用线程池处理异步I/O请求的一种机制。通过将完成端口与任意I/O句柄 (文件或Socket等) 关联, 用户可以通过完成端口异步地获取并处理I/O的结果。

如图1所示, 在完成端口上建立几个并行的工作线程, 它们为到达完成端口的I/O任务提供服务。当有I/O任务到达时, 如果有可用的工作线程, 则激活该线程, 如果没有可用工作线程, 则将I/O任务加入到请求队列。该队列采用先进先出

郑武肖宝森

(FIFO) 的策略, 保证这些请求得到公平的服务。工作线程的建立和请求队列的FIFO策略, 减少了CPU在不同线程间切换的次数, 降低线程上下文切换所造成的开销[2]。

2.2 串口通信新模型

借鉴IOCP的核心思想, 模型提出了一个协议性串口通信的最小单位———“通信元”。通信元包含发送数据缓存区、接收数据缓存区、接收数据长度、超时时间间隔、超时处理函数和事件处理函数6个部分。其中数据缓存区用来存放发送数据和接收数据, 超时时间间隔用来设置串口通信超时时间, 超时处理函数对超时情况进行处理, 而事件处理函数则对接收到的数据进行处理。

模型维护一个通信元队列, 当进行串口通信时先定义好通信元然后提交到通信元队列, 队列根据先进先出的原则进行处理。当某个通信元出队时, 模型先发送该通信元发送数据缓存区的数据, 接着根据接收数据长度对串口数据进行接收, 如果超时则调用超时处理函数, 否则进行接收事件处理。通过该模型, 将每次串口通信的过程简化成一个通信元的处理过程, 用户只需要定义好通信元提交到队列中, 模型即自动处理底层通信的细节, 简化了处理流程并提高了运行效率。

3 C#实现

C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C++派生而来, 继承了其强大的性能, 同时又以.NET框架类库作为基础, 拥有类似Visual Basic的快速开发能力。C#自.NET 2.0开始提供了SerialPort类实现对串口通信的原生支持, 本模型在这个类基础上进行编程实现。

首先是本模型最重要的通信元, 代码如下:

其次是通信元队列处理, 这里定义了一个线程专门对通信元队列进行处理。线程有两个阻塞信号, 一个用来判断队列是否为空, 一个用来判断当前通信元是否处理完毕。代码如下:

最后是串口接收函数, 模型自动根据通信元中接收数据长度对串口数据进行接收。代码如下:

其他包括串口发送函数、通信元入队、出队函数、定时器设置等由于比较简单不在此进行介绍。

4 结语

该模型主要借鉴了I/O完成端口的思想, 通过将协议性串口通信的每次通信过程抽象成通信元提交给通信元队列进行自动处理, 从而实现对底层通信细节的封装, 实现串口的模块化。将该模块应用于工业造气炉监控组态软件设计中, 实际运行表明:该模型具有简单的接口和稳定、高效的运行机制。

摘要:借鉴I/O完成端口模型 (IOCP) 的核心思想, 建立了一个适用于协议性串口通信的新模型。该模型提出了一个协议性串口通信的最小单位———“通信元”, 将“通信元”提交到事件队列线程中自动处理, 简化了处理过程并提高了运行效率。同时, 基于该模型用C#设计出了一个协议性串口通信模块, 以封装通信底层的细节, 从而提供方便的通信接口。将该模块应用于工业造气炉监控组态软件设计中, 实际运行表明:该模型具有简单的接口和稳定、高效的运行机制。

关键词:IOCP模型,串口通信,通信元

参考文献

[1]Jeffrey Richter.Advanced Windows (3rd edition) [M].USA:Microsoft Press, 1997.

[2]Jim Beveridge, Robert Wiener.Multithreading Applications inWin32:The Complete Guide to Threads (Addison-WesleyMicrosoft Technology Series) [M].USA:Addson-WesleyProfessional, 1996.

[3]Anthony Jones, Jim Ohlund.Network Programming for Microsoft Windows (2nd edition) [M].USA:Microsoft Press, 2002.

[4]Anthony Jones, Amol Deshpande.Windows Sockets 2.0:WriteScalable Winsock Apps Using Completion Ports[J].MSDNMagazine, Microsoft Press, October 2000:30-35.

篇9:安全宝 一键修复网站漏洞

国家互联网应急中心(CNCERT)最新数据显示,2011年网站安全类事件占中国信息安全问题的61.7%;国家信息安全漏洞平台 (CNVD)接收的漏洞中,与网站相关的漏洞占22.7%,比2010年大幅上升。

而此前,CSND、天涯等网站的密码泄露事件造成大规模网站用户隐私泄露,受影响的用户数量过亿,这些被泄露的信息很可能成为攻击者的钓鱼工具,带来更严重的后果。因此,为了让更多用户获得便捷可靠的安全服务,4月11日,创新工场旗下惟一的安全领域投资项目安全宝宣布,推出业内首创的网站漏洞“一键修复”功能。

“过去,为网站提供一站式的安全,是一个非常复杂的过程,而安全宝提供的‘一键修复’服务,可以让这个过程变得很简单。”创新工场CEO李开复说。

据了解,网站的修复工作比远比PC复杂得多,不仅需要在专业安全人员的指导下,程序员修改代码、网站管理员更改配置,还要经过测试、上线和再次扫描等一系列步骤才能完成,通常都要重复多次,耗费大量人力和时间。而根据安全宝的现场演示,用户登录安全宝网站后,利用安全宝集成的第三方工具对网站进行“体检”,随后只需要点击“一键修复”,就可以完成包含高危漏洞在内的全部漏洞修复。

“一键修复的背后其实涉及了很多复杂的技术环节。”安全宝CEO马杰表示,安全宝一键修复是将机器规则、模型规则和专家规则融合,形成了全球首创的在线网站漏洞人工智能修复系统,从而显著地提升安全威胁的防护能力和防护水平,把网站安全防护技术和用户体验提升到了一个全新的高度。

此外,安全宝作为云安全服务提供商,用全新的“替身理念”代替传统安全的“保镖理念”,将用户隐藏在云中,避开攻击者。“过去尽管有各种措施来保护网站安全,但网站始终是暴露在攻击者面前的,而安全宝把用户置身于云中,由安全宝作为替身直接面对攻击。”马杰说,面对日益严峻的信息安全环境,云安全与网站自身相比,安全规则更新、更完善。

篇10:PHP程序常见漏洞分析

PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型也不需要指定,它们会根据上下文环境自动确定,从程序员的角度来看,这无疑是一种极其方便的处理方法。很显然,这也是快速开发语言的一个很有用的特点。一旦一个变量被创建了,就可以在程序中的任何地方使用。这个特点导致的结果就是程序员很少初始化变量,毕竟,当它们第一次创建时,他们是空的。

很显然,基于PHP的应用程序的主函数一般都是接受用户的输入(主要是表单变量,上载文件和Cookie等),然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。

例如:

很显然,这会显示一个文本框和提交按钮。当用户点击提交按钮时,“test.php”会处理用户的输入,当“test.php”运行时,“$hello”会包含用户在文本框输入的数据。从这里我们应该看出,攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者不是通过表单输入来调用“test.php”,而是直接在浏览器地址栏输入server/test.php?hello=hi&setup=no,那么,不止是“$hello”被创建,“$setup”也被创建了。

译者注:这两种方法也就是我们通常说的“POST”和“GET”方法。

下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:

if ($pass == “hello”)

$auth = 1;

...

if ($auth == 1)

echo “some important information”;

?>

上面的代码首先检查用户的密码是否为“hello”,如果匹配的话,设置“$auth”为“1”,即通过认证。之后如果“$suth”为“1”的话,就会显示一些重要信息。

表面看起来是正确的,而且我们中有相当一部分人是这样做的,但是这段代码犯了想当然的错误,它假定“$auth”在没有设置值的时候是空的,却没有想到攻击者可以创建任何全局变量并赋值,通过类似“server/test.php?auth=1”的方法,我们完全可以欺骗这段代码,使它相信我们是已经认证过的。

因此,为了提高PHP程序的安全性,我们不能相信任何没有明确定义的变量。如果程序中的变量很多的话,这可是一项非常艰巨的任务。

一种常用的保护方式就是检查数组HTTP_GET[]或POST_VARS[]中的变量,这依赖于我们的提交方式(GET或POST)。当PHP配置为打开“track_vars”选项的话(这是缺省值),用户提交的变量就可以在全局变量和上面提到的数组中获得。

但是值得说明的是,PHP有四个不同的数组变量用来处理用户的输入,

HTTP_GET_VARS数组用来处理GET方式提交的变量,HTTP_POST_VARS数组用于处理POST方式提交的变量,HTTP_COOKIE_VARS数组用于处理作为cookie头提交的变量,而对于HTTP_POST_FILES数组(比较新的PHP才提供),则完全是用户用来提交变量的一种可选方式。用户的一个请求可以很容易的把变量存在这四个数组中,因此一个安全的PHP程序应该检查这四个数组。

[远程文件]

PHP是一种具有丰富特性的语言,提供了大量的函数,使编程者实现某个功能很容易。但是从安全的角度来看,功能越多,要保证它的安全性就越难,远程文件就是说明这个问题的一个很好的例子:

if (!($fd = fopen(“$filename”, “r”))

echo(“Could not open file: $filename

n”);

?>

上面的脚本试图打开文件“$filename”,如果失败就显示错误信息。很明显,如果我们能够指定“$filename”的话,就能利用这个脚本浏览系统中的任何文件。但是,这个脚本还存在一个不太明显的特性,那就是它可以从任何其它WEB或FTP站点读取文件。实际上,PHP的大多数文件处理函数对远程文件的处理是透明的。

例如:

如果指定“$filename”为“target/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir”

则上面的代码实际上是利用主机target上的unicode漏洞,执行了dir命令。

这使得支持远程文件的include(),require(),include_once()和require_once()在上下文环境中变得更有趣。这些函数主要功能是包含指定文件的内容,并且把它们按照PHP代码解释,主要是用在库文件上。

例如:

include($libdir . “/languages.php”);

?>

上例中“$libdir”一般是一个在执行代码前已经设置好的路径,如果攻击者能够使得“$libdir”没有被设置的话,那么他就可以改变这个路径。但是攻击者并不能做任何事情,因为他们只能在他们指定的路径中访问文件languages.php(perl中的“Poison null byte”攻击对PHP没有作用)。但是由于有了对远程文件的支持,攻击者就可以做任何事情。例如,攻击者可以在某台服务器上放一个文件languages.php,包含如下内容:

passthru(“/bin/ls /etc”);

?>

然后把“$libdir”设置为“/”,这样我们就可以在目标主机上执行上面的攻击代码,“/etc”目录的内容作为结果返回到客户的浏览器中。

需要注意的是,攻击服务器(也就是evilhost)应该不能执行PHP代码,否则攻击代码会在攻击服务器,而不是目标服务器执行,如果你想了解具体的技术细节,请参考:www.securereality.com.au/sradv00006.txt

[文件上载]

篇11:在PHP应用程序修复CSRF漏洞WEB安全

翻译:analysist <” target=_blank>www.nsfocus.com/>

之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASP,PHP或者JSP安全性的文章则很少,Shaun Clowes的这篇文章比较全面地介绍了PHP的安全问题,原文可以在www.securereality.com.au/studyinscarlet.txt找到。

由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到PHP安全方面的内容,因此我没有翻译。如果你想了解这方面的知识,请参考原文。

文章主要从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性,并且对如何增强PHP的安全性提出了一些有用的建议。

好了,废话少说,我们言归正传!

[全局变量]

PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型也不需要指定,它们会根据上下文环境自动确定。从程序员的角度来看,这无疑是一种极其方便的处理方法。很显然,这也是快速开发语言的一个很有用的特点。一旦一个变量被创建了,就可以在程序中的任何地方使用。这个特点导致的结果就是程序员很少初始化变量,毕竟,当它们第一次创建时,他们是空的。

很显然,基于PHP的应用程序的主函数一般都是接受用户的输入(主要是表单变量,上载文件和Cookie等),然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。

例如:

很显然,这会显示一个文本框和提交按钮。当用户点击提交按钮时,“test.php”会处理用户的输入,当“test.php”运行时,“$hello”会包含用户在文本框输入的数据。从这里我们应该看出,攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者不是通过表单输入来调用“test.php”,而是直接在浏览器地址栏输入server/test.php?hello=hi&setup=no,那么,不止是“$hello”被创建,“$setup”也被创建了。

译者注:这两种方法也就是我们通常说的“POST”和“GET”方法。

下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:

if ($pass == “hello”)

$auth = 1;

...

if ($auth == 1)

echo “some important information”;

?>

上面的代码首先检查用户的密码是否为“hello”,如果匹配的话,设置“$auth”为“1”,即通过认证。之后如果“$suth”为“1”的话,就会显示一些重要信息。

表面看起来是正确的,而且我们中有相当一部分人是这样做的,但是这段代码犯了想当然的错误,它假定“$auth”在没有设置值的时候是空的,却没有想到攻击者可以创建任何全局变量并赋值,通过类似“server/test.php?auth=1”的方法,我们完全可以欺骗这段代码,使它相信我们是已经认证过的。

因此,为了提高PHP程序的安全性,我们不能相信任何没有明确定义的变量。如果程序中的变量很多的话,这可是一项非常艰巨的任务。

一种常用的保护方式就是检查数组HTTP_GET[]或POST_VARS[]中的变量,这依赖于我们的提交方式(GET或POST)。当PHP配置为打开“track_vars”选项的话(这是缺省值),用户提交的变量就可以在全局变量和上面提到的数组中获得。

但是值得说明的是,PHP有四个不同的数组变量用来处理用户的输入。HTTP_GET_VARS数组用来处理GET方式提交的变量,HTTP_POST_VARS数组用于处理POST方式提交的变量,HTTP_COOKIE_VARS数组用于处理作为cookie头提交的变量,而对于HTTP_POST_FILES数组(比较新的PHP才提供),则完全是用户用来提交变量的一种可选方式。用户的一个请求可以很容易的把变量存在这四个数组中,因此一个安全的PHP程序应该检查这四个数组。

[远程文件]

PHP是一种具有丰富特性的语言,提供了大量的函数,使编程者实现某个功能很容易。但是从安全的角度来看,功能越多,要保证它的安全性就越难,远程文件就是说明这个问题的一个很好的例子:

if (!($fd = fopen(“$filename”, “r”))

echo(“Could not open file: $filename

n”);

?>

上面的脚本试图打开文件“$filename”,如果失败就显示错误信息。很明显,如果我们能够指定“$filename”的话,就能利用这个脚本浏览系统中的任何文件。但是,这个脚本还存在一个不太明显的特性,那就是它可以从任何其它WEB或FTP站点读取文件。实际上,PHP的大多数文件处理函数对远程文件的处理是透明的。

例如:

如果指定“$filename”为“target/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir”

则上面的代码实际上是利用主机target上的unicode漏洞,执行了dir命令。

这使得支持远程文件的include,require(),include_once()和require_once()在上下文环境中变得更有趣。这些函数主要功能是包含指定文件的内容,并且把它们按照PHP代码解释,主要是用在库文件上。

例如:

include($libdir . “/languages.php”);

?>

上例中“$libdir”一般是一个在执行代码前已经设置好的路径,如果攻击者能够使得“$libdir”没有被设置的话,那么他就可以改变这个路径,

但是攻击者并不能做任何事情,因为他们只能在他们指定的路径中访问文件languages.php(perl中的“Poison null byte”攻击对PHP没有作用)。但是由于有了对远程文件的支持,攻击者就可以做任何事情。例如,攻击者可以在某台服务器上放一个文件languages.php,包含如下内容:

passthru(“/bin/ls /etc”);

?>

然后把“$libdir”设置为“/“ target=_blank>/”,这样我们就可以在目标主机上执行上面的攻击代码,“/etc”目录的内容作为结果返回到客户的浏览器中。

需要注意的是,攻击服务器(也就是evilhost)应该不能执行PHP代码,否则攻击代码会在攻击服务器,而不是目标服务器执行,如果你想了解具体的技术细节,请参考:www.securereality.com.au/sradv00006.txt

[文件上载]

PHP自动支持基于RFC 1867的文件上载,我们看下面的例子:

上面的代码让用户从本地机器选择一个文件,当点击提交后,文件就会被上载到服务器。这显然是很有用的功能,但是PHP的响应方式使这项功能变的不安全。当PHP第一次接到这种请求,甚至在它开始解析被调用的PHP代码之前,它会先接受远程用户的文件,检查文件的长度是否超过“$MAX_FILE_SIZE variable”定义的值,如果通过这些测试的话,文件就会被存在本地的一个临时目录中。

因此,攻击者可以发送任意文件给运行PHP的主机,在PHP程序还没有决定是否接受文件上载时,文件已经被存在服务器上了。

这里我就不讨论利用文件上载来对服务器进行DOS攻击的可能性了。

让我们考虑一下处理文件上载的PHP程序,正如我们上面说的,文件被接收并且存在服务器上(位置是在配置文件中指定的,一般是/tmp),扩展名一般是随机的,类似“phpxXuoXG”的形式。PHP程序需要上载文件的信息以便处理它,这可以通过两种方式,一种方式是在PHP 3中已经使用的,另一种是在我们对以前的方法提出安全公告后引入的。

但是,我们可以肯定的说,问题还是存在的,大多数PHP程序还是使用老的方式来处理上载文件。PHP设置了四个全局变量来描述上载文件,比如说上面的例子:

$hello = Filename on local machine (e.g ”/tmp/phpxXuoXG“)

$hello_size = Size in bytes of file (e.g 1024)

$hello_name = The original name of the file on the remote system (e.g ”c:temphello.txt“)

$hello_type = Mime type of uploaded file (e.g ”text/plain“)

然后PHP程序开始处理根据“$hello”指定的文件,问题在于“$hello”不一定是一个PHP设置的变量,任何远程用户都可以指定它。如果我们使用下面的方式:

vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

就导致了下面的PHP全局变量(当然POST方式也可以(甚至是Cookie)):

$hello = ”/etc/passwd“

$hello_size = 10240

$hello_type = ”text/plain“

$hello_name = ”hello.txt“

上面的表单数据正好满足了PHP程序所期望的变量,但是这时PHP程序不再处理上载的文件,而是处理“/etc/passwd”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。

我在前面已经说了,新版本的PHP使用HTTP_POST_FILES[]来决定上载文件,同时也提供了很多函数来解决这个问题,例如有一个函数用来判断某个文件是不是实际上载的文件。这些函数很好的解决了这个问题,但是实际上肯定有很多PHP程序仍然使用旧的方法,很容易受到这种攻击。

作为文件上载的攻击方法的一个变种,我们看一下下面的一段代码:

if (file_exists($theme)) // Checks the file exists on the local system (no remote files)

include(”$theme“);

?>

如果攻击者可以控制“$theme”的话,很显然它可以利用“$theme”来读取远程系统上的任何文件。攻击者的最终目标是在远程服务器上执行任意指令,但是他无法使用远程文件,因此,他必须得在远程服务器上创建一个PHP文件。这乍看起来好象是不可能的,但是文件上载帮了我们这个忙,如果攻击者先在本地机器上创建一个包含PHP代码的文件,然后创建一个包含名为“theme”的文件域的表单,最后用这个表单通过文件上载把创建的包含PHP代码的文件提交给上面的代码,PHP就会把攻击者提交的文件保存起来,并把“$theme”的值设置为攻击者提交的文件,这样file_exists()函数会检查通过,攻击者的代码也将执行。

获得执行任意指令的能力之后,攻击者显然想提升权限或者是扩大战果,而这又需要一些服务器上没有的工具集,而文件上载又一次帮了我们这个忙。攻击者可以使用文件上载功能上载工具,把她们存在服务器上,然后利用他们执行指令的能力,使用chmod()改变文件的权限,然后执行。例如:攻击者可以绕过防火墙或IDS上载一个本地root攻击程序,然后执行,这样就获得了root权限。

篇12:在PHP应用程序修复CSRF漏洞WEB安全

webshell比如eval($_POST[])大家都耳熟能详,近几年在常见的webshell基础上衍生了很多变种,加大了检测难度,下面先看几个从网上摘取的样本:

1、无ascii码和数字的webshell

2、隐藏关键字

3、编码 + 隐藏关键字

从目前已经公开的样本来看,变形的php webshell都是采取了隐藏关键字(eval、system等)的方法来躲避查杀,有一位monyer同学写过一篇webshell的检测文章,他把webshell拆分为下面的结构,执行数据和数据传递,检测思路是:以小括号为界限,匹配执行数据部分是否命中收集的样本的关键字。这种思路很好,个人觉得有两处不足:

1、需要人工维护收集新样本。

2、误报量不可预估。

再看这个结构,变形的webshell无非是隐藏了执行数据部分或者数据传递部分,不过无论怎么变形本质上还是去调用eval、调用system、exec等命令执行函数,杀毒软件通过异常行为来检测木马病毒,比如开机自启动,这种思想同样也可以用在webshell的检测中。获取行为数据是第一步。

二、PHP HOOK

这里我们只需要一些敏感的行为数据,比如eval、system的调用。实现方法很简单,hook这些php函数或语法结构,这里通过php扩展来实现hook。下面以eval和system来简要概述下hook的方法。

Eval是一个语法结构,调用eval最终会调用php内核的zend_compile_string函数,hook eval的只需要重写zend_complie_string函数即可,流程如下:

System是php的一个内部函数,php代码是转化为opcode(指令)来执行,函数调用的指令是ZEND_DO_FCALL,风雪之隅大牛在taint扩展(详见参考二)就是通过重载ZEND_DO_FCALL的方法实现了。因为我们并不需要hook每个内部函数,所以这里介绍另外一种方法,流程如下:

上报的数据写在一个日志文件中,包括文件名、调用函数名、代码在文件的行数,

日志结构和内容如下:

附件中有eval、system函数hook实现的demo,具体细节可以查看代码。demo只在php-5.3.6上测试过,不兼容之处忘见谅。

三、检测

变形webshell分为两大类,下面依次说明一下检测逻辑。

1、执行数据隐藏

一个正常的程序员如果使用eval、system是不会刻意的转换隐藏的,如果发现某个函数执行了,代码中却找不到这个函数名,我们认为这是一个异常行为。以下面这个变形为例

比如 传入参数nonalpha.php?_=system&__=whoami执行了一条命令,日志会记录

我们在后端取nonalpha.php文件的第7行内容匹配system(字符串,如果没找到,则认为是一个变形webshell。

2、数据传递隐藏

先看下面这个例子

这个webshell通过编码的referer来传递攻击载荷,利用日志文件记录到的文件名和行数把代码上报到后端,和后端svn中的代码做对比,如果不一致,则认为是一个webshell。

四、不足

web承受着大量的访问请求,增加的php扩展的性能和稳定性是一个严峻的考验,另外在服务器比较多的公司还存在一个推广和部署成本。

五、参考:

[1]hi.baidu.com/monyer/item/a218dbadf2afc7a828ce9d63

[2]www.laruence.com//02/18/2560.html

[3]www.80vul.com/webzine_0x05/0x07%20%E6%B5%85%E8%B0%88%E4%BB%8EPHP%E5%86%85%E6%A0%B8%E5%B1%82%E9%9D%A2%E9%98%B2%E8%8C%83PHP%20WebShell.html

附件:check_webshell_demo.7z

篇13:在PHP应用程序修复CSRF漏洞WEB安全

关键词:膳食调查,营养状况,营养不良,肥胖症,儿童

学龄前儿童正处于一生之中生长发育的旺盛阶段,对营养素的需要量相对较高。合理的营养供给是保障儿童身体健康和智力发育的物质基础,也是预防疾病、提高健康水平的重要条件。为了解河南省直机关第二幼儿园儿童的膳食结构及营养状况,为调整膳食结构提供科学依据,笔者于2007年5月对该园407名幼儿的膳食及营养状况进行了调查,现报道如下。

1 对象与方法

1.1 对象

选取河南省直机关第二幼儿园14个班级共407名幼儿为研究对象,年龄3~6岁。

1.2 方法

1.2.1 膳食调查

该园为日托,幼儿在园一日三餐一点,因此采用膳食记帐和称重相结合的方法,连续5 d调查幼儿膳食状况,并利用郑州大学营养教研室开发的营养分析软件,计算每人每日的能量和各种营养素摄入量。3~6岁中国居民营养素推荐摄入量(RNI)[1]为基数,以同年龄人数为权数,加权平均计算出该园幼儿的RNI,然后进行分析对比。

1.2.2 体格检查

按统一要求,对407名幼儿测量身高、体重,并按照WHO推荐的身高标准体重法对每位幼儿进行营养状况评价,大于标准的120%为肥胖,大于110%为超重,90%~110%为正常,小于90%为营养不良[2]。

1.2.3 血红蛋白测定

采用氰化高铁血红蛋白法,以WHO制订的贫血筛选标准为依据,即Hb<110 g/L为贫血。

2 结果

2.1 膳食结构

肉、蛋类及豆类摄入较为充足,粮谷类摄入较少(每日低于150 g),奶类为105 g,绿色蔬菜仅达60 g。

2.2 营养素摄入量

能量、蛋白质、维生素A、硫胺素、尼克酸、维生素C、维生素E、磷、钾、铁、镁、硒、碘摄入量合理,脂肪摄入量偏高,碳水化合物、钙、锌摄入量偏低。见表1。

2.3 膳食蛋白质摄入量

平均每人每日总蛋白质摄入量为50.89 g,其中优质蛋白质为25.28 g,占总蛋白质的49.67%,说明膳食蛋白质质量较好。

2.4 体格检查

在407名幼儿中,超重、肥胖检出率为8.1%,营养不良检出率为0.73%,贫血检出率为0。

3 讨论

儿童生长发育受遗传及内分泌因素的影响,但营养仍起着非常重要的作用,合理营养是确保儿童健康成长的基础[3,4,5]。该园为全日制幼儿园,幼儿全天在园就餐,所以供给合理的膳食就显得尤为重要。

调查显示,该园幼儿膳食能量摄入量达RNI的103.95%,蛋白质摄入量达RNI的102.42%,能满足机体需要;各种维生素及矿物质摄入也合理。但仍有不尽合理之处,主要表现为脂肪供能过高(超过30%),谷类、绿色蔬菜、海产品摄入量较低,钙摄入不足。调查还发现,膳食中锌摄入量仅达RNI的59.34%,这可能与当地少食海产品的饮食习惯有关。

通过调查,提出以下改进建议:调整食物结构,合理选购动物性食物,如家禽、鱼类,增加粮谷类、绿色蔬菜及豆制品的摄入量,改善脂肪供能过高的现象;同时增加奶制品、鱼虾、紫菜等海产品的摄入量;每周食用1~2次动物内脏,以增加钙及锌的供给,使膳食更加科学、合理,以保障幼儿健康成长。

参考文献

[1]中国营养学会.中国居民膳食营养素参考摄入量.北京:中国轻工业出版社,2001.

[2]刘学宁,黄坚,张弈梅,等.深圳市中小学生肥胖现状及相关因素探讨.中国公共卫生,2001,17(8):734-735.

[3]汪洋,李继斌.某幼儿园儿童膳食营养及结构评价.中国学校卫生,2002,23(4):327-328.

[4]龚英.梧州市托幼机构儿童营养状况.中国学校卫生,2005,26(6):477.

篇14:在PHP应用程序修复CSRF漏洞WEB安全

Mozilla发布的最新版本火狐10.0.1版修复的这个安全漏洞能够引起浏览器崩溃。恶意黑客可以利用这个漏洞实施执行代码攻击。

Mozilla的安全公告称,Mozilla开发者安德鲁•麦克赖特(Andrew McCreight)和奥利•佩泰(Olli Pettay)发现“ReadPrototypeBindings”函数将在哈希表中留下一个XBL绑定,即使在这个功能失效的时候也是如此。如果发生这种情况,当这个循环收集器读到这个哈希表并且要对这个绑定采取虚拟方法时,浏览器将崩溃。黑客可以利用这个浏览器崩溃实施攻击。

Mozilla把这个安全漏洞列为“严重”等级,因为这个安全漏洞能够用于运行攻击者的代码和安装软件,不需要用户干预。

Mozilla称,火狐9和早期版本的火狐浏览器不受这个安全漏洞的影响。

篇15:在PHP应用程序修复CSRF漏洞WEB安全

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) 其他目录一般只分配“读取”权限即可

上一篇:品月饼赏明月随笔下一篇:放牛班的春天观后感英文