收藏本站|设为首页

您现在的位置: 首页 > 新闻中心 > 建站经验 > 详细内容

预防Web应用轨范的裂痕

2013-02-16 09:54 来源: 卓杰科技 www.zhuojie.cc [ ]

现在的Web应用轨范可能会包含危险的平安缺陷。这些应用轨范的全球化部署使其很轻易蒙受抨击袭击,这些抨击袭击会发现并恶意探测各类平安裂痕。

Web情形中两个首要的风险在于:注入——也就是SQL注入,它会让黑客更改发往数据库的发芽——以及跨站剧本抨击袭击(XSS),它们也是最危险的(Category:OWASP_Top_Ten_Project)。注入抨击袭击会操作有问题代码的应用轨范来插入和执行黑客指定的呼吁,年夜而能够访谒关头的数据和资本。当应用轨范将用户供给的数据不加磨练或编码就发送到浏览器上时,会发生XSS裂痕。

尽管2009年OWASP(Open Web Application Security Project)的一个陈述剖明平安方面的投资在增添(Category:OWASP_Security_Spending_Benchmarks),可是NTA Monitor的2010 Web应用平安报名剖明Web的平安性跟前一年对比现实不才降。现实上,Web应用的裂痕给公司和组织带来了良多的问题。按照WhiteHat Security最新的Web站点平安性数据陈述所示,被评估网站的63%是有裂痕的,每个平均有六个未解决的缺陷。(WhiteHat Website Security Statistics Report)。这些裂痕建树并维持了一个基于抨击袭击窃取数据和资本的地下经济链。

Web应用轨范需要有深度防御的法子来避免和削减平安性裂痕。1这种体例假设所有的平安预防法子都可能失踪败,所以平安性依靠于专制的机制年夜而能够笼盖其他层的失踪败。为了削减成功抨击袭击的可能性,软件工程师团队必需做出需要的全力来惹人恰当的平安性防护法子。要达到这一点必需使用各类手艺和工具来确保平安性涵盖软件产物开发生命周期的所有阶段。

软件开发生命周期中的平安性

尽管软件开发的生命周期有多种分歧的划分体例,但正如图1所示,它凡是包含如下的阶段:初始化、规范和设计、实现(编码)、测试、部署以及停用,这些阶段应用开发人员可以不竭地一再迭代。2

尽管开发人员应该在产物的整个生命周期中都关心代码平安性,3可是他们应该出格关注三个关头阶段:1

实现。在编码过程中,软件开发人员必需使用特定应用规模内避免关头裂痕的最佳实践。这种实践的例子搜罗输入和输出校验、识别恶意字符以及使用参数化的呼吁。4 尽管这些手艺在避免年夜年夜都平安裂痕方面很有用,但因为缺乏平安相关的常识,开发人员凡是并不使用它们或者使用得不正冉怪诉栏“为什么开发人员不使用平安编码实践?”更具体地谈判了这个问题。

测试。有良多手艺可以在测试阶段使用,搜罗渗入测试(今朝最风行的手艺)、静态剖析、动态剖析以及运行时的异常检测。4 问题在于开发人员凡是会关注需求功能的测试而忽略平安方面。此外,现有的自动化工具要么在裂痕探测笼盖度方面斗劲差要么发生太多的误报。

部署。在运行时情形中,会有分歧的抨击袭击探测机制。这些机制可以按照分歧的级别运行并使用分歧的探测体例。它们的使用障碍在于机能开销以及禁绝确的结不美观会打乱系统的正常行为。

预防Web应用轨范的裂痕

开发平安的代码

为了编写没有裂痕的平安代码,4 基于Web基本行动措施的关头营业开发人员就要遵循编码实践,这个实践搜罗了深度防御的法子,它假设所有的平安性预防法子城市失踪败。在实现阶段依靠专制的平安机制是出格主要的,使用一个预防或呵护法子来避免平安裂痕是不够的。

Web应用轨范的特征在于需要三层分歧的平安防线:输入校验、热点呵护以及输出校验。

输入校验

年夜年夜都的平安裂痕是因为方针应用轨范没有正确地校验输入数据。1所以,应用轨范要考虑到所有恶意的输入直到能证实其正当,这要涵盖不成信情形中的所稀有据。

输入校验是第一道防线,总体来讲就是缩小应用轨范许可输入典型围,它会直接浸染在用户供给的数据上。这种类型的防御要依靠输入参数在一个正当典型围内,或者如不美观用户供给了超出了规模的值就会遏制执行。在Web应用轨范中,这首先要尺度化输入将其转换到基线字符集和编码。接下来,应用轨范必需对尺度化的输入使用过滤策略,拒绝那些质ё仝合律例模之外的输入。这种体例能够避免良多Web应用轨范中的问题,在执行输入校验时会使用正向模式匹配或正向校验。在这种情形下,开发人员成立轨则来识别那些可接管的输入而不是识别有什么输入是不成接管的。尽管开发人员不能展望所有类型的抨击袭击,但他们应该能够声名所有类型的正当输入。

关头问题在于,输入校验凡是使用地并不充实,这是因为输入参数的数据域许可存在恶意数据,这是与校验执行相自力的。例如,在SQL注入裂痕中,年夜年夜都的SQL语句使用引号作为字符串分隔符,这就意味着黑客可以使用它来执行SQL注入抨击袭击。4可是,在有些情形下,字符串输入域必需许可存在引号值,所以应用轨范不能解除所有包含引号的值。

热点防护

为了应对输入校验的局限性,有需要采用第二道防线

任何类型的抨击袭击都是以热点为方针的,热点指的就是应用轨范中可能会有某种类型裂痕的代码。通用的输入校验会在应用轨范中进行或者在整个Web应用轨范上下文中改削输入,与之对比,第二道防线关注于呵护主要的热点,例如呵护那些真正使用输入域值的代码行。

一个具体的例子就是SQL注入抨击袭击,它们年夜年夜都邑使用单引号或双引号。有些编程说话供给了对这些字符的转码机制,这样它们就能用在SQL语句中了,可是只能用来在语句平分隔值。4可是这些手艺有两个问题。第一,更高级的注入手艺,例如连系使用引号和转义字符,可以绕过这些机制。第二,惹人转义字符会增添字符串的长度,如不美观结不美观字符串的长度跨越数据库限制的话,可能会导致数据截断。

正确使用参数化呼吁是预防注入抨击袭击最有用的体例。1在这种情形下,开发人员界说呼吁的结构,并使用占位符来代表呼吁的变量值。稍后,当应用轨范将对应的值联系关系到呼吁上时,呼吁诠释器会正确地使用它们而不会涉及到呼吁的结构。

这种手艺最闻名的用法是数据库的预措置语句,也被称为参数化发芽。4 当应用轨范建树预措置语句时,语句发送到了数据库端。应用轨范使用占位符来暗示发芽的可变部门,占位符凡是会是问号或标签。随后,每次发芽执行时,应用轨范都要往对应的可变部门绑定值。不管数据的内容是什么,应用轨范会一向使用这个表达式作为一个值而并没有SQL代码。是以,不成能改削发芽的结构。

为了确保正确使用数据,良多说话许可类型绑定。可是预措置语句自己并不能修复不平安的语句——开发人员必需正确地使用它们。例如,像传统语句一样使用预措置语句——也就是使用字符串拼接来绑定SQL发芽——而不是对发芽的可变部门使用占位符会导致近似的裂痕。

输出校验

在将一个历程的输出发送之前进行校验能够避免用户收到他们不应该看到的信息,例如应用轨范内部的异常细节,这些信罕有助于倡议其他的抨击袭击。在输出校验的另一个例子傍边,呵护系统会搜索应用轨范输出的关头信息,如信用卡号,并在发送给前端之前用星号庖代。将信息编码是能够避免XSS裂痕的一种输出校验体例。4如不美观发送给浏览器的数据要显示在Web页面上,它应该进行HTML编码或百分号编码,这取决于它在页面的位置。经由过程这种体例,XSS所用的恶意字符不再具有破损性,而且编码会保留数据的原本意义。

探测裂痕

识别平安的问题要求不仅测试应用轨范的功能还要寻找代码中可能被黑客操作的潜匿的危险缺陷。5探测裂痕的两个首要体例是白盒剖析和黑盒测试。

白盒剖析

白盒剖析需要在不执行的情形下搜检代码。开发人员可以按照以下两种体例中的某一种来进行:在代码的审查或评审时以手动体例进行或者借助自动剖析工具自动化进行。

代码审成就Code inspection)指的是轨范员的火伴系统搜检交付的代码,查找编码错误。6平安审查是削减应用轨范中裂痕最有用的体例;当为关头的系统开发软件时,这是主要的过程。可是,这种审查体例凡是是很费时刻的、价钱昂贵并需要深切体味Web的平安常识。

代码搜检(Code review)是价钱稍为低廉的替代方案,6它是一种简化版本的代码审查合用于剖析不像前面那么主要的代码。搜检也是手动进行的,可是它不需要正式的审查会议。几个专家分袂进行搜检,然后由主收支过滤和合并结不美观。尽管这是一个有用的体例,但代码搜检的成本依旧是很高的。

为了削减白盒法剖析的成本,开发人员有时依靠自动化工具,如静态代码剖析器。静态代码剖析工具会搜检软件代码,要么是源码名目要么是二进制名目,考试考试图识别出常见的编码级别缺陷。4 使用现有工具所执行的剖析会因为它们的复杂性而有所分歧,这种差异表此刻考虑单条语句和呼吁或考虑代码行之间的依靠。除了模子搜检和数据流剖析等功能之外,这些工具还会自动关注可能的编码错误。它的首要问题在于详尽的剖析是很坚苦而且因为源码的复杂性和缺乏动态(运行时)的视角有良多平安缺陷很难被发现。

尽管使用静态代码剖析工具很主要,可是它有时会降低开发人员的出产效率,这主若是因为误报,这会导致没有用处的额外工作。7为了避免这种情形,除了要有足够的侍旧锁修若何使用这些工具以外,开发人员需要一些策略来保证正确使用这些工具。例如,有需要指定例则来分类和选择开发人员应该措置的警告信息。同时,开发人员还要设置装备摆设剖析工具只陈述那些与当前开发上下文相关的警告。没有接管若何使用静态剖析练习的开发人员最终会低估它的真正效益而且凡是不能阐扬它的所有功能。

黑盒测试

黑盒测试指的是年夜外部的视角剖析轨范的执行。简而言之,它会斗劲软件执行的输出与期望的结不美观。5 对于软件的磨练和确认来说,测试可能是最常用的手艺了。

对于黑盒测试来讲,有多种级别,年夜单元测试到集成测试再到系统测试。测试体例可所以正式的(基于模子和界说精采的测试规范)也可以不那么正式(被称为“冒烟测试”,一种粗拙的测试目的是快速吐露简单的缺陷)。

健壮性是黑盒测试一种非凡形式,它的方针是查看系统在错误输入前提下的行为。渗入测试是非凡类型的健壮性测试,它会剖析在碰着恶意输入时的代码执行并查找潜在的裂痕。在这种体例中,测试人员使用恍惚手艺,这包含经由过程HTTP请求,提交意料之外的或犯警的数据项到Web应用轨范上并搜检它的响应。4测试人员不需要体味实现细节——他们在用户的角度来测试应用轨范的输入。对于每种裂痕类型,可能会有上百次甚至上千次的测试。

渗入测试工具会自动搜索裂痕,这避免了手工为每种类型的裂痕构建上百个甚至上千个测试所带来的一再和乏味的工作。Web应用的常见自动化平安测试工具一般会称为Web应用或Web平安扫描器。这些扫描器可以很轻易地测试应用轨范以发现裂痕。对于方针应用,它们会有一些预界说的测试用例,所以用户只需要设置装备摆设一下扫描器并让它测试应用即可。一旦扫描器完成测试,它会陈述所探测到的裂痕。年夜年夜都的扫描器都是商业产物,尽管也有免费的应用轨范扫描器,可是与商用版本对比,它们贫窭年夜年夜都的功能所以用的很有限。

注:相关网站培植技巧阅读请移步到建站教程频道。

本页关键词:

上一篇:合理使用搜索引擎更主要 下一篇:蘑菇街分享平台