加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

“Web”开发中常见的安全缺陷 以及解决办法

发布时间:2019-06-24 15:41:39 所属栏目:编程 来源:蓝点
导读:> 提要: 一、不能盲目信托用户输入 二、五种常见的ASP.NET安详缺陷 2.1 改动参数 2.2 改动参数之二 2.3 信息走漏 2.4 SQL注入式进攻 2.5 跨站剧本执行 三、行使自动安详测试器材 正文: 担保应用措施的安详该当从编写第一行代码的时辰开始做起,缘故起因很简朴
>   提要:
  
  一、不能盲目信托用户输入
  
  二、五种常见的ASP.NET安详缺陷
  
  2.1 改动参数
  
  2.2 改动参数之二
  
  2.3 信息走漏
  
  2.4 SQL注入式进攻
  
  2.5 跨站剧本执行
  
  三、行使自动安详测试器材
  
  正文:
  
  担保应用措施的安详该当从编写第一行代码的时辰开始做起,缘故起因很简朴,跟着应用局限的成长,修补安详裂痕所需的价钱也随之快速增添。按照IBM的体系科学协会(Systems Sciences Institute)的研究,假如比及软件陈设之后再来修补缺陷,其价钱相等于开拓时代检测和消除缺陷的15倍。
  
  为了用最小的价钱保障应用措施的安详,在代码自己的安详性、抗御进攻的手段等方面,开拓者该当担负更多的责任。然而,要从开拓的最初阶段保障措施的安详性,必需具有响应的手艺和器材,而真正把握这些手艺和器材的开拓者并不是许多。固然学写安详的代码是一个伟大的进程,最亏得大学、内部培训会、行业集会会议上完成,但只要把握了下面五种常见的ASP.NET应用安详缺陷以及保举的批改方案,就可以或许领先一步,将不行或缺的安详身分融入到应用的出生之时。
  
  一、不能盲目信托用户输入
  
  在Web应用开拓中,开拓者最大的失误每每是无前提地信赖用户输入,假定用户(纵然是恶意用户)老是受到赏识器的限定,老是通过赏识器和处事器交互,从而打开了进攻Web应用的大门。现实上,黑客们进攻和操纵Web网站的器材许多,基础不必范围于赏识器,从最初级的字符模式的原始界面(譬喻telnet),到CGI剧本扫描器、Web署理、Web应用扫描器,恶意用户也许回收的进攻模式和本领许多。
  
  因此,只有精密地验证用户输入的正当性,才气有用地抵挡黑客的进攻。应用措施可以用多种要领(乃至是验证范畴重叠的要领)执行验证,譬喻,在承认用户输入之前执行验证,确保用户输入只包括正当的字符,并且全部输入域的内容长度都没有高出范畴(以防御也许呈现的缓冲区溢出进攻),在此基本上再执行其他验证,确保用户输入的数据不只正当,并且公道。须要时不只可以采纳逼迫性的长度限定计策,并且还可以对输入内容凭证明晰界说的特性集执行验证。下面几点提议将辅佐你正确验证用户输入数据:
  
  ⑴ 始终对全部的用户输入执行验证,且验证必需在一个靠得住的平台长举办,该当在应用的多个层长举办。
  
  ⑵ 除了输入、输出成果必须的数据之外,不要应承其他任何内容。
  
  ⑶ 设立“信赖代码基地”,应承数据进入信赖情形之前执行彻底的验证。
  
  ⑷ 登录数据之前先搜查数据范例。
  
  ⑸ 细致地界说每一种数据名目,譬喻缓冲区长度、整数类械寥。
  
  ⑹ 严酷界嗣魅正当的用户哀求,拒绝全部其他哀求。
  
  ⑺ 测试数据是否满意正当的前提,而不是测试不正当的前提。这是由于数据不正当的环境许多,难以细致罗列。
  
  二、五种常见的ASP.NET安详缺陷
  
  下面给出了五个例子,叙述怎样凭证上述提议加强应用措施的安详性。这些例子树模了代码中也许呈现的缺陷,以及它们带来的安详风险、怎样改写起码的代码来有用地低落进攻风险。
  
  2.1 改动参数
  
  ◎ 行使ASP.NET域验证器
  
  盲目信赖用户输入是保障Web应用安详的第一仇人。用户输入的首要来历是HTML表单中提交的参数,假如不能严酷地验证这些参数的正当性,就有也许危及处事器的安详。
  
  下面的C#代码查询后端SQL Server数据库,假设user和password变量的值直接取自用户输入:
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  
  从外貌上看,这几行代码毫无题目,现实上却也许引来SQL注入式进攻。进攻者只要在user输入域中输入“OR 1=1”,就可以顺遂登录体系,可能只要在查询之后加上恰当的挪用,就可以执行恣意Shell呼吁:
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  
  ■ 风险说明
  
  在编写这几行代码时,开拓者有时之中作出了这样的假定:用户的输入内容只包括“正常的”数据——合乎人们凡是风俗的用户名字、暗码,但不会包括引号之类的非凡字符,这正是SQL注入式进攻可以或许得逞的基础缘故起因。黑客们可以借助一些具有非凡寄义的字符改变查询的本意,进而挪用恣意函数或进程。
  
  ■ 办理方案
  
  域验证器是一种让ASP.NET开拓者对域的值实验限定的机制,譬喻,限定用户输入的域值必需匹配特定的表达式。
  
  要防备上述进攻举动得逞,第一种步伐是榨取引号之类的非凡字符输入,第二种步伐更严酷,即限制输入域的内容必需属于某个正当字符的荟萃,譬喻“[a-zA-Z0-9]*”。
  
  2.2 改动参数之二
  
  ◎ 停止验证操纵的裂痕
  
  然而,仅仅为每个输入域引入验证器还不能防御全部通过修改参数实验的进攻。在执行数值范畴搜查之时,还要指定正确的数据范例。
  
  也就是说,在行使ASP.NET的范畴搜查控件时,该当按照输入域要求的数据范例指定恰当的Type属性,由于Type的默认值是String。
 
   “Web”开拓中常见的安详缺陷 以及办理步伐
  
  ■ 风险说明
  
  因为没有指定Type属性值,上面的代码将假定输入值的范例是String,因此RangeValidator验证器只能确保字符串由0-9之间的字符开始,“0abcd”也会被承认。
  
  ■ 办理方案
  
  要确保输入值确实是整数,正确的步伐是将Type属性指定为Integer:
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  
  2.3 信息走漏
  
  ◎ 让潜匿域越发安详
  
  在ASP.NET应用中,险些全部HTML页面的__VIEWSTATE潜匿域中都可以找到有关应用的信息。因为_VIEWSTATE是BASE 64编码的,以是经常被忽略,但黑客可以利便地解码BASE 64数据,用不开花什么实力就可以获得__VIEWSTATE提供的具体资料。
  
  ■ 风险说明
  
  默认环境下,__VIEWSTATE数据将包括:
  
  ⑴ 来自页面控件的动态数据。
  
  ⑵ 开拓者在ViewState中显式生涯的数据。
  
  ⑶ 上述数据的暗码具名。
  
  ■ 办理方案
  
  配置EnableViewStatMAC="true",启用__VIEWSTATE数据加密成果。然后,将machineKey验证范例配置成3DES,要求ASP.NET用Triple DES对称加密算法加密ViewState数据。
  
  2.4 SQL注入式进攻
  
  ◎ 行使SQL参数API
  
  正如前文“改动参数”部门描写的,进攻者可以在输入域中插入非凡字符,改变SQL查询的本意,诱骗数据库处事器执行恶意的查询。
  
  ■ 风险说明
  
  恶意查询有也许获取后端数据库生涯的任何信息,譬喻客户名誉卡号码的清单。
  
  ■ 办理方案
  
  除了前面先容的步伐——用措施代码确保输入内容只包括有用字符,另一种越发结实的步伐是行使SQL参数API(譬喻ADO.NET提供的API),让编程情形的底层API(而不是措施员)来结构查询。
  
  行使这些API时,开拓者可能提供一个查询模板,可能提供一个存储进程,然后指定一系列的参数值,由底层API将参数值嵌入到查询模板,然后将结构出来的查询提交给处事器查询。这种步伐的甜头是确保参数可以或许正确地嵌入,譬喻,体系将对引号举办转义处理赏罚,从基础上杜绝SQL注入式进攻的产生。同时,在表单中引号还是一个应承输入的有用字符,这也是行使底层API的一个利益。
  
  凭证这种思绪修改前文“改动参数”部门的例子,功效如下:
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  2.5 跨站剧本执行
  
  ◎ 对外发的数据举办编码
  
  跨站剧本执行(Cross-site scripting)是指将恶意的用户输入嵌入到应答(HTML)页面。譬喻,下面的ASP.NET页面固然简朴,却包括着一个重大的安详缺陷:
  
 “Web”开拓中常见的安详缺陷 以及办理步伐
  
  ■ 风险说明
  
  进攻者可以用JavaScript代码结构一个恶意的查询,点击链接时JavaScript就会运行。举例来说,剧本可以通过下面的用户输入来嵌入:
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  
  ■ 办理方案
  
  在一个双层的安详系统中,对HTML页面中呈现的外发用户数据执行输入验证和HTML编码,确保赏识器只把用户输入数据当成纯粹的文本,而不是其他具有非凡寄义的内容,譬喻HTML代码、JavaScript剧本。
  
  对付本例,只要插手一个HtmlEncode挪用即可:
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  
  这样,应答HTML流将包括用户输入内容的HTML编码版本,也就是说,赏识器不会执行用户输入的JavaScript代码,由于基础不存在HTML的
  
  “Web”开拓中常见的安详缺陷 以及办理步伐
  
  标志,用户输入的“<”和“>”字符已经被替代成HTML编码版本,即“<”和“>”。
  
  三、行使自动安详测试器材
  
  因为客户需求不绝变革,一些单元均匀每三个月就要陈设新的应用,同时因为职员活动,以是对开拓者快速开拓结实的、高质量的代码寄予很高的祈望。固然对全部开拓者举办代码安详技能的培训黑白常须要的,但不行否定,自动检测代码安详裂痕的器材也有助于快速开拓安详的应用措施。
  
  到今朝为止,开拓者常用的器材只能涵盖成果测试的特定方面,譬喻机能测试,BUG/妨碍点侦查。人工搜查代码有着很多与生俱来的范围,并且要求开拓者具有富厚的代码安详履历,以是对付编写高质量的应用来说,面向应用措施安详及其在恶意情形下举动的器材也黑白常要害的。
  
  要敏捷进步应用的质量和安详性,最有用的步伐是给开拓者提供一个自动测试应用的器材。假如在单位测试时代,器材可以或许检测出应用的安详缺陷,并将修补提议嵌入到代码之中,开拓者就能当即找出代码中存在的错误,不只利便了现有错误的修改,并且也有助于停止未来再犯同样的错误,不绝地进步代码抗御进攻的手段。
  
  竣事语:Web处事应用正在爆炸式增添,越来越多的应用被推出到防火墙之外,安详性懦弱的Web应用面对的风险也只会有增无减。同时,为了在紧要的时限之前快速完成应用开拓,开拓者面对的压力也越来越大。注重编写代码时的安详题目,同时投入须要的资源,这样才气为将来的Web处事应用做好筹备,同时确保当前应用的高质量。只有从应用的出生之日开始就采纳正确的法子来确保其安详性,才气结构出高质量、安详的应用。
  
文章来历:赛迪网

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读