J2EE安全开发

上传人:博****1 文档编号:567690386 上传时间:2024-07-22 格式:PPT 页数:92 大小:3.57MB
返回 下载 相关 举报
J2EE安全开发_第1页
第1页 / 共92页
J2EE安全开发_第2页
第2页 / 共92页
J2EE安全开发_第3页
第3页 / 共92页
J2EE安全开发_第4页
第4页 / 共92页
J2EE安全开发_第5页
第5页 / 共92页
点击查看更多>>
资源描述

《J2EE安全开发》由会员分享,可在线阅读,更多相关《J2EE安全开发(92页珍藏版)》请在金锄头文库上搜索。

1、WEB应用安全和数据库安全的领航者J2EE 杭州安恒信息技术杭州安恒信息技术WEB应用安全和数据库安全的领航者Java代码编码安全代码框架安全2WEB应用安全和数据库安全的领航者一、开发中常见漏洞介绍及示例说明和可参考的解决方法:一、开发中常见漏洞介绍及示例说明和可参考的解决方法:Web通用:通用:XSS、CSRF、SQL注入、文件上传等注入、文件上传等J2EE特点所致特点所致:组件信息泄露、安全目录绕过等组件信息泄露、安全目录绕过等WEB应用安全和数据库安全的领航者Web通用通用-XSS描述:描述:攻击者对应用的页面注入恶意脚本(通常是指攻击者对应用的页面注入恶意脚本(通常是指html脚本)

2、,然后在页面执行这脚本),然后在页面执行这个恶意脚本,到达攻击目的。个恶意脚本,到达攻击目的。通常类型:反射型、存储型两大类(还有些如:所谓的通常类型:反射型、存储型两大类(还有些如:所谓的DOM型等)型等)4WEB应用安全和数据库安全的领航者示例:示例:一个用户输入并在页面输出的简单功能在一个用户输入并在页面输出的简单功能在jsp里的实现(里的实现(servelt或框架实或框架实现同理),现同理),Nebula.jsp伪代码:伪代码:demoWEB应用安全和数据库安全的领航者注入的注入的Javascript脚本被解析执行,形成一个反射型脚本被解析执行,形成一个反射型XSS:WEB应用安全和数

3、据库安全的领航者危害:危害:对于一般应用,用户对于一般应用,用户cookie盗取(普通用户及管理员登录盗取(普通用户及管理员登录cookie)非)非法登录应用。法登录应用。WEB应用安全和数据库安全的领航者WEB应用安全和数据库安全的领航者例如:tomcat与浏览器身份验证的sessionid是已cookie的形式存储浏览器客户端WEB应用安全和数据库安全的领航者对于大量用户交互的大型应用(如:对于大量用户交互的大型应用(如:SNS站点),可形成蠕虫,严站点),可形成蠕虫,严重影响业务,如重影响业务,如:1、历史第一个历史第一个XSS蠕虫是针对网站蠕虫是针对网站MySpace的的Samy(20

4、小时内感染了小时内感染了100万个账户万个账户)2、Sina微博微博XSS蠕虫攻击事件的蠕虫攻击事件的HelloSamy(16分钟受影响用户就达到将近分钟受影响用户就达到将近33000个个)WEB应用安全和数据库安全的领航者Java开发中,可参考的解决方法示例:开发中,可参考的解决方法示例:针对针对“输入输入”与与“输出输出”方式,如方式,如输入:输入:Stringinput=request.getParameter(“input”);输出:输出:out.print(我的输入:我的输入:+input);对对Input参数的参数的Html标签进行转义标签进行转义一般的业务逻辑代码流程:输入一般的

5、业务逻辑代码流程:输入数据存储(如:存入数据存储(如:存入DB)输出输出存储型存储型XSS,如:存入,如:存入DB,同一应用一般情况,危害性存储型大于反射型同一应用一般情况,危害性存储型大于反射型XSS.特点:隐蔽性强,数据的流向不确定(如:数据可能被其他应用调用)等特点:隐蔽性强,数据的流向不确定(如:数据可能被其他应用调用)等WEB应用安全和数据库安全的领航者一般选择一般选择“输入输入”处理方式,伪代码:处理方式,伪代码:输入:输入:Stringinput=request.getParameter(“input”);/对对html标签转义的逻辑代码标签转义的逻辑代码/其他业务逻辑(如:数据

6、存储)其他业务逻辑(如:数据存储)输出:输出:out.print(我的输入:我的输入:+input);WEB应用安全和数据库安全的领航者参数值转义参数值转义html标签的伪代码示例:标签的伪代码示例:publicstaticStringfilter(Stringstr)if(str=null)return(null);charcontent=newcharstr.length();str.getChars(0,str.length(),content,0);StringBuilderresult=newStringBuilder(content.length+50);for(inti=0;ic

7、ontent.length;i+)switch(contenti)case:result.append(>);break;case&:result.append(&);break;case:result.append(");break;default:result.append(contenti);return(result.toString();WEB应用安全和数据库安全的领航者14WEB应用安全和数据库安全的领航者但可能有些标签在实际开发需要显示输出(如:但可能有些标签在实际开发需要显示输出(如:标签),影响到正常业务。就可以标签),影响到正常业务。就可以使用使用H

8、TTPOnly方式防御,方式防御,jsp显示模版示例伪代码:显示模版示例伪代码:response.setHeader(“Set-Cookie”,“cookiename=value;Path=/;Domain=domainvalue;Max-、Age=seconds;HTTPOnly);设置设置HTTPOnly后,后,js域就无法获取域就无法获取cookie了,缓解危害!了,缓解危害!WEB应用安全和数据库安全的领航者16WEB应用安全和数据库安全的领航者17WEB应用安全和数据库安全的领航者建议:建议:对于对于java开发者,在开发者,在java代码层面防御基本够了。代码层面防御基本够了。如果

9、想要更深层次的防御,就要做应用整体的安全如果想要更深层次的防御,就要做应用整体的安全架构或者使用防护系统,那不是架构或者使用防护系统,那不是java开发者该考虑的问题!开发者该考虑的问题!18WEB应用安全和数据库安全的领航者Web通用通用-CSRF跨站请求伪造,意思就是迫使被攻者的浏览器向一个容易攻击的跨站请求伪造,意思就是迫使被攻者的浏览器向一个容易攻击的Web应用发送请求应用发送请求,最后达到攻击者所需要的操作行为(劫持用户操作)。最后达到攻击者所需要的操作行为(劫持用户操作)。19WEB应用安全和数据库安全的领航者示例:某个添加管理员的功能示例:某个添加管理员的功能20WEB应用安全和

10、数据库安全的领航者只要管理员访问下面的只要管理员访问下面的url,就可以创建一个管理员,就可以创建一个管理员:http:/localhost:8080/CSRF/user.ah?logo=create&user_name=csrf&passWord=csrf&age=12&birthday=1970-01-01¬e=test攻击者:想办法让管理员访问这个地址攻击者:想办法让管理员访问这个地址例如,使用例如,使用htmlimg标签在管理员经常访问的网站页面嵌入下面的攻击代码:标签在管理员经常访问的网站页面嵌入下面的攻击代码:WEB应用安全和数据库安全的领航者22WEB应用安全和数据库安全的

11、领航者23WEB应用安全和数据库安全的领航者24WEB应用安全和数据库安全的领航者实现攻击有两个基本条件:实现攻击有两个基本条件:1、攻击者必须非常熟悉被攻击的应用、攻击者必须非常熟悉被攻击的应用2、被攻击应用的用户必须是登录状态(实际中,重要功能操作权限、被攻击应用的用户必须是登录状态(实际中,重要功能操作权限须有登录状态)须有登录状态)危害:危害:实际危害决定于实际危害决定于CSRF对应用中功能操作后对业务的影响。通对应用中功能操作后对业务的影响。通常情况常情况CSRF结合结合XSS同时使用,才会产生更大的危害(例如:同时使用,才会产生更大的危害(例如:XSS蠕虫)。蠕虫)。25WEB应用

12、安全和数据库安全的领航者Java开发中,可参考的解决方法示例:开发中,可参考的解决方法示例:通常是使用通常是使用referer或或token验证访问来路的正确性。验证访问来路的正确性。个人觉得个人觉得referer是是web服务服务器层面上的部署防御,应用代码层面应该使用器层面上的部署防御,应用代码层面应该使用token。token防御原理示例:防御原理示例:访问到添加管理员用户的页前访问到添加管理员用户的页前(http:/localhost:8080/CSRF/user.ah?logo=add),添加一个),添加一个session值,值,(它是一个不可预测的字符串(例如:随机生成的(它是一个

13、不可预测的字符串(例如:随机生成的hash值:值:9be5a474bec04c4db756db82c98af24a)伪代码示例:)伪代码示例:26WEB应用安全和数据库安全的领航者在添加页面保存这个在添加页面保存这个token值(如:值(如:hidden类型的类型的input标签),伪代码:标签),伪代码:WEB应用安全和数据库安全的领航者验证失败,进入其他逻辑处理(例如:跳转验证失败,进入其他逻辑处理(例如:跳转CSRF攻击提示),伪代码:攻击提示),伪代码:WEB应用安全和数据库安全的领航者正常操作:正常操作:WEB应用安全和数据库安全的领航者CSRF:WEB应用安全和数据库安全的领航者如

14、果想全局防御,我们也可以在如果想全局防御,我们也可以在Filter(过滤器)实现这个功能。一些(过滤器)实现这个功能。一些MVC模式的框模式的框架已经实现这种安全功能,例如架已经实现这种安全功能,例如Struts2(其实是防止重复提交的一个机制)(其实是防止重复提交的一个机制),配置及,配置及伪代码示例伪代码示例:struts.xml/csrf.jsp/success.jsp管理员创建页面配置(添加管理员创建页面配置(添加strust2的的token标签):标签):WEB应用安全和数据库安全的领航者页面会生成页面会生成一个一个token值,并保存到值,并保存到session中,伪代码:中,伪代

15、码:.提交后,配置的提交后,配置的tokeninterceptor(拦截器),获取这个(拦截器),获取这个struts.token名,名,到到session中去找这个值并验证,实现与上文中原理是一样的!中去找这个值并验证,实现与上文中原理是一样的!WEB应用安全和数据库安全的领航者当然,当然,struts2有些低版本存在这个机制安全绕过的情况:有些低版本存在这个机制安全绕过的情况:http:/struts.apache.org/release/2.3.x/docs/s2-010.htmlstruts.token.name的值会作为的值会作为key到到session中找这个中找这个key对应值,

16、这在与页面提交对应值,这在与页面提交struts.token值进行对比。绕过的原因是因为值进行对比。绕过的原因是因为struts.token.name是可以在外部被控制,是可以在外部被控制,而实际开发中我们会大量使用而实际开发中我们会大量使用session存储数据,且存储数据,且key有时是可预的,伪代码例如:有时是可预的,伪代码例如:WEB应用安全和数据库安全的领航者建议:建议:如果不想全局防御所有功能请求。或者一般应用,对业务功能的如果不想全局防御所有功能请求。或者一般应用,对业务功能的重要操作进行防御基本够了,如对数据的操作,我们只要考虑这些重要操作进行防御基本够了,如对数据的操作,我们

17、只要考虑这些操作:操作:C(增加)(增加)U(修改)(修改)D(删除)(删除)WEB应用安全和数据库安全的领航者Web通用通用SQL注射注射从外部参数输入可以控制执行从外部参数输入可以控制执行sql语句的结构(开发人员语句的结构(开发人员sql语句参数使语句参数使用了拼接方式)。用了拼接方式)。MySqlJDBC简单示例:简单示例:WEB应用安全和数据库安全的领航者http:/localhost:8080/demo/mysql.jsp?id=1使用使用单引号让程序报单引号让程序报sql异常,说明外部传入的参数可以直接控制异常,说明外部传入的参数可以直接控制sql语句的结构:语句的结构:WEB应

18、用安全和数据库安全的领航者http:/localhost:8080/demo/mysql.jsp?id=-1%20%20union%20select%201,2,current_user%28%29构造构造sql语句获取数据库信息,如:读取数据库当前用户信息:语句获取数据库信息,如:读取数据库当前用户信息:WEB应用安全和数据库安全的领航者读取其他表的数据:读取其他表的数据:WEB应用安全和数据库安全的领航者http:/localhost:8080/demo/mysql.jsp?id=-1%20%20union%20select%201,2,%20%28select%20load_file%2

19、8%22c:/BOOT.INI%22%29%29根据权限读取系统文件根据权限读取系统文件WEB应用安全和数据库安全的领航者http:/localhost:8080/demo/mysql.jsp?id=1unionselect1,2,webshellintooutfilec:/1.jsp写入文件,例如:写入一个写入文件,例如:写入一个webshell危害:危害:除了数据被窃取外。根据当前权限及不同的数据库类型,还可以读、除了数据被窃取外。根据当前权限及不同的数据库类型,还可以读、写文件,执行系统命令或权限提升。在安全角度,特别是写文件,执行系统命令或权限提升。在安全角度,特别是web安全,安全,

20、安全是以数据为中心的,所以安全是以数据为中心的,所以sql注入漏洞是最接近数据的一个典型注入漏洞是最接近数据的一个典型漏洞。漏洞。WEB应用安全和数据库安全的领航者Java开发中,可参考的解决方法示例:使用预编译占位符方式开发中,可参考的解决方法示例:使用预编译占位符方式WEB应用安全和数据库安全的领航者多条件查询,可以使用占位符拼接方式,伪代码如:多条件查询,可以使用占位符拼接方式,伪代码如:Stringsql=“select*fromnewswhere1=1”;if(“关键字查询匹配关键字查询匹配key1”)sql.append(andkey1=?);elseif(“关键字查询匹配关键字查

21、询匹配key2”)sql.append(andkey2=?);.WEB应用安全和数据库安全的领航者J2EE持久层框架,处理示例:持久层框架,处理示例:Hibernate使用占位符参数绑定,伪代码如:使用占位符参数绑定,伪代码如:select*fromnewswherekey:key1或或select*fromnewswherekey=?iBatis(MyiBatis),伪代码如:,伪代码如:select*fromnewswherekey#key1#WEB应用安全和数据库安全的领航者Web通用通用-文件上传文件上传服务器端验证,存在问题代码的伪代码示例:文件上传服务器端验证,存在问题代码的伪代码

22、示例:我们知道容器能够解析的脚本文件的后缀名,是不能上传的!我们知道容器能够解析的脚本文件的后缀名,是不能上传的!WEB应用安全和数据库安全的领航者WEB应用安全和数据库安全的领航者黑名单验证,绕过问题一:黑名单验证,绕过问题一:如果如果StringfileName=“1.rar.jsp“,fileName.indexOf(”.”)截取的第一个点开始字截取的第一个点开始字符串,截取后值为:符串,截取后值为:fileType=“rar.jsp”,绕过黑名单列表:绕过黑名单列表:WEB应用安全和数据库安全的领航者WEB应用安全和数据库安全的领航者正确应该使用正确应该使用fileName.lastI

23、ndexOf(.)WEB应用安全和数据库安全的领航者绕过问题二:绕过问题二:fileType.equals(suffixi),比如,有时候一些比如,有时候一些web容器解析文件名时,容器解析文件名时,可能忽略大小写后缀名。比如,多个容器类型映射一个应用目录时(同时能可能忽略大小写后缀名。比如,多个容器类型映射一个应用目录时(同时能够解析够解析php文件):文件):StringfileName=“1.PHP“(后缀名全部大写)(后缀名全部大写),从而绕过黑名单,因从而绕过黑名单,因为为equals严格严格大小写的。大小写的。WEB应用安全和数据库安全的领航者WEB应用安全和数据库安全的领航者正确方式,使用正确方式,使用equalsIgnoreCase,忽略大小写校验:,忽略大小写校验:WEB应用安全和数据库安全的领航者Web通用通用任意文件下载任意文件下载J2EE伪代码示例(伪代码示例(File类文件输出流实现方式):类文件输出流实现方式):filepath=request.getParameter(path);Filefile=newFile(filepath);/文件输出流逻辑代码文件输出流逻辑代码WEB应用安全和数据库安全的领航者http:/

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > 金融/商业/投资

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号