双赢网安全实施方案<o:p></o:p>
Version: 0.1<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p></o:p>
<o:p> </o:p>发布记录<o:p></o:p>
版本<o:p></o:p> | 日期<o:p></o:p> | 作者<o:p></o:p> | 说明<o:p></o:p> |
0.1<o:p></o:p> | <st1:chsdate w:st="on" isrocdate="False" year="2007" day="11" islunardate="False" month="4">2007-4-11</st1:chsdate><o:p></o:p> | mol. Abraham<o:p></o:p> | 第一版初级构思<o:p></o:p> |
0.2<o:p></o:p> | <st1:chsdate w:st="on" isrocdate="False" year="2007" day="12" islunardate="False" month="4">2007-4-12</st1:chsdate> <o:p></o:p> | mol<o:p></o:p> | 增加Acegi的说明<o:p></o:p> |
03<o:p></o:p> | <st1:chsdate w:st="on" isrocdate="False" year="2007" day="18" islunardate="False" month="4">2007-4-18</st1:chsdate><o:p></o:p> | mol<o:p></o:p> | URL重写、 SysLog<o:p></o:p> |
<o:p> </o:p> | <o:p> </o:p> | <o:p> </o:p> | <o:p> </o:p> |
<o:p> </o:p>
<o:p> </o:p>
1. 关于本文档<o:p></o:p>
本文档是开发双赢网系统确保系统安全的一个初级文档,在以后的编码实现和上线运行后还要做进一步的修改。此文档的目的就是在系统编码实现前,为以后系统在安全扩展方面留一定余地。<o:p></o:p>
本文档提供给所有开发人员阅读,包括:系统构架、设计人员、编程开发人员、界面开发人员。<o:p></o:p>
<o:p> </o:p>
本文档中涉及的JAAS、Acegi等的相关内容请参阅相关资料或文档。<o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
2. 环境准备<o:p></o:p>
本系统主要采用java ee进行开发,3D模特生成由其他相关开发人员进行开发,在此仅仅讨论java ee的安全。<o:p></o:p>
<o:p> </o:p>
应用系统开发环境要求如下:<o:p></o:p>
W JDK:JDK1.5。使用Sun提供的JDK,不建议使用ibm等公司的JDK,采用IBM等公司的特殊产品除外。<o:p></o:p>
W J2EE Server:可以使用任何一个符合J2EE 1.5规范的JAVA EE Server,要求至少提供:Web Container、EJB Container、JNDI、JTA、DataSource。使用JBoss-4作为部署、运行环境。<o:p></o:p>
W DB:采用ORACLE9I ,在性能,安全方面比同类数据库来的更优秀,但也对公司技术人员有了进一步的要求:oracle的管理来的比较复杂。<o:p></o:p>
W 系统架构采用 webwork spring ejb hibernate, <o:p></o:p>
3. 安全特性:<o:p></o:p>
安全分:1.硬件安全 2.软件安全
<o:p> </o:p>
<o:p> </o:p>
3.1. 硬件安全<o:p></o:p>
硬件安全主要是采用硬件防火墙, 见图
<v:shapetype id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" filled="f" stroked="f" coordsize="21600,21600" o:spt="75"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" o:extrusionok="f" gradientshapeok="t"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype><v:shape id="_x0000_i1025" style="WIDTH: 244.5pt; HEIGHT: 225.75pt" type="#_x0000_t75"><v:imagedata o:title="{5923FF1C-1264-48E0-BE7B-68BACB322489}" src="file:///C:\DOCUME~1\User\LOCALS~1\Temp\msohtml1\01\clip_image001.png"></v:imagedata></v:shape>
<o:p> </o:p>
3.2. 硬件部件<o:p></o:p>
1. 前/后台硬件防火墙;<o:p></o:p>
2. 2台服务器------备用服务器;<o:p></o:p>
3. 机房-宽带<o:p></o:p>
4. 系统Enterprice Red Hat 4 Linux <o:p></o:p>
5. 杀毒服务器 软件防火墙(可不要)<o:p></o:p>
6. Oracle 数据库<o:p></o:p>
7. WebLogic<st1:chmetcnv w:st="on" tcsc="0" unitname="g" sourcevalue="10" numbertype="1" negative="False" hasspace="False">10g</st1:chmetcnv> <o:p></o:p>
<o:p> </o:p>
<o:p> </o:p>
<o:p> </o:p>
3.3. 软件安全<o:p></o:p>
安全只能说是相对的,在目前的软件开发安全方面,总是彼长此浮。只能在一定范围能限制一定的用户的破坏,现在看以前的安全漏洞,现在新的开发技术已经能很好的克制,但是目前不还是有很多黑客嘛
我们的安全肯定是不能防范顶级破坏人员,只能让我们的技术人员在不断的工作学习过程中和他们较量吧,呵呵!
3.4软件的中间件/组件选择:<o:p></o:p>
1) 数据库层:oracle9i
2) 容器:<o:p></o:p>
免费版本 1:tomcat 2:jboss<o:p></o:p>
商业版本 1:weblogic 2:webshpere<o:p></o:p>
如果公司资金允许的话 建议使用web logic
可以考虑使用glassfish
4. 硬件安全:<o:p></o:p>
对硬件的安全,我这里就不作说明了,改天找个专门的人员给讲解一下!人选已经找到,时间待定!<o:p></o:p>
4.1. 硬件拓扑图<o:p></o:p>
4.2. 硬件图<o:p></o:p>
5. 软件安全<o:p></o:p>
5.1. 软件方面的安全隐患与部分解决方案<o:p></o:p>
1、 操作系统-----<o:p></o:p>
软件运行的操作系统,就存在着一定的安全隐患,我们的系统运行其上,定会受到攻击。<o:p></o:p>
对于这个问题,我们只能不端的升级系统,打补丁。采用隐患较小的linux/unix系统比较妥当些<o:p></o:p>
<o:p> </o:p>
2、 第三方组件的缺陷<o:p></o:p>
我们的系统不可能从零做起。<o:p></o:p>
Java ee也不推荐重复发明轮子的做法,我们在开发业务系统的时候,都是采用第三方的开源或者商业的组件、中间件来辅助/加快我们的开发速度。但是这些第三方组件不是完美的,都存在着一定的问题,恶意用户就会利用这些组件来攻击我们的业务系统。<o:p></o:p>
对此,我们能做的就是在选用第三方组件的时候,考虑周全,避免存在重大漏洞的组件被选用。<o:p></o:p>
<o:p> </o:p>
3、 页面另存修改后,提交<o:p></o:p>
4、 跳过浏览器的JS验证<o:p></o:p>
5、 基于状态的攻击-----隐藏域----改成无意义的字段<o:p></o:p>
对于以上的攻击方法,就是在服务器端,进一步做验证,防止非法的数据进入后台数据库等<o:p></o:p>
<o:p> </o:p>
6、 CGI----参数暴露在URL中<o:p></o:p>
一般的做法是用户target来屏蔽,但是也难免会通过另存 或 查看源文件来找到;<o:p></o:p>
<o:p> </o:p>
7、 URL的跳转<o:p></o:p>
HTTP是个无状态的协议,可以通过URL去访问受保护的资源。<o:p></o:p>
--------对用户的访问拦截做校验<o:p></o:p>
<o:p> </o:p>
8、 破坏Cookie <o:p></o:p>
<o:p> </o:p>
Cookie的不安全性 至今没有很好的解决办法<o:p></o:p>
-------一般的电子商务网都是不负责任的去使用<o:p></o:p>
解决办法: 1)cookie对称性加密---acegi中有 或用DOJO<o:p></o:p>
2)HTTPS传输<o:p></o:p>
对称性加密不好<o:p></o:p>
9、 注入非法的数据或命令<o:p></o:p>
一般的注入 分3种:<o:p></o:p>
1) Sql ----拼写符合DB关键字的语法<o:p></o:p>
2) Pro ---存储过程<o:p></o:p>
3) Shell ----操作系统命令<o:p></o:p>
-------------------我们的框架已经能很好的处理这个问题<o:p></o:p>
10、 数据库角色安全:<o:p></o:p>
给不同的用户分派不同的数据库权限 ,同时把不必要的函数及存储过程删除。<o:p></o:p>
root ----mysql <o:p></o:p>
Sa -------sql server<o:p></o:p>
Sys system ----oracle<o:p></o:p>
禁止使用上述角色提供给web user使用。<o:p></o:p>
在对安全有很高限制的地方,我们应该提供视图 供用户操作,不提供基础数据库表。<o:p></o:p>
<span style="FONT-SIZE: 15pt; FONT-FAMILY: 宋体; mso-ascii-font-f