Web开发框架安全杂谈

Web开发框架安全杂谈
Write by admin in 未分类 at 2011-03-15 22:21:03
Web开发框架安全杂谈

EMail: wofeiwo#80sec.com
Site: http://www.80sec.com
Date: 2011-03-14
From: http://www.80sec.com/

[ 目录 ]
0×00 起
0×01 承
0×02 转
0×03 合

0×00起

最近框架漏洞频发,struts任意代码执行、Django csrf token防御绕过、Cakephp代码执行等等各大语言编程框架都相继暴出高危漏洞,这说明对于编程框架的安全问题已经逐渐走入安全工作者的视线。
Web开发框架就相当于web应用程序的操作系统,他决定了一个应用程序的模型结构和编程风格。框架上出了漏洞,就如同当年一个rpc远程EXP就走遍全世界windows的时代。

然而挖掘深层原因,从应用的模型和架构上考虑问题,其实这些框架漏洞都不只是一种偶然,而是一种必然。正是因为框架的模型结构,正因为他们的这种编程风格,才极大的增加了漏洞产生的可能性。

0×01承

现代编程框架的几个大特点:

1、将程序代码分为不同层次,业务开发、前端开发、数据库开发人员各司其职,框架根据需要组装代码、调度执行
2、统一化自动化逻辑处理
3、常见功能的代码库封装并高度重用
4、脚手架功能,常见代码组件自动组装生成。如默认用户系统、默认后台。

然而就是以上几点广受好评的功能导致了安全薄弱点的产生。

1、代码调度
让我们来先回顾一下WEB应用框架所最常见的MVC模型。

用户发送一个HTTP请求过来,框架的入口点(一般是route,路由)分析用户请求的url。然后依照url中蕴含的信息分析出用户所要访问的controller、action,从而分发给相应的controller文件中的action函数,执行之;随后controller再将model中的数据结合用户输入数据依照view层中的代码逻辑填充模板,最后view、controller执行完毕,返回用户最后的HTML。
整个生命周期是这样的:

用户请求url->route分发->controller接管处理用户输入及业务逻辑->view层代码执行->controller返回展现结果

从上面的流程发现了什么?
MVC模型就是一个将程序员分散在M、C、V中的代码寻找并整合在一起执行的过程。那这必然就要牵涉到一个代码调度执行的问题。这里route就是一个非常明显的例子。一个框架这么多代码文件,route每一次调用controller,都需要根据用户输入的url进行匹配并执行用户指定的函数。这里就是一个薄弱点,一个必然绕不过去的问题。

对应到现实的例子,一个非常明显的例子就是:struts2框架的动态方法调用(DMI)
当你访问www.test.com/a!test.action时,struts会根据你的url帮你映射到名为a的controller中名为test的Action方法。而通过修改test的值,我们可以访问a这个类中的所有方法。如果恰好这个方法中含有敏感的信息,攻击者就获得了一切。结合其他技巧,攻击者能够做到的更多。但这就是框架的功能,框架总是要依靠URL中的内容去匹配执行程序代码。

那么对于PHP的框架呢?仔细想一下,如果PHP需要做分散在不同文件中的代码调度执行,唯一能够实现的方式就是使用require/include函数包含文件。文件名来源于哪里?来源于用户输入的URL。实际上目前市面上的大部分PHP框架也都是这么实现的,Yii,FleaPHP等等。如果对用户的输入没有做好验证,就很容易导致一个本地文件包含漏洞。笔者曾经就在某不知名框架中发现过这样的漏洞,在不涉及应用程序逻辑的情况下,直接获取了系统权限。

2、统一化逻辑处理

框架的一大功能就是,通过统一的入口点,可以做一些统一的安全防护、逻辑控制。在软件工程学里的说法,这个叫“面向切面编程”(AOP)。
然而我们并不是说这样的统一控制模式不好,但对于这样的统一控制,如果框架设计或实现的不好,就能直接沦陷所有跑在之上的应用。

这里有一个典型的统一处理导致安全问题的极端的例子:struts2任意代码执行漏洞。
漏洞起因是struts2希望能让用户提交的值能够直接注入到程序中的数据对象,而无需手动类型转换并给内部变量赋值等操作。为此struts2专门设计了一个叫做ognl的表达式。通过它,用户提交的参数就能被自动解析为程序上下文中所存在的变量。
想想为什么能够自动解析?原因是用户提交的参数被当作自定义语言的代码被解析执行了!只是你并没有意识到这一点而已。于是有心人研究了一下,发现ognl表达式除了参数值注入,还能通过它直接调用Java自身的API。于是,一个巨大的通杀0day就这么诞生了。
回想一下,如果struts2没有这么“智能”的自动化、统一化用户输入处理机制,也就不会出现上述的大漏洞了。

前段时间爆出的Django的csrf token绕过漏洞也是在统一安全处理的设计上出的问题。深究一下,为什么会出现这样的绕过问题?原因就是,框架必须要对所有用户的提交在真正的应用执行前做统一的csrf防范,于是django框架产生的token是保存在cookie中的(老版本和sessionid有关,这个也是保存在cookie中)。对于用户提交的POST请求,表单中增加一项token,框架在获得token值后,与cookie中的正确token值比对,如果相等就通过。然而对于ajax的请求,框架设计者却想当然的认为只要判断X-Requested-With这个Ajax特有的HTTP头即可,根本无需运算比对token。所以,框架对于http头中包含有X-Requested-With域的请求放行。通常情况下,只有ajax的请求浏览器才会带上此自定义域,且浏览器一般无法自定义此字段。
结果被人发现可以利用flash+307跳转可以伪造自定义http头,结果就绕过了此防范,导致统一的csrf防护毫无作用。如果应用程序完全依靠框架的统一安全实现,就会受到安全漏洞的威胁。
其实Django也很无奈,在它的架构设计中,它通过这个自定义头判断ajax思路上也没有什么问题。可惜在目前连黄瓜都不可靠的年代,就没什么是可靠的了。

3、常见代码高度封装

代码的高度封装,对外只暴露几个接口,一行说明书。这必然造成一种现象:普通程序员就像是在搭建一个模型,只要按照说明书组建积木就可以了,不需要知晓其原理,不需要知道为什么要这样做。于是这时候就安全问题就产生了。

举一个同样在用户输入参数自动化处理方面的例子:在PHP的ZendFramework中,获取用户输入是调用getParam方法,而不是常见PHP程序中分开来的$_GET、$_POST等变量。那么,如果同时在GET、POST、COOKIE、HEADER中提交相同名字的参数,getParam到底获取的是哪一个的值?先后顺序是什么?如果前后可以覆盖,会不会影响到我们自定义的一些统一安全措施?这是一个值得检查的安全薄弱点。

再举一个struts2的例子:对于常见的文件上传场景,struts提供了一个FileUploadInterceptor拦截器,直接可以在应用逻辑运行前对用户上传文件进行检查。然而在笔者的代码审计经验中,常常发现程序员只对maximumSize(文件大小)和allowedTypes(文件mime-type)进行限制,却放过了最关键的allowedExtensions(扩展名)限制。为什么?笔者检查了一下官方文档,发现在struts2.2之前的文档,都没有给出allowExtensions的说明。或许struts开发者想当然的认为allowedTypes就可以限制上传文件的类型,殊不知只要伪造HTTP包中的mime-type字段,就可以直接上传任意文件。于是开发者也就依照官方的例子,只限制了allowdTypes,从而导致安全问题的产生。

高度代码封装的确解决了“重复造轮子”的问题,但是它解决不了程序员的安全意识和懒惰的习惯。或许它设计的很好,或许它实现的也很好,但是只要它组装的不好,就有可能造成问题。

4、脚手架功能

Django的脚手架功能是非常好用的。它默认自带了一些app,只要通过几个简单的命令或配置,就可以在不敲一句代码的情况下搭起一个普通网站的脚手架,自带了用户注册、登陆等系统,甚至还有一个默认的管理员后台。

然而正如上文所说,普通程序员并不了解框架真正做了些什么。他很有可能通过脚手架生成网站后,却直接忘却了程序自带的内容没有去除。当这样的网站上线后。我们发现他是Django所写,那我们就可以直接尝试在url后加入/admin/路径访问,直接猜解后台管理员密码。此外如果框架自带的默认后台出现安全漏洞,甚至可能直接绕过进入后台。

一旦使用框架默认的组件,就得考虑到框架所带来的默认功能的安全问题。其实这问题可以扩大,tomcat自带的后台、fck编辑器自带的上传组件,都可以说属于此类问题。

0×02转

框架的应用是软件开发的必然趋势,本文的目的也不在于抵制框架的使用。但对于框架应用后所带来的新安全问题,安全从业人员需要提高重视,紧跟技术发展,更新知识。对于此,我们能够做点什么?

1、 对于常见的应用场景,如文件操作、命令行操作、数据库操作、用户权限及认证等,我们需要了解框架的实现,给出相应的安全编码范例。

框架文档中给出的例子并不一定就是最好的。安全工作者必须对程序员进行安全意识的培训,让他知道如何利用框架的API去安全的组合出常用功能。

2、 对于应用漏洞挖掘,我们需要扩充字典。

框架的封装,可能引入更多的危险API或危险特性。在代码审计的过程中,需要将这些内容加入到危险词字典中。

3、 对于应用漏洞挖掘,由于框架结构所带入的新的安全薄弱点,需要专门对框架的设计及实现做检查,是否存在问题。

例如PHP框架中代码调度执行的实现、文件上传统一检查的实现、封装的变量获取形式是否可靠等。本文中提到的安全薄弱点只是一个例子,更多的还需要大家的共同挖掘。

0×03合

实际上对于一个应用的安全审计归根到底就是个思路问题。笔者一直认为,了解程序员的思路,了解框架的思路,了解应用的思路,这些才是安全审计中最花时间的。而实际上真枪实弹看代码的漏洞挖掘却只占用很小的一部分时间。
只有将这些思路融会贯通,在脑中将审计对象进行抽象建模,了解应用需要保护什么,弱点在哪里,才能更为有效和有针对性的进行代码审计、安全防护。
最后,非常感谢剑心及空虚浪子心之前的研究成果和意见,对本文的帮助极大

Comments (0)
本站内容均为原创,转载请务必保留署名与链接!
Web开发框架安全杂谈:http://www.80sec.com/security-about-framework.html
Web框架安全详解 在现代Web开发中,使用MVC架构是一种流行的做法。MVC是Model-View-Controller的缩写,它将Web应用分为三层,View层负责用户视图、页面展示等工作;Controller负责应用的逻辑实现,接收View层传入的用户请求,并转发给对应的Model做处理;Model层则负责实现模型,完成数据的处理。MVC框架示意图:从数据的流入来看,用户提交的数据先后流经了View层、Controller、Model层,数据的流出则反过来。在设计安全方案时,要牢牢把握住数据这个关键因素。 阅读详情

相关推荐

Web安全框架与标准

里面有OWASP中top10中A1-A10的详细解释 A1:注入攻击漏洞,如SQL、OS 、LDAP注入等,最常见的如SQL注入漏洞 攻击者将不可信的数据作为命令或者查询语句的一部分,被发送给解释器 攻击者发送的恶意数据可以欺骗解释器,以执行计划外的命令或者在未被授权时访问数据 举例:Discuz论坛存在SQL注入,导致国内很多论坛沦陷 以此类推,通过本文档你可以对web注入有一个概要了解,开了一个好头

Web开发框架安全杂谈(转载)

转自:http://www.80sec.com/security-about-framework.html Web开发框架安全杂谈 Write by admin in 未分类 at 2011-03-15 22:21:03 Web开发框架安全杂谈 EMail: wofeiwo#80sec.com Site: http://www.80sec.com Date: 2011-03-14...

justforme123的专栏 273

Delphi的Frame框架示例

在使用Delphi时,相信使用Frame框架的人不多,今天无意中发现了Frame框架的妙用,其功能之强大,特示例之

(2023版)零基础入门Web安全,收藏这一篇就够了

Web安全是指保护Web应用程序、Web服务器和Web浏览器免受各种网络攻击和恶意行为的方法和技术。随着越来越多的业务和活动转移到互联网上,Web安全成为越来越重要的问题。

m0_74914256的博客 3598

是德频谱分析仪相位噪声测量实战指南:从原理到精准操作

本文详细介绍了是德频谱分析仪在相位噪声测量中的实战操作指南,从基础概念到高级技巧全面解析。通过5G基站时钟测量等实际案例,展示如何利用是德N9030B等设备精准测量相位噪声,并分享设备预热、参数设置、环境干扰排除等关键操作要点,帮助工程师提升测量精度和效率。

jenkins8butler的博客 229

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 514

「第十二章」Web框架安全

「第三篇」服务器端应用安全 批注 [……] 表示他人、自己、网络批注 参考资料来源于 * 书中批注 * 优快云 * GitHub * Google * 维基百科 * YouTube * MDN Web Docs 由于编写过程中无法记录所有的URL 所以如需原文,请自行查询 {……} 重点内容 *……* 表示先前提到的内容,不赘述 「第三篇」服务器端应用安全 「0.6本书结构」 就常见的服务器端应用安全问题.

hacckjacking 755

MMSE (Minimum Mean Square Error)均衡原理讲解

MMSE是一种将接收数据的MSE(均方误差)最小化的模型。有了这句话,很多问题就会在你的脑海中蹦出来。 什么是均方误差?最小化MSE "的物理含义是什么? 等等。 让我们从一个我们现在已经非常熟悉的通道模型开始。(我希望你现在也熟悉下面的表达方式。) MMSE作为一种均衡器,是一种后处理算法,它可以帮助我们找出接收到的数据,使之尽可能地接近原始数据(传输数据)。简而言之,MMSE中最重要的步骤是找到一个如下图所示的矩阵G。如果我们假设没有噪声,这个[G]矩阵可以简单的作为信道矩阵(H^-1)的倒数。但

Celeste的博客 4万+

Web安全—Web框架组成和各部分作用(持续更新)

Web框架组成和各部分作用: 提要:了解Web框架的组成和作用有助于了解学习Web安全漏洞的原理和通信过程。 一:Web框架组成 1,显示层(浏览器,前端语言) 作用:解析前端语言显示和展示给用户想看到的内容。 2,业务逻辑层(后端脚本语言,操作系统,Web容器) 作用:逻辑,解析用户请求,加载并执行脚本语言。 3,数据访问层(数据库) **作用:**数据存储和执行SQL语句。 Web访问流程(使用靶场XSS-LABS举例): 第1步:Web浏览器输入目标网站的URL(请求URL中的文件level等),浏

weixin_44431280的博客 2501

《计算机网络》课程大作业- 《小区局域网的设计和规划》

8.1首先,在满足用户需求方面,通过详细的需求分析,充分考虑了居民和物业管理的不同业务需求。对于居民,无论是日常的高清视频播放、在线游戏、远程办公还是智能家居设备的连接,网络都能提供稳定的高速带宽支持。从有线网络的千兆以太网技术保障稳定的有线连接,到无线网络采用 Wi - Fi 6 技术确保无线覆盖区域的高速和低延迟,满足了居民多样化的娱乐和生活需求。对于物业管理,安防监控系统的实时数据传输、物业办公自动化系统的流畅运行以及社区信息的及时发布等业务,都有针对性的网络设计。

lisangsimida的博客 2598

面试中常考的数学题——截木棍、圆上取点、赛马、红蓝墨水,测试毒药、坐到正确座位问题

文章目录1.将一根木棒截成三段,问能够组成三角形的概率;2.在圆上任取三点,问能够组成锐角、直角、钝角三角形的概率;3.共有25匹马,找出最快的3匹,只有5个赛道,每次比赛只能得到5匹马的速度排序,最少需要多少次比赛;4 有两瓶红蓝墨水,体积一样,现在从红墨水中舀一勺加入蓝墨水中,搅拌均匀后,在从蓝墨水中舀一勺加到红墨水中,试问这两瓶墨水哪瓶纯度更高。 1.将一根木棒截成三段,问能够组成三角形的概率; 来源:https://blog.youkuaiyun.com/weixin_41245919/article/deta

weixin_41558411的博客 4904

[转]Web开发框架安全杂谈

原文地址:http://www.80sec.com/security-about-framework.html   Web开发框架安全杂谈 EMail: wofeiwo#80sec.com Site: http://www.80sec.com Date: 2011-03-14 From: http://www.80sec.com/ [ 目录 ] 0×00 起 0×01 承 ...

silentime的专栏 238

AI辅助专利撰写实战:用Codex 30分钟生成发明专利初稿

这次我们来看一个用 Codex 从零开始撰写发明专利的实战项目。对于技术研发人员、产品经理或初创团队来说,专利申请是保护创新成果、构建技术壁垒的关键一步。然而,撰写一份高质量的专利申请书,尤其是权利要求书和说明书,往往需要专业的法律和技术语言,耗时耗力。这个项目演示了如何利用 AI 工具 Codex,在短时间内生成一份结构完整、逻辑清晰、具备授权潜力的专利申请文件初稿。 整个过程的核心不是让 AI 完全替代专利代理人,而是将其作为强大的“技术翻译”和“内容生成”助手。它能将你的技术构思、流程图、核心算法或产

weixin_32181267的博客 414

WEB开发框架安全杂谈(转)

  0×00起   最近框架漏洞频发,struts任意代码执行、Django csrf token防御绕过、Cakephp代码执行等等各大语言编程框架都相继暴出高危漏洞,这说明对于编程框架的安全问题已经逐渐走入安全工作者的视线。 Web开发框架就相当于web应用程序的操作系统,他决定了一个应用程序的模型结构和编程风格。框架上出了漏洞,就如同当年一个rpc远程EXP就...

czw333的专栏 244

【ubuntu】【VirtualBox】VirtualBox无法加载USB移动设备的解决方法(支持U盘启动盘)

提示:测试可用。

联系方式:927632640 2440

Vue3 + 高德地图实现车辆电子围栏监控与报警

通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 1035

WEB后端架构的一些概念杂谈

后端框架就是值用于开发的服务器端应用程序的一些可重用的设计,通俗的来说,就是一个实现某种功能的半成品,提供一些常用的工具和基础通用化的组件。它主要就是负责为处理业务逻辑,数据储存,通信协议等功能提供基础的框架,实现交互功能。调用这些框架就可以实现一些常见的业务逻辑。这些框架大多是简单高效的,能极大地提高我们的开发效率。一个优秀的的框架,它相当于是一个模板代码库,很多基础性的功能,底层功能操作都已经帮我们实现了,我们只需要专心的实现所需要的业务逻辑就可以了。

2201_75839679的博客 1878

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python在Web安全中的应用:XSS与CSRF攻击防护

在Web开发领域,安全性始终是开发者必须面对的核心挑战。随着Python在Web开发中的广泛应用,其丰富的安全工具和框架为开发者提供了强大的防护手段。本文将聚焦XSS(跨站脚本攻击)与CSRF(跨站请求伪造)两种常见攻击,探讨如何利用Python技术栈构建安全防线。

鸽芷咕的博客 9090

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【送书福利-第九期】Web安全攻防从入门到精通

【送书福利-第九期】Web安全攻防从入门到精通

努力才是唯一的入场券。 7万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

杂谈——Web框架本质 Django

图解 1、用户发起Http Request后,首先Nginx服务器会收到,如果是静态请求,则本地处理 2、Nginx对外监听80端口,与uWSGI采用8000端口交互,uWSGI则调用django.wsgi文件启动Web应用 ...

My Blogs 554

web日志杂谈

管理界面对数据的增、改、查都非常重视,因为一个小改动都有可能对系统造成深远影响,所以需要审计日志,并且根据重要程度还需要落库。用户输入的参数未做任何验证直接写入日志文件,导致攻击者可以通过特殊字符(\r \n)在日志中注入新的日志条目,破坏系统日志的完整性。隐私数据包含了密码、token、秘钥、电话号码、手机号、邮箱等等,这些都是业务数据,IT运维时需要脱敏。每个xml节点的类都是可以自定义的,比如归档后的日志文件权限只能是440以下,log4j就又一个。的配置,而logback不支持这个属性,只能继承。

qq_28722667的博客 307

【Web 网络管理】网络杂谈(8)之基于 Web 的网络管理

基于 Web 的网络管理模式,WBM的介绍与标准,WBM的实现方式与关键技术,WBM的安全性考虑。深入了解WBM技术。

赏樱看雪撸代码 1210

CTF WEB WP杂谈

CTF web方向的一些汇总

yoke__的博客 805

Web开发性能杂谈

目标:开发高性能,可扩展的WEB应用。 1.WEB应用的分层a.前端b.后端 a.前端优化的重要性。分析工具GA和YSLOW1.一个request之前要做的优化。2.不要紧盯WEB后端优化。尽可能的访问服务器之前,消灭掉request. 前端优化的方法1.减少http请求。方法:合并图片:使用CSS或者HTML的MAP标签来定位。合并脚本和样式表:视情况而定。同一功能的耦合在一个脚本发布。如...

赵伊凡's Blog已搬家 http://irfen.me 141

Web3.modules全解析:掌控区块链开发利器,HTTP与HTTPS杂谈-HTTPS防御了什么。

Web3.modules是Web3.js库的核心组件之一,提供了与以太坊区块链交互的模块化接口。通过Web3.modules,开发者可以访问以太坊网络的各种功能,包括账户管理、智能合约交互、交易处理等。Web3.modules的模块化设计使其易于扩展和集成到不同应用中。Web3.modules支持自定义模块的扩展。');

2501_94113683的博客 337

续谈登录相关数据的安全加密策略——密码泄露事件杂谈之二

安天实验室 APM开发小组 (文:江海客 校对:Bughouse)   作为WEB应用密码存放示范程序的AntiyPassword Mixer开源发布之后,我们陆续收到微博私信、电子邮件等。令人觉得有些意外的是,希望我们评价其现有加密方式是否合理的网友,要比对APM本身设计提出意见的多。出现这种情况的原因很好理解——WEB应用的最大压力有时并不来自开发,而在于保证业务持续稳定运营和兼容发展。

江海客每月安全天下事 (全本) 7604
上一篇: onSaveInstanceState和onRestoreInstanceState的用处(转载)
baiming
博客等级 码龄25年 0粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值