版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、常见WEB开发安全漏洞原因分析及解决 TOC o 1-5 h z HYPERLINK l bookmark0 o Current Document 会话标识未更新 3 HYPERLINK l bookmark2 o Current Document 原因 3 HYPERLINK l bookmark4 o Current Document 解决 3 HYPERLINK l bookmark6 o Current Document SQL 注入 3 HYPERLINK l bookmark8 o Current Document 原因 3 HYPERLINK l bookmark10 o Cur
2、rent Document 解决 5 HYPERLINK l bookmark12 o Current Document XSS跨站脚本编制 5 HYPERLINK l bookmark14 o Current Document 原因 5 HYPERLINK l bookmark16 o Current Document 解决 5 HYPERLINK l bookmark18 o Current Document XSRF 跨站请求伪造 7 HYPERLINK l bookmark20 o Current Document 原因 7 HYPERLINK l bookmark22 o Curre
3、nt Document 解决 8 HYPERLINK l bookmark24 o Current Document 登录错误消息凭证枚举(不充分帐户封锁) 8 HYPERLINK l bookmark26 o Current Document 原因 8 HYPERLINK l bookmark28 o Current Document 解决 8 HYPERLINK l bookmark30 o Current Document HTML注释敏感信息泄露 9 HYPERLINK l bookmark32 o Current Document 原因 9 HYPERLINK l bookmark3
4、4 o Current Document 解决 9 HYPERLINK l bookmark36 o Current Document 应用程序错误 9 HYPERLINK l bookmark38 o Current Document 原因 9 HYPERLINK l bookmark40 o Current Document 解决 9 HYPERLINK l bookmark42 o Current Document 已解密的登录请求 9 HYPERLINK l bookmark44 o Current Document 原因 9 HYPERLINK l bookmark46 o Curr
5、ent Document 解决 9 HYPERLINK l bookmark50 o Current Document 启用了不安全的HTTP 方法 10 HYPERLINK l bookmark52 o Current Document 原因 10 HYPERLINK l bookmark54 o Current Document 解决 10 HYPERLINK l bookmark56 o Current Document 禁止页面缓存 11 HYPERLINK l bookmark58 o Current Document 原因 11 HYPERLINK l bookmark60 o C
6、urrent Document 解决 11 HYPERLINK l bookmark62 o Current Document 数据库错误模式 11 HYPERLINK l bookmark64 o Current Document 原因 11 HYPERLINK l bookmark66 o Current Document 解决 121会话标识未更新原因在用户进入登录页面,但还未登录时,就已经产生了一个session ,用户输入信息,登录以后,session的id不会改变,也就是说还是以前的那个 session (事实上session也确实不会改变,因为 没有建立新session ,原来的
7、session也没有被销毁)。很多人只是让会话invalidate 没有用(request.getSession().invalidate();),是因为invalidate 方法不是真正的将 session销毁,只是将session中的内容清空,所以当invalidate 以后 再新建session ,新建的session其实不是新的,是将之前的session重新启用了。于是session的id不变就不奇怪了。只有 cookie失效掉,才能换成新的session id解决在登录页面上加上一段代码:request.getSession().invalidate();清空 sessionif (
8、request.getCookies()!=null) Cookie cookie = request.getCookies()0;/ 获取 cookiecookie.setMaxAge(0);/ 让 cookie 过期注:会话失效后,请不要在代码前面使用SESSION保存数据。2 SQL注入原因.没有正确过滤转义字符在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句。这样就会导致应用程序的终端用户对数据库上的语句实施操纵。比方说,下面的这行代码就 会演示这种漏洞:statement := SELECT * FROM users WHERE name =
9、 + userName + ; |将用户名变量(即username)设置为:a or t=t,此时原始语句发生了变化.用户输入错误的数据类型如果一个用户提供的字段并非一个强类型,或者没有实施类型强制,就会发生这种形式的攻击。当在一个SQL句中使用一个数字字段时,如果程序员没有检查用户输入的合法性(是否为数字型)就会发生这种攻击。例如:statement := SELECT * FROM data WHERE id = + a_variable + ;从这个语句可以看出,作者希望a_variable是一个与“id”字段有关的数字。不过,如果终端用户选择一个字符串,就绕过了对转义字符的需要。例如,
10、将 a_variable设置为:1; DROP TABLE users ,它会将“ users”表从数据库中删除,SQ用句变成:SELECT * FROM DATA WHERE id = 1; DROP TABLE users;.数据库服务器中的漏洞有时,数据库服务器软件中也存在着漏洞,如MYSQL务器中mysql_real_escape_string() 函数漏洞。这种漏洞允许一个攻击者根据错误的统一字符编码执行一次成功的SQ注入式攻击。.盲目SQL注入式攻击当一个WebZ用程序易于遭受攻击而其结果对攻击者却不见时,就会发生所谓的盲目SQIM入式攻击。有漏洞的网页可能并不会显示数据,而是根据
11、注入到合法语句中的逻辑语句的结果显示不同 的内容。这种攻击相当耗时,因为必须为每一个获得的字节而精心构造一个新的语句。但是一旦漏 洞的位置和目标信息的位置被确立以后,一种称为Absinthe的工具就可以使这种攻击自动化。.条件响应注意,有一种SQ注入迫使数据库在一个普通的应用程序屏幕上计算一个逻辑语句的值:SELECT booktitle FROM booklist WHERE bookId = OOk14cd AND 1=1这会导致一个标准的面面,而语句SELECT booktitle FROM booklist WHERE bookId = OOk14cd AND 1=2在页面易于受到SQ
12、注入式攻击时,它有可能给出一个不同的结果。如此这般的一次注入将会 证明盲目的SQIM人是可能的,它会使攻击者根据另外一个表中的某字段内容设计可以评判真伪的 语句。.条件性差错如果WHERE句为真,这种类型的盲目 SQ注入会迫使数据库评判一个引起错误的语句,从而导 致一个SQL昔误。例如:SELECT 1/0 FROM users WHERE username=Ralph。显然,如果用户Ralph存在的话,被零除将导致错误。.时间延误时间延误是一种盲目的 SQ注入,根据所注入的逻辑,它可以导致SQ回擎执行一个长队列或者是一个时间延误语句。攻击者可以衡量页面加载的时间,从而决定所注入的语句是否为真
13、。解决.用预编译处理语言要防御SQIM入,用户的输入就绝对不能直接被嵌入到SQ用句中。恰恰相反,用户的输入必须进行过滤,或者使用参数化的语句。参数化的语句使用参数而不是将用户输入嵌入到语句中。在多 数情况中,SQ曲句就得以修正。然后,用户输入就被限于一个参数。下面是一个使用Java和JDBCAPI例子:PreparedStatement prep = conn.prepareStatement(SELECT * FROM USERS WHERE PASSWORD=?);prep.setString(1, pwd);总体上讲,有两种方法可以保证应用程序不易受到SQIM入的攻击,一是使用代码复查,
14、二是强迫使用参数化语句的。强迫使用参数化的语句意味着嵌入用户输入的SQL句在运行时将被拒绝。.轨范出错处理防范SQIM入,还要避免出现一些详细的错误消息,因为黑客们可以利用这些消息。要使用一 种标准的输入确认机制来验证所有的输入数据的长度、类型、语句、企业规则等。.使用专业的漏洞扫描工具但防御SQIM入攻击也是不够的。攻击者们目前正在自动搜索攻击目标并实施攻击。其技术甚 至可以轻易地被应用于其它的We理构中的漏洞。企业应当投资于一些专业的漏洞扫描工具,如大名鼎鼎的Acunetix的Web1洞扫描程序等。一个完善的漏洞扫描程序不同于网络扫描程序,它专门 查找网站上的SQIM入式漏洞。最新的漏洞扫
15、描程序可以查找最新发现的漏洞。3 XSS跨站脚本编制原因它指的是恶意攻击者往 We顷面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web(面的html代码会被执行,从而达到恶意用户的特殊目的。XSS!于被动式的攻击,因为其被动且不好利用,所以许多人常忽略其危害性。解决在防止这类问题时,输入内容的转义效果远比内容过滤要好。具体实施可以增加一个request的转码过滤器。代码:package com.apusic.portal.sso;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.Fi
16、lterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.*;import java.util.*;/* * Servlet Filter implementation class SqlEscapeFilter */ public class SqlEscapeFilter implement
17、s Filter /* Default constructor.*/public SqlEscapeFilter。/ TODO Auto-generated constructor stub /* see Filter#destroy()*/public void destroy() / TODO Auto-generated method stub /* see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletR
18、esponse response, FilterChain chain) throws IOException, ServletException / TODO Auto-generated method stub/ place your code hereHttpServletRequest hreq = (HttpServletRequest)request;Map map = hreq.getParameterMap();Iterator itr = map.keySet().iterator();while( itr.hasNext() String key = itr.next().
19、toString();String values = hreq.getParameterValues(key); if( values != null ) for( int i = 0; i values.length; i+ ) valuesi = cleanXSS(valuesi);hreq.setAttribute(key, values);/ pass the request along the filter chain chain.doFilter(request, response);/* see Filter#init(FilterConfig)*/public void ini
20、t(FilterConfig fConfig) throws ServletException / TODO Auto-generated method stubprivate String cleanXSS(String value)value = value.replaceAll(, & gt;);value = value.replaceAll(, & #40;).replaceAll(), );value = value.replaceAll(, & #39;);value = value.replaceAll(eval(.*), );value = value.replaceAll(
21、s*javascript:(.*), );value = value.replaceAll(script, );return value;配置应用中的web.xmlWeb.xml:SqlEscapeFilterSqlEscapeFiltercom.apusic.portal.sso.SqlEscapeFilterSqlEscapeFilter*.jspXSRF跨站请求伪造原因CSRFJ用方式比较类似 XSS(跨站脚本Cross Site Scripting), 不过不同的是CSR屋构造一个 提交来让其他人访问后,利用站点对这些人的信任来进行一些所期望的操作比如:A和好同一个有XSSf洞的站点C
22、,B登录过D占点,并且有这个 比占点的Cookies,这时候如果A勾造一个CSRF内容为给A在D占点的账户转移一些虚拟币,如果这时候在C站点浏览的B用户打开了 A勾造的含有CSR的页面,这时候B戊占点用户会因为对B用户的信任而进行给 A转账的操作解决此类攻击的情景相对的比较复杂,具体解决可以参考以下5点:第一:限制验证cookie的到期时间。这些 cookie的合法时间越短,黑客利用你的WebZ用程序的机会就越小。不过,这个时间越短,用户就越不方便。因此,你需要在安全性和方便性之间进行 平衡。第二:执行重要业务之前,要求用户提交额外的信息。要求用户在进行重要业务前输入口令,这可以防止黑客发动C
23、SR政击(只要浏览器中没有包含口令),因为这种重要信息无法预测或轻易获 得。第三: 使用秘密的无法预测的验证符号。当保存在用户浏览器中的cookie 仅由一次会话确认时,CSRFC击才会有效。所以在每次HTTP青求(当然攻击者无法提前知道 )中都有附加的特定会话的信息,这样就可以挫败 CSR政击。不过,如果这种应用程序存在跨站脚本漏洞,黑客就有可能访问这 种验证符号。第四:使用定制的HTTP艮头。如果执行交易白所有请求都使用 XMLHttpRequest并附加一个定制 的HTTH艮头,同时拒绝缺少定制报头的任何请求,就可以用XMLHttpRequest API来防御CSR政击。由于浏览器通常仅
24、准许站点将定制的 HTTP艮头发送给相同站点,从而了防止由 CSR政击的源站点所 发起的交易。第五:检查访问源的报头。在浏览者发送HTTP青求时,它通常会包含源自访问源报头的URL理论上讲,你可以使用这些信息来阻止源自其它任何站点(而不是来自We应用程序自身)的请求。综合公司以往平台报出此类漏洞产出的原因,基本上都可以通过以下简单做法加以解决:在请求后面加上一次性令牌。如验证码,手机短信验证,或者sessionID 等。登录错误消息凭证枚举(不充分帐户封锁)原因当试图利用不正确的凭证来登录时,当用户输入无效的用户名和无效的密码时,应用程序会分别生成不同的错误消息。通过利用该行为攻击者可以通过反
25、复试验,加暴力破解来发现应用程序的 有效用户名、再继续尝试发现相关联的密码。解决不论用户名或密码出现问题都提示同样的错误,且同时加上登陆失败次数达到规定次数,则执行帐户锁定功能。HTML注释敏感信息泄露原因页面源代码不正确的注释方式。解决将html中有关密码之类的敏感注释去掉或者用隐式注释。7应用程序错误原因未执行验证,可能输入参数数据类型不匹配。解决实行严格的数据类型验证。8已解密的登录请求原因AppScan的推理是AppScan识别了不是通过SSL发送的密码参数。解决第一:采用基于SSLHTTP核输协议第二:对敏感信息加密并绕过扫描(只要不是采用SS改全认证即使加密了但是AppScan是会
26、扫描出来)将type为password的改为text,然后用JS做一个假的密码输入框,AppScan叁扫描type为password的控件。function hiddenPass() varpass = document.getElementById(password1 );varj_pass = document.getElementById(password );if (event.keyCode=13) check();var keycode=event.keyCode;var keychar=String.fromCharCode(keycode); j_pass.value=j_pa
27、ss.value+keychar;j_pass.value=j_pass.value.substring(0,pass.length); 一一function clearPass() $( #password1 ).val( );$( #password ).val( );然后传输密码的时候加个密:password = base64encode(password);9启用了不安全的HTTP方法原因除标准的GETT POST法外,HTTP青求还使用其他各种方法。许多这类方法主要用于完成不常 见与特殊的任务。如果低权限用户可以访问这些方法,他们就能够以此向应用程序实施有效攻击。以下是一些值得注意的方法:PUT向指定的目录上传附加文件;DELETE删除指定的资源;COPY将指定的资源复制到 Destination 消息头指定的位置;MOVE将指定的资源移动到 Destination 消息头指定的位置;SEARC H在一个目录路径中搜索资源。PROPFIND获取与指定资源有关的信息,如作者、大小与内容类型。TRACE在响应中返回服务器收到的原始请求。可以使用这种方法避开阻止跨站点脚本的防御解决如何禁止DELET
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年特许经营合同标的及其属性
- 2024年人事代理聘用合同签订与履行标准流程2篇
- 2024年版权质押合同法律效力与操作流程
- 2024年某企业与广告公司就品牌宣传推广所签订的委托合同
- 2024年标准建筑工程费用协议样本版B版
- 2024版城市公寓租赁合同下载中心入口3篇
- 2024年武进区公共资源交易中心大数据分析合同
- 2024年度最高额反担保抵押合同中的设备抵押部分3篇
- 乡村旅游提质升级的综合策略与路径分析
- 2024年度交通事故人身损害赔偿调解服务合同3篇
- 《20211国标给排水专业图集资料》04S531-4 湿陷性黄土地区给水阀门井
- 文件传阅记录表
- 石材幕墙施工技术及工艺规范
- 碳酸丙烯脂吸收二氧化碳
- 高放废物深地质处置
- 关于《公交都市考核评价指标体系》的说明
- 机械零件测绘
- 护理质量持续改进记录.doc
- 中国诗词大会第一季全部诗词
- 第七章金融远期、期货和互换案例
- 最新安全日志范本
评论
0/150
提交评论