web开发安全技术培训教程_XXXX0809(共138张).pptx
《web开发安全技术培训教程_XXXX0809(共138张).pptx》由会员分享,可在线阅读,更多相关《web开发安全技术培训教程_XXXX0809(共138张).pptx(138页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Web开发安全技术开发安全技术培训教程培训教程 (20112011年年0707月)月)目录目录& 概述概述u 为什么要重视WEB安全技术u Web系统逐渐成为企业安全边界之一u Web应用攻击场景u WEB应用攻击动机u & WEBWEB代码常见的安全问题代码常见的安全问题& 程序安全开发流程程序安全开发流程& 程序开发安全具体措施程序开发安全具体措施& 平台部署与维护具体措施平台部署与维护具体措施为什么要重视为什么要重视WEBWEB的安全漏洞的安全漏洞 现在我们公司很多的平台(冲浪、企业商盟等平台)是依赖于互联网构建核心业务的,当前移动局方对网站的安全性要求提到空前的高度,网络部周期性的进行
2、安全扫描,并把扫出的漏洞纳入到考核扣分。而在现实世界中,针对网站的攻击愈演愈烈,频频得手。 “目前,75% 的攻击发生在WEB应用层” 国际权威机构 Gartner“2006年前9个月内新发现4,375 个漏洞. Web漏洞是其中最普遍的三类之一.” Mitre Corp, 09/2006,CVE的维护者“产品的定制开发是应用安全中最薄弱的一环”. GartnerWebWeb系统逐渐成为企业安全边界之一系统逐渐成为企业安全边界之一防火墙防火墙加固OSWeb服务器应用服务器数据库Web Services文件目录其它关联系统WEBWEB应用程序应用程序WEB应用层攻击仅仅使用网络层的防护手段仅仅使
3、用网络层的防护手段 ( (防火墙防火墙, SSL, IDS, IPS, SSL, IDS, IPS,加固加固) )无法阻止或无法阻止或检测到检测到WEBWEB应用层应用层攻击攻击网络层网络层应用层应用层应用层作为应用层作为安全边界安全边界的一部分的一部分,或许有巨大的漏洞,或许有巨大的漏洞防火墙IDS Intrusion Detection Systems,入侵检测系统 IPS Intrusion Prevention System , 入侵防御系统WebWeb应用攻击场景应用攻击场景攻击动机攻击方法攻击工具系统漏洞防范措施攻击面(attack surface)Web服务器黑客Web攻击动机攻
4、击动机n常见Web攻击动机 恶作剧; 关闭Web站点,拒绝正常服务; 篡改Web网页,损害企业名誉; 免费浏览收费内容; 盗窃用户隐私信息,例如Email; 以用户身份登录执行非法操作,从而获取暴利; 以此为跳板攻击企业内网其他系统; 网页挂木马,攻击访问网页的特定用户群; 仿冒系统发布方,诱骗用户执行危险操作,例如用木马替换正常下载文件,要求用户汇款等; WebWeb攻击方法攻击方法 收集系统相关的通用信息 将系统所有能访问页面,所有的资源,路径展现出来 URL、口令、数据库字段、文件名都可以暴力猜解,注意利用工具; 利用Web漏洞扫描器,可以尽快发现一些明显的问题 错误可能泄露服务器型号版
5、本、数据库型号、路径、代码; 搜索Google,CVE, BugTraq等漏洞库是否有相关的漏洞 服务器后台管理页面,路径是否可以列表等 是否可以上传恶意代码?是否可以任意下载系统文件? 检查所有可以输入的地方:URL、参数、Post、Cookie、Referer、 Agent、系统是否进行了严格的校验? HTTP协议是文本协议,可利用回车换行做边界干扰 用户输入是否可以影响服务器的执行? 需要特殊工具才能利用这些攻击点 复杂的业务逻辑中是否隐藏漏洞?n常见Web攻击方法 Google hack 网页爬行 暴力猜解 Web漏洞扫描 错误信息利用 根据服务器版本寻找现有的攻击代码 利用服务器配置
6、漏洞 文件上传下载 构造恶意输入(SQL注入攻击、命令注入攻击、跨站脚本攻击) HTTP协议攻击 拒绝服务攻击 其他攻击点利用(Web Services, Flash, Ajax, ActiveX, JavaApplet) 业务逻辑测试 访问资源名称GET与POST参数Referer与User AgentHTTP 方法CookieAjaxWeb ServiceFlash客户端Java AppletWeb攻击面:不仅仅是浏览器中可见的内容攻击面:不仅仅是浏览器中可见的内容直接可在浏览器直接可在浏览器中利用的输入中利用的输入所有输入点所有输入点更多输入点更多输入点黑客实际利用的黑客实际利用的输入点
7、输入点httphttp请求请求头域头域HTTP域变量的说明nHost头域Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。nReferer头域Referer 头域允许客户端指定请求uri的源资源地址,这可以允许服务器生成回退链表,可用来登陆、优化cache等。他也允许废除的或错误的连接由于维护的目的被 追踪。如果请求的uri没有自己的uri地址,Referer不能被发送。如果指定的是部分uri地址,则此地址应该是一个相对地址nRange头域Range头域可以请求实体的一个或者多个
8、子范围。例如,*表示头500个字节:bytes=0-499*表示第二个500字节:bytes=500-999*表示最后500个字节:bytes=-500*表示500字节以后的范围:bytes=500-*第一个和最后一个字节:bytes=0-0,-1 *同时指定几个范围:bytes=500-600,601-999但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200(OK)。nUser-Agent头域User-Agent头域的内容包含发出请求的用户信息。开发者的关注点开发者的关注点而而WebWeb系统的安全性参差不
9、齐系统的安全性参差不齐复杂应用系统代码量大、开发人员多、难免出现疏忽;复杂应用系统代码量大、开发人员多、难免出现疏忽;系统屡次升级、人员频繁变更,导致代码不一致;系统屡次升级、人员频繁变更,导致代码不一致;历史遗留系统、试运行系统等多个历史遗留系统、试运行系统等多个Web系统共同运行于同一台服务器上;系统共同运行于同一台服务器上;开发人员未经过安全编码培训;开发人员未经过安全编码培训;定制开发系统的测试程度不如标准的产品;定制开发系统的测试程度不如标准的产品;客户满意界面友好操作方便处理性能实现所有功能架构合理代码修改方便运行稳定没有bug不同模块低耦合相对安全性而言,相对安全性而言,开发人员
10、更注重开发人员更注重系统功能!系统功能!开发进度与成本WEB安全的漏洞报告平台和开源合作组织安全的漏洞报告平台和开源合作组织通过WooYun查询到的中国移动的安全漏洞情况如下图所示:WooYun(http:/www.wooyun.org/index.php)是一个位于厂商和安全研究者之间的漏洞报告平台, 你可以通过这个平台来接受大家报告漏洞也可以通过这个平台来报告漏洞WebScarab是OWASP组织推出的开源工具,可应用于一切基于HTTP协议系统的调试与攻击;WebWeb攻击漏洞:安全漏洞库攻击漏洞:安全漏洞库目录目录& 概述概述& WEBWEB代码常见的安全问题代码常见的安全问题u SQL
11、注入u 跨站脚本漏洞(XSS)u 跨站点请求伪造(CSRF)u 其他验证不充分的漏洞u 其他类型的问题(逻辑缺陷、错误处理不当)& 程序开发安全具体措施程序开发安全具体措施& 平台部署与维护具体措施平台部署与维护具体措施& 程序安全开发流程程序安全开发流程Web代码常见的安全问题有哪些(一)分类常见漏洞后果1.输入输出验证不充分SQLSQL注入注入如果Web应用没有对攻击者的输入进行适当的编码和过滤,就用于构造数据库查询时,可能导致注入漏洞。攻击者可利用注入漏洞诱使Web应用执行未预见的数据库查询(即SQL注入攻击)。命令注入命令注入与SQL注入类似,攻击者可利用注入漏洞诱使Web应用执行未预
12、见的命令(即命令注入攻击)或数据库查询(即SQL注入攻击)。跨站脚本漏洞跨站脚本漏洞(XSS) (XSS) 攻击者可利用XSS在其他用户的浏览器中运行恶意脚本,偷窃用户的会话,或是偷偷模拟用户执行非法的操作;跨站点请求伪造(跨站点请求伪造(CSRFCSRF)CSRF攻击即攻击者在用户未察觉的情况下,迫使用户的浏览器发起未预见的请求,其结果往往损害用户本身的利益。恶意代码执行恶意代码执行(文件包含漏洞(文件包含漏洞/ /文件上传验文件上传验证不充分)证不充分)如果Web应用允许用户上传文件,对上传文件名未作适当的过滤时,用户可能上载恶意的脚本文件(如ASP,PHP等);脚本文件在Include子
13、文件时,如果Include路径可以被用户输入影响,那么可能造成实际包含的是黑客指定的恶意代码;对象直接引用对象直接引用(文件下载验证不充分)(文件下载验证不充分)访问内部资源时,如果访问的路径(对文件而言是路径,对数据库而言是主键)可被攻击者篡改,而系统未作权限控制与检查的话,可能导致攻击者利用此访问其他未预见的资源;整数溢出整数溢出int变量计算越界,溢出了。JavaJava浮点数拒绝服务漏洞浮点数拒绝服务漏洞 float变量越界XPath XPath 注入攻击注入攻击一些人已经使用 XML 文档代替更传统的纯文本文件或关系数据库,但XML 应用程序容易受XPath 注入攻击Web代码常见的
14、安全问题有哪些(二)分类分类常见漏洞常见漏洞2.逻辑缺陷越权操作验证绕过程序流程失误变量注册顺序JS劫持随机数生成API调用缺陷3.容错处理不当泄露系统信息4.工作平台安全特性Apache文件名解析漏洞Nginx文件名解析漏洞Struts2框架任意代码执行FLASH安全策略输入输出验证原则n验证内容n验证所有来源的输入(get/post/cookie/server变量/配置文件)n验证所有输出到客户端的内容,输出数据HTML编码.n建立可信边界n验证方法n验证数据的长度、大小、格式、类型以及内容n使用服务器端代码做最终验证(注:客户端脚本可以被篡改,如果为了顾全体验,部分重要数据一定要用服务器
15、验证。)n不使用黑名单验证数据(最好采用白名单进行验证,类似防火墙的最小权限策略)n数据非法,程序停止执行,切勿试图修正数据。(可以避免二次攻击)目录目录& 概述概述& WEBWEB代码常见的安全问题代码常见的安全问题u SQL注入u 跨站脚本漏洞(XSS)u 跨站点请求伪造(CSRF)u 其他验证不充分的漏洞u 其他类型的问题(逻辑缺陷、错误处理不当)& 程序开发安全具体措施程序开发安全具体措施& 平台部署与维护具体措施平台部署与维护具体措施& 程序安全开发流程程序安全开发流程 SQL注入(SQL Injection)n定义:定义:由于程序中对用户输入检查不严格,用户可以提交一段数据库查询代
16、码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。n 原因分析原因分析其本质是对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。由于我们的部分WEB应用,采用Jsp+JavaBean或SSH框架,代码中会有直接写SQL(或HQL)语句,而有些SQL是用拼串实现的。n 风险风险SQL盲注:如果系统屏蔽了详细的错误信息,那么对攻击者而言就是盲注入,可能会查看、修改或删除数据库条目和表使用SQL注入的认证旁路:可能会绕开 Web 应用程序的认证机制SQL 注入:数字参数(一)/login.asp管理员管理员管理员管理员程
17、序员考虑的场景程序员考虑的场景: :Username: adminPassword: p$w0rdSELECT COUNT(*)FROM Users WHERE username=admin and password=p$w0rd登录成功!登录成功!程序员未预料到的结果程序员未预料到的结果Username: admin OR 1=1 -Password: 1SELECT COUNT(*)FROM UsersWHERE username=admin OR 1=1 - and password=1SQL 注入:数字参数(二)/login.jsp攻击者攻击者登录成功!登录成功!是SQL字符串变量的定
18、界符攻击关键攻击关键通过定界符成功地通过定界符成功地将攻击者的意图注将攻击者的意图注入到入到SQLSQL语句中!语句中!通过注释保证通过注释保证SQLSQL语语句正确!句正确!-是MS SQLMS SQL的注释符ORACLE:用户名字段中输入: or 1=1 or 1=1或是在密码字段中输入: 1 or 1=1SQL 注入:数字参数(三)管理员管理员程序员考虑的场景程序员考虑的场景: :age: 20SELECT name, age, locationFROM Users WHERE age20程序员未预料到的结果程序员未预料到的结果age: 1000000 union select name
19、, age, password from usersSELECT name, age, locationFROM Users WHERE age999 union select name, age, password from usersFactFact:大多数程序员都注意到了的问题,他们用来代替用户输入的,从而防止字符串SQL注入;但很多人缺忽略了同样严重的数字注入问题。其防范方法是检查用户输入的数字是否合法。Union暴库是常见的注入方法Union语法要求前后两句SQL中Select的数据项类型和数量一致;这两句sql都符合string,int,string的模式999是不可能符合的条件,
20、这样union的结果就只剩第二句sql查询的内容SQL注入:规避SQL注入n严格限定参数类型严格限定参数类型明确参数检验的边界,明确参数检验的边界,必须在服务端执行数据验证n采用参数化查询的方法(推荐)采用参数化查询的方法(推荐)n内置过滤系统(本质是黑名单,很常见但是不推荐)内置过滤系统(本质是黑名单,很常见但是不推荐)SQL注入:安全编码安全编码不难,真正困难的是如何做到全面安全,安全编码不难,真正困难的是如何做到全面安全,这需要良好的程序设计以及编码习惯。支离破碎这需要良好的程序设计以及编码习惯。支离破碎的设计与随意混杂的编码难以开发出安全的系统。的设计与随意混杂的编码难以开发出安全的系
21、统。各种语言与数据库的实际情况也有所区别,所以各种语言与数据库的实际情况也有所区别,所以需要具体问题具体分析。需要具体问题具体分析。1.输入验证输入验证数字型的输入必须是合法的数字;字符型的输入中对进行特殊处理;验证所有的输入点,包括Get,Post,Cookie以及其他HTTP头;2.使用符合规范的数据库访问语句使用符合规范的数据库访问语句正确使用静态查询语句,如PreparedStatementSQL注入: PreparedStatement在在JSPJSP中要禁止使用中要禁止使用StatementStatement,如下的代码会导致,如下的代码会导致SQLSQL注入:注入:BubbleS
22、tring sql = “select * from Users where name=” + name; PreparedStatement pstmt = con.prepare(sql);String sql = “select * from product where cat=? and price ?”PreparedStatement pstmt = con.prepare(sql);pstmt.setInt(1, request.getParameter(“cat”);pstmt.setString(2, request.getParameter(“price”);ResultS
23、et rs = pstmt.executeQuery(); Statement stmt = con.createStatement(); stmt.executeUpdate(select * from Users where name= + name); 应当全部使用PreparedStatement来防止SQL注入但是在使用PreparedStatement,也要注意符合编码规范,如下的方法也会导致SQL注入:安全安全危险危险危险危险SQL注入:数据库加固除了在代码设计开发阶段预防除了在代码设计开发阶段预防SQLSQL注入外,对数据库进行加固也能够注入外,对数据库进行加固也能够把攻击者所
24、能造成的损失控制在一定范围内;把攻击者所能造成的损失控制在一定范围内;主要包括:主要包括:n最小权限原则,最小权限原则,禁止将任何高权限帐户(例如禁止将任何高权限帐户(例如sasa,dbadba等等)用于应等等)用于应用程序数据库访问。更安全的方法是单独为应用创建有限访问帐户。用程序数据库访问。更安全的方法是单独为应用创建有限访问帐户。n拒绝用户访问敏感的系统存储过程,如前面示例的拒绝用户访问敏感的系统存储过程,如前面示例的xp_dirtree,xp_cmdshellxp_dirtree,xp_cmdshell等等;等等;n限制用户所能够访问的数据库表;限制用户所能够访问的数据库表;目录目录&
25、 概述概述& WEBWEB代码常见的安全问题代码常见的安全问题u SQL注入u 跨站脚本漏洞(XSS)u 跨站点请求伪造(CSRF)u 其他验证不充分的漏洞u 其他类型的问题(逻辑缺陷、错误处理不当)& 程序开发安全具体措施程序开发安全具体措施& 平台部署与维护具体措施平台部署与维护具体措施& 程序安全开发流程程序安全开发流程跨站脚本漏洞(XSS) n定义 它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。XSS属于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。n分类n持久型XSS(P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- web 开发 安全技术 培训 教程 _XXXX0809 138
限制150内