【转】防火墙逻辑隔离策略

VLAN 隔离内外网:电子政务网络中存在多种业务,要实现多网的统一互联,同时又要保证各个网络的安全,除了在应用层上通过加密、签名等手段避免数据泄漏 和篡改外,在局域网的交换机上采用VLAN技术进行,将不同业务网的设备放置在不同的VLAN中进行物理隔离,彻底避免各网之间的不必要的任意相互访问。 在实现VLAN的技术中,以基于以太网交换机端口的VLAN(IEEE 802.1Q)最为成熟和安全。防火墙访问控制保证。
网络核心安全:为了网络构建简单,避免采用太多的设备使管理复杂化,从而降低网络的安全性,可以放置一个高速防火墙,如图所示,通过这个这个 防火墙,对所有出入中心的数据包进行安全控制及过滤,保证访问核心的安全。另外,为保证业务主机及数据的安全,不允许办公网及业务网间的无控制互访,应在 进行VLAN划分的三层交换机内设置ACL。
数据加密传输:对于通过公网(宽带城域网)进行传输的数据及互联,数据加密是必须的,在对关键业务做加密时,可以考虑采用更强的加密算法。
设置DMZ区进行外部访问:通常对于外部网络的接入,必须采取的安全策略是拒绝所有接受特殊的原则。即对所有的外部接入,缺省认为都是不安全 的,需要完全拒绝,只有一些特别的经过认证和允许的才能进入网络内部。与网络中心及其它内部局域网之间的互连采用停火区(DMZ),设置集中认证点对接入 用户进行安全认证,认证及相关服务器位于停火区,业务通过代理服务器进行交换,不允许外部网络直接访问内部系统
----------------------------------------------------------------------------------------------------------------------------
当前虚拟园区网1.0方案已广泛应用于政府、大企业、医疗等行业,它提出和实现了网络虚拟化所需的基本技术思路:在用户接入网络时,使用 802.1x、Portal协议提供身份识别、权限控制服务,实现最优的访问控制策略;在用户接入网络后,通过MPLS VPN、VRF-VRF等多种逻辑隔离技术,能在保留当前园区网设计优势的同时,在一张物理网络上叠加多层逻辑分区,提供安全的虚拟化网络资源;共享服务 和安全策略实施的集中化,大大减少了在园区网中维护不同群组的安全策略和服务所需的资本和运营开支,有助于进行统一的规划建设和运维管理。
一、 虚拟园区网1.0精髓
在“虚拟园区网解决方案1.0”中,重点关注如何解决以下三个问题:
◆网络接入控制:确保接入用户的合法性和安全性,并能够根据用户身份动态授权;
◆业务逻辑隔离:确保用户组业务的安全隔离和可控互访,即VPN隔离和互访;
◆统一服务:确保每个用户组能够获得正确的服务,并进行集中的管理和策略控制。
这三方面是实现虚拟化园区网络建设中必须要面对和解决的问题,解决这些问题的思路和技术方案构成了“虚拟园区网解决方案1.0”的精髓。
1. 网络接入控制
通过网络接入控制对接入网络的终端进行接入安全保障和基于身份的动态访问授权。
虚拟园区网使用逻辑隔离技术,在一张物理网络上虚拟出多套封闭的逻辑资源。在用户接入网络的时候,必须要考虑用户所属群组与逻辑网络资源之间的对应关系,以便于给用户分配正确的权限,并保证封闭逻辑资源的安全性。
这里,建议部署H3C的终端准入控制(EAD,End user Admission Domination)系统,该系统根据接入用户的身份信息,与网络设备配合对用户进行动态授权,控制不同群组用户能够访问到不同的逻辑资源;并能提供用 户终端的安全性和法规遵从性检查,加强对用户的集中管理,提高网络终端的主动安全防御能力。
在使用EAD系统进行灵活准入控制的时候,根据应用场景不同,通常有两种控制方式:
◆802.1x方式 

图1. 802.1x方式的网络接入控制典型组网

如图1所示,接入控制点在园区网络的接入层设备、认证协议使用802.1x。802.1x是端口安全的标准协议,能够在认证用户及其关联的VPN间形成连接,防止在未授权情况下访问禁止接入的资源。
初始情况下,未认证用户连接网络时,根据预配的策略,用户不能接入网络,或只能访问部分安全等级要求不高的公共资源,如公共资源VPN里的打印机、软件升级服务器、病毒库版本升级服务器、访问Internet服务等,无法访问其它安全等级较高的私有VPN资源。
用户使用EAD系统通过认证后,网管会根据认证用户名的群组归属属性,由策略服务器给接入层控制设备下发端口归属关系配置调整信息,建立用户接入端 口与相应VPN的连接关系,提供用户对相应VPN内资源的访问通道。此时,用户只能访问所授权访问VPN内的资源,无法访问和查看其它用户VPN内的资 源,从而实现对接入用户的资源访问权限控制和安全的逻辑隔离。并且同一物理端口在不同时刻可分别提供给多个用户使用,每次认证通过后策略服务器都会根据认 证用户属性下发端口归属VPN的配置信息,使用户接入到不同的VPN中去。用户在未认证时,可能都能访问相同的公共资源,但用户认证后,就只能分别访问所 归属VPN内的资源,同一台终端先后使用不同的用户名认证接入网络,能够访问到的资源也是不同的。这样大大提高了用户动态接入网络资源的灵活性。
802.1x方式在网络接入的最前端进行访问权限控制和安全检查,通过调整用户接入端口与VPN的映射关系来控制用户对相应VPN资源的访问,具有较高的安全性。同时,能够支持用户的位置移动性,无论用户从边缘的哪个接口接入,都能访问到相同的授权资源。
◆Portal方式
对于无法在接入层设备进行接入访问控制的组网,还可以采用一种基于汇聚网关的Portal认证方案。 

图2. Portal方式网络接入控制典型组网

在这个方案中,用户的接入身份认证和权限控制点不在接入层设备上,而是在位置较高的汇聚、核心层,这样可以兼容下层网络的异构性、对接入层设备的要求也较低。但是,这种部署方式要求虚拟化VPN资源的划分要在Portal认证点之上。
初始情况下,用户可以访问不需要认证的资源,如本地局域网内的部分资源、Internet服务等。当用户需要通过Portal网关访问受控资源的时 候,就需要启动EAD客户端或通过认证网关推送的认证界面进行认证,服务器根据认证用户信息,下发控制策略给Portal网关,建立用户与相应VPN资源 的访问通道、限制对其它VPN虚拟资源的访问。
基于Portal方式的接入控制简化方案也得到了广泛应用,如在某个大型园区网络中部署了虚拟化技术对办公业务和访问Internet业务进行逻辑 隔离,采用Portal认证方式:用户接入网络后,无需认证即可访问Internet,此时用户无法访问办公业务资源;当用户需要访问办公VPN资源的时 候,数据流触发Portal网关推送认证界面给用户,用户认证通过后即可访问办公VPN资源,但此时由于策略服务器给Portal网关下发了控制策略,用 户无法再同时访问Internet,若需访问Internet,用户需要退出认证。这样,能够更加灵活、简化对网络虚拟资源的访问控制,更便于部署和使 用。
网络接入控制包含两方面内容:一是对接入用户访问网络虚拟资源的权限控制,二是对接入用户的合法性和安全性检查。EAD系统充分支持这两方面功能, 无论使用802.1x方式还是Portal方式的认证,都能对接入终端的安全性、合规性进行检查,并提供检查报告,对不满足要求的终端,限制其接入网络。 对认证通过并进行了访问授权的用户,仍能提供实时的安全状态监测,以保障终端和网络的安全性。
2. 业务逻辑隔离
目前,有多种技术能够支持网络虚拟化分区、实现用户组业务的逻辑隔离,包括GRE、VRF-VRF、MPLS L3/L2 VPN等。但是从虚拟园区网方案在行业应用的分析来看,VRF-VRF和MPLS L3 VPN是应用较多的技术,也相对于其它技术更有优势。
◆中小型园区
对于一些中小型园区,网络设备层次少、结构简单、业务划分关系固定,非常适合VRF-VRF方案。利用园区内设备的虚拟路由转发功能,为不同群组/ 业务划分固定的逻辑隔离通道,满足业务的横向隔离需求。一次配置完成后即可稳定地提供服务,支持通道间的地址重叠和控制策略不一致。
◆大型园区
对于大型复杂园区,更适合使用MPLS L3 VPN技术建立虚拟化园区网络。MPLS L3 VPN已在广域网应用多年,技术成熟、控制灵活,对于虚拟网络间的互访业务能够提供很好的支持。由于在大型园区内部,无论业务系统集中还是分布部署,都可 能存在跨VPN的业务互访和资源共享,VRF-VRF、GRE等隔离技术无法很好地支撑这种业务访问模式。MPLS VPN依靠路由、接口VPN实例绑定关系建立VPN通道进行通信,通过路由的引入引出控制策略,实现VPN间灵活的互访,并且能够支持可靠性检测、多路径 负载均衡等技术,所以更适合网络规模大、设备台数多的组网应用环境。
利用MPLS VPN把网络虚拟化从广域延伸到园区,需要园区交换机产品对MPLS VPN特性提供全面的支持,否则无法实现真正的网络虚拟化。以H3C为例,其路由器、交换机、安全等产品能够提供全面的网络虚拟化技术支持,实现跨广域、园区的端到端虚拟化部署方案。 

图3. H3C端到端的虚拟化解决方案

3. 统一服务
传统物理隔离网络带来的一个严重问题:应用服务器需要重复部署且数据同步困难、安全策略需要分别定义和配置、管理复杂度增加。园区虚拟化方案能够有 效解决以上难题,为用户提供集中的数据中心服务、统一的Internet/广域网出口、统一的网络监控/管理软件,提高资源的利用率、降低管理复杂 度:
◆集中的数据中心服务。数据中心的应用支持多VPN用户的共享或专用,通过云计算、服务器虚拟化等技术的应用,屏蔽数据中心内部硬件设备间的差异,根据虚拟网络用户组和业务的需求分配计算、存储资源,提供统一、集中的服务,以降低提供这些服务的资本和运营开支;
◆ 园区内所有用户共享统一的Internet/广域网接口。虚拟防火墙、NAT转换等技术的应用减少了网络、安全设备的部署数量,多VPN用户共享 集中部署的防火墙和入侵检测设备。以H3C的网络、安全产品为例,是通过VPN感知功能,在一个设备上能够并发提供几百个虚拟防火墙,每个虚拟网络用户组 都能在各自的虚拟防火墙实例上实施自己的策略,而整体上只需要拥有一台硬件防火墙设备;
◆统一的网络管理、监控软件。通过专门的管理VPN,实现对整网资源的配置管理和对各种业务流量的监控、规划。例如通过iMC统一管理平台、MPLS VPN Manager对全网设备、用户、VPN业务进行统一管理和监控,降低管理难度和运维成本。
二、 结束语
实现园区甚至整个网络的虚拟化,需要考虑用户终端接入的安全检查、接入VPN的动态授权、MPLS VPN端到端的业务隔离、虚拟防火墙、NAT多实例、共享数据中心、统一的运维和管理平台等多种技术、产品的综合应用,从而达到理想的设计效果。
虚拟园区网解决方案1.0以灵活的接入控制、安全的业务逻辑隔离、统一服务能力为精髓,提供了一套完整的实现虚拟化的基础方案。之后2.0方案在此 基础上,整合了IRF智能弹性架构、多业务插卡等亮点技术,更进一步提高了网络的可靠性、提升整体资源的利用率、降低用户投资、简化网络管理、增强应用提 供能力,开始了向智能化信息网络架构的迁移。

Continue reading 【转】防火墙逻辑隔离策略

关于clientHeight、offsetHeight、scrollHeight

关于clientHeight、offsetHeight、scrollHeight
window.screen.availWidth      返回当前屏幕宽度(空白空间) 
window.screen.availHeight      返回当前屏幕高度(空白空间) 
window.screen.width      返回当前屏幕宽度(分辨率值) 
window.screen.height      返回当前屏幕高度(分辨率值) 
window.document.body.offsetHeight;      返回当前网页高度 
window.document.body.offsetWidth;      返回当前网页宽度 
我们这里说说四种浏览器对 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释。
这四种浏览器分别为IE(Internet Explorer)、NS(Netscape)、Opera、FF(FireFox)。
NS指代webkit(safari,chrome)
clientHeight
大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。
offsetHeight
IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。
scrollHeight
IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。
NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。
简单地说两个互相对调就差不多了
clientHeight 就是透过浏览器看内容的这个区域高度。
NS、 FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。
IE、Opera 认为 offsetHeight 是可视区域 clientHeight 滚动条加边框。scrollHeight 则是网页内容实际高度。
同理
clientWidth、offsetWidth 和 scrollWidth 的解释与上面相同,只是把高度换成宽度即可。
=======================================================================
clientHeight与offsetHeight的区别
许多文章已经介绍了clientHeight和offsetHeight的区别,就是clientHeight的值不包括scrollbar的高 度,而offsetHeight的值包括了scrollbar的高度。然而,clientHeight和offsetHeight的值到底由什么组成的 呢?如何计算这两个数的值?
1. clientHeight和offsetHeight的值由什么决定?
假如我们有以下的DIV,主要显示的文字为"This is the main body of DIV"。
如上图所示,clientHeight的值由DIV内容的实际高度和CSS中的padding值决定,而offsetHeight的值由DIV内容 的实际高度,CSS中的padding值,scrollbar的高度和DIV的border值决定;至于CSS中的margin值,则不会影响 clientHeight和offsetHeight的值。
2. CSS中的Height值对clientHeight和offsetHeight有什么影响?
首先,我们看一下CSS中Height定义的是什么的高度。如在本文最后部分“APPENDIX示例代码”(注:以下称为“示例代码”) 中,innerDIVClass的Height值设定为50px,在IE下计算出来的值如下所示。也就是说,在IE里面,CSS中的Height值定义了 DIV包括padding在内的高度(即offsetHeight的值);在Firefox里面,CSS中的Height值只定义的DIV实际内容的高 度,padding并没有包括在这个值里面(70 = 50 + 10 * 2)。
in IE:
innerDiv.clientHeight: 46
innerDiv.offsetHeight: 50
outerDiv.clientHeight: 0
outerDiv.offsetHeight: 264
in Firfox:
innerDiv.clientHeight: 70
innerDiv.offsetHeight: 74
outerDiv.clientHeight: 348
outerDiv.offsetHeight: 362

在上面的示例中,也许你会很奇怪,为什么在IE里面outerDiv.clientHeight的值为0。那是因为示例代码中,没有定义 outerDIVClass的Height值,这时,在IE里面,则clientHeight的值是无法计算的。同样,在示例代码中,如果将 innerDIVClass中的Height值去年,则innerDIV.clientHeight的值也为0。(注:在Firefox下不存在这种情 况)。
如果CSS中Height值小于DIV要显示内容的高度的时候呢(当CSS中没有定义overflow的行为时)?在IE里面,整个 clientHeight(或者offsetHeight)的值并没有影响,DIV会自动被撑大;而在Firefox里面,DIV是不会被撑开的。如在示 例代码中,将innerDivClass的Height值设为0,则计算结果如下所示。IE里面的DIV被撑开,其clientHeight值等于内容的 高度与padding*2的和;而Firefox里面,文字将溢出DIV的边界,其clientHeight值正好是padding值的两倍。
In IE:
innerDiv.clientHeight: 38
innerDiv.offsetHeight: 42
outerDiv.clientHeight: 0
outerDiv.offsetHeight: 256
In Firefox:
innerDiv.clientHeight: 20
innerDiv.offsetHeight: 24
outerDiv.clientHeight: 298
outerDiv.offsetHeight: 312

APPENDIX 示例代码
<html>
<head>
<style type="text/css">......
.innerDivClass
{...}{...}{...}{
       color: red;
       margin: 37px;
       padding: 10px;
       border: 2px solid #000000;
       height: 50px;

}
.outerDivClass
{...}{...}{...}{
       padding: 100px;
       margin: 200px;
       border: 7px solid #000000;
}
</style>
<script>......
function checkClientHeight()
......{
      var innerDiv = document.getElementById("innerDiv");
      var outerDiv = document.getElementById("outerDiv");
       result.innerHTML = "innerDiv.clientHeight: " + innerDiv.clientHeight + "<br />";
       result.innerHTML += "innerDiv.offsetHeight: " + innerDiv.offsetHeight + "<br />";
       result.innerHTML += "outerDiv.clientHeight: " + outerDiv.clientHeight + "<br />";
       result.innerHTML += "outerDiv.offsetHeight: " + outerDiv.offsetHeight + "<br />";
}
</script>
</head>
<body>
<div id="outerDiv" class="outerDivClass">
<div class="innerDivClass" id="innerDiv">
Hello world.         
</div>
</div>
<p></p>
<div id="result">
</div>
<input type="button" onclick="checkClientHeight()" text="Click Me" Value="Click Me" />
</body>
</html>

Continue reading 关于clientHeight、offsetHeight、scrollHeight

ie文本提示相关--事件注意

1:keydown和keyup事件不是一一对应的,用户按着键不动,再松开的话,会触发多个keydown事件而只触发一个keyup事件。
2:extjs的wndow点击关闭触发不了document的onclick事件,不知道什么回事.
3:使用extjs的菜单来响应用户输入反应很慢,效果很不好,所以我自己写ui。
4:文本框输入的时间顺序是keydown->keypress->keyup 只有keyup事件才算将用户刚输入的字符输入到文本框,即value的值包含了用户刚才的输入。
5: 原来在keydown时间里面来判断词边界,哪知对于回车这类,在keydown里面获得的选中文本是不正确的,它忽略了回车换行,把我纠结的哟。最后放在keyup时间里面就可以了,想想也是,就应该在keyup时间里处理的嘛,如果用户按着建不动这个时候是没必要处理提示逻辑的。

TextRange 的offsetLeft/offsetTop是相对于浏览器客户区左上角为起始点,它一直是绝对定位的。但是要实现建议的浮动下拉框式时,使用的是 style.left/top属性,这个坐标是以普通的文档的body坐标系统,因此需要加上body的滚动位置。
xy = [sel.offsetLeft, sel.offsetTop];               
xy[0] += document.body.scrollLeft;
xy[1] += document.body.scrollTop;



Continue reading ie文本提示相关--事件注意

mysql 锁 事务 并发

在做manage console时,由于存在后台和ui两方面修改树数据,存在并发问题。而此树实现又存在递归。

myisam方式是不行的,它需要锁住所有涉及到的表,这样的话,根本达不到只锁一个表的目的。myisam也不支持事务,但它支持表锁,但是他的锁需要手动释放,事务提交时是没有自动解锁的。innodb支持事务,但只支持行级锁。在事务提交时会自动解锁。

可使用单独表来实现并发互斥,此表只有一行记录,在进行操作事务时将此行用hibernate LOCKMODE.Read锁
代码:getSession().load(Lock.class, 0, LockMode.READ);
则达到互斥效果。

Continue reading mysql 锁 事务 并发

我出的web,java面试题

自我介绍
技术题
web容器用过哪些,优缺点
margin 方向顺序
经验
1:你最喜欢的编程语言是什么,为什么喜欢它,如果你喜欢的是java的话,你觉得它与javascript有什么区别吗?如果不是,你觉得你喜欢的语言与java又有什么区别?能谈谈你对javascript的看法吗?   
2:能谈谈过去18个月中java平台发生了什么事情吗?
2009

Oracle收购Sun

除了Oracle和Sun的故事,SpringSource的一系列举动在Groovy社区表现得也很活跃:收购Groovy和Grails技术的 幕后公司G2One,收购系统管理软件厂商Hyperic,随后SpringSource又被VMWare收购,在虚拟市场取得立足点。

另外,Terracotta收购了Quartz和ehCache开源框架。

Java开发领域2011年度热点回顾与展望 http://tech.it168.com/a2011/1216/1289/000001289885_1.shtml

 

3:如果你想学一种新的编程语言,你对那个比较感兴趣,为什么?
4:你非常喜欢的web应用有哪些,为什么喜欢他们?
5:你喜欢UI开发吗?你自己是否写过web UI组件,如果是,请介绍一下这些组件并谈谈你的体会。
6:你觉得开发web应用最糟糕的事情和最好的情况分别是什么,你觉得使用web应用最糟糕的事情和最好的情况又分别是什么?
7:能谈谈你对html5的看法吗?
8:如果你有一年的时间做些事情,你打算做什么,为什么要这样做?
9:你能谈谈你最有话要说的你参与过的项目吗?
10:你参与过开源项目吗?如果有,请介绍一下这个项目并谈谈你的体会?
你认为你有什么优缺点?

Continue reading 我出的web,java面试题

swing 开发 assist 功能问题

swing 开发 assist 功能问题:
关键点获得输入光标的位置。
Point p = textArea.getCaret().getMagicCaretPosition();
mask 一定要在dot之前
setdot后再movedot这时应该是向后,看jdk源码就知道了。
swing 点击window的title栏时,不会触发window的click事件,即使使用Toolkit.getDefaultToolkit().addAWTEventListener的方式也不行
requestFocusInWindow如果不起作用,那要检查顶级窗体是否获得焦点,topWin.setVisible(true);即可
event.consume方法是可以取消事件的,但是对于textarea来说,要禁止输入最好在
keypress->keytyped->keyrealease三个里面都consume,不然还是会输入字符。
swing的事件不是像html dom那样冒泡,它会从最底层控件的事件监听器找起,没有才会向上冒泡。而且getSource是没什么用的(往往是添加监听器本身的控件)。

Continue reading swing 开发 assist 功能问题

【转】JavaScript变量作用域

一、JavaScript变量作用域(scope)
首先需要明白的几个要点:
1.JavaScript的变量作用域是基于其特有的作用域链的。
2.JavaScript没有块级作用域。
3.函数中声明的变量在整个函数中都有定义。(就后面第三点的说明)
4 .所有在最外层定义(非函数体内定义)的变量都拥有全局作用域
5. 所有末定义直接赋值的变量,系统会自动声明为拥有全局作用域的变量
6. 所有window对象的属性拥有全局作用域
(下面作者还提到全局变量都可以通过window.*来访问,明白这一点很重要,但是否准确?此外目前存在的疑问还有:
    即使可以以这中方式来访问全局变量那是否能认为全局对象由window来统一管理,还是window只是保存了一个拷贝而已?)

这是正确的,例:

<script type="text/javascript">
    	var s = '1';
    	
    	alert(window.s);
    </script>

结果是1

   

1.JavaScript的作用域链

首先看一个很简单的例子,下面的代码中,定义一个全局变量n,n的作用域是全局的。

<script language="javascript" type="text/javascript">

var n=1;

function show(){

  var m=2;

  alert(n);  //显示结果为1

}

show();

</script>

运行代码后,结果为1。原理就是JavaScript作用域是层层包含的,外层的作用域在内层有效,执行的时候,从内层向外层查找。当函数show执行的时候,首先在函数show内部查找变量n,没有找到,再向外层查找,找到了全局变量n,alert显示结果为1。

2.局部变量优先级高于全局变量

<script language="javascript" type="text/javascript">

var n=1;

function show(){

  var m=2;

  var n=3;

  alert(n);  //显示结果为3

}

show();

</script>

这个不难理解,根据上面变量作用域链的原理,函数执行时,会先从内层向外层查找,如果在内层中找到变量,查找就会停止。所以内层的作用域会优先于外层,局部优先于全局。

稍改一下:

<script language="javascript" type="text/javascript">

var n=1;

function show(){

  var m=2;

  var n=3;

  alert(window.n);  //显示结果为1

}

show();

</script>

为什么会是1,而不是3呢,只是另外一个问题:全局变量都是window对象的属性,任何的全局变量都是window对象的属性,都可以用window.*来引用。(*代表一个变量)

3.在函数内部使用var声明的变量,不论在何处声明,该变量都拥有整个函数的作用域。

<script language="javascript" type="text/javascript">

var n=1;

function show(){

  alert(n);  //undefined

  alert(this.n); //显示为1

  var n=3;  //声明局部变量n

  alert(n);  //显示为3

}

show();

</script>

第一个问什么会显示undefined呢,这个问题的原因就是在函数后面声明了局部变量n=3,在函数show执行的时候,会先从内层查找变量n,结果找到了,但在第一个alert的时候,n还没有赋值,故结果为undefined。

4.JavaScript没有块级作用域

<script language="javascript" type="text/javascript">

var n=1;

function show(){

for(var i=0;i<3;i++){

   var n=6;

   alert(i);  //显示结果为0,1,2

}

alert("for循环外:"+i); //显示结果为:“for循环外:3”

alert("n="+n);  //显示结果为:n=6

}

//alert(i);  外部引用一个未声明变量会提示出错

show();

</script>

变量i虽然是在for循环内定义的,但for循环块外部仍然可以引用,i的作用域是整个函数show。如果在show函数外部引用i变量,会出现JavaScript报错。

5.没有使用var声明的变量属于全局变量

<script language="javascript" type="text/javascript">

var n=1;

function show(){

  m=9;  //声明变量m

  var s=6;

}

show();  //不可少,alert之前需要先执行m=9,否则m未声明

alert(m);  //显示9

alert(window.m);  //显示9

alert(s);  //报错"s is not defined"

</script>

函数show执行的过程中,引用了变量m,但未使用var声明,m就变成了全局变量。

二、JavaScript匿名函数

所谓匿名函数就是没有命名的函数,看起来有点难以理解,其实很常见,下面举一个小例子。

window.onload=function(){ alert("加载完毕!");}

这样就创建了一个匿名函数,这个function没有函数名,但可以被调用和执行,当网页加载完毕时,会执行alert()。

<script language="javascript" type="text/javascript">

(function(x,y){alert(x+y)})(2,3);  //显示结果为5

</script>

上面的方法仍然是创建了一个匿名函数,并使用()优先表达式强制执行函数。

三、JavaScript闭包(closure)

闭包其实就是利用了函数作用域和匿名函数的知识,当函数A执行结束时,一部分变量变量被B引用,被引用的变量不能释放,形成了所谓的闭包。这里有篇很好的文章,可以参考一下。

下面看一个小例子:

<script language="javascript" type="text/javascript">

function show(){

   var n=3;

   setTimeout(function(){alert("first:"+n);},3000); //3秒后显示first:3

   alert("second:"+n); //显示second:3

}

show();

function show2(){alert("第一个函数执行结束");}

show2();

</script>

运行上面的函数后,首先alert显示"second:3",然后显示"第一个函数执行结束",3秒后显示“first:3”。

仔 细看一下,函数show执行结束的时候,变量n应该被释放了,内存里也就不存在了,怎么过了3秒还能显示出"first:3"呢?闭包恰恰就在此产生了, 当函数show执行结束的时候,想要释放内存里的n,但发现变量n还在被一个匿名函数引用,要在3秒后调用,根据JavaScript闭包原理,内存里的 n被保留了下来,于是在三秒以后仍然可以调用n。

下面看几种写法的区别:

function show2(content){

alert(content);  //3秒后alert显示"test"

}

function show(content,delay_time){

   setTimeout("show2('"+content+"')",delay_time);

}

show("test",3000);

仔细看一下上面这种写法不是闭包,只是普通的函数调用而已。

function show(content,delay_time){

   setTimeout(function(){alert(content)},delay_time); //3秒后alert显示"test"

}

show("test",3000);

这种写法就是闭包,虽然结果是一样的,但原理不一样。

function show(content){

   function show2(){alert(content);}

   return show2;

}

var newshow=show("test");

setTimeout(newshow,3000);  //3秒后alert显示"test"

上面这种写法也是闭包,虽然结果都是一样的,但原理却不一样。这里面看到了函数也可以当作对象也传递,函数show执行后return show2,把函数show2赋值给newshow,然后3秒后,调用newshow对象,执行函数show2。

仔细比较上面3种写法,如果能悟出一些道理就好,闭包有些时候的确难理解。

稍复杂一点的例子:

<script language="javascript" type="text/javascript">

var show=null;

(function(){

var n=1;

var show2=function(){

     alert(n++);

}

show=show2;

})();

show();  //显示1

show();  //显示2

show();  //显示3

</script>

上面代码中,又一次用了函数作为对象传递,n是匿名函数里的局部变量,外部是访问不到的。show是一个全局变量,应该访问不了变量n,但在函数 show执行前,首先把函数匿名函数内部show2赋值给show,当后面函数show运行的时候,会调用show2的代码,而show2是可以访问n 的,故结果显示为1、2、3。

另外一点值得注意的,也是很经典的一个例子。

CSS代码:

ul{ width:600px; margin:0px auto;}

ul li{ margin:1px 0px; background-color:#999999;}

HTML代码:

<ul>

<li>1</li>

<li>2</li>

<li>3</li>

<li>4</li>

</ul>

JavaScript代码:

<script language="javascript" type="text/javascript">

var li=document.getElementsByTagName("li");

for(var i=0;i<li.length;i++){

  li[i].onclick=function(){alert(i);}

}

</script>

运行后,不论点击哪一个li,都是alert提示“4”。这就是一个需要注意的地方:闭包允许内层函数引用父函数中的变量,但是该变量是最终值。闭包引用的变量i,是循环结束后的值,其实这是一个很常见的问题,解决方法也有很多。

比较常见的就是给li[i]添加属性值,比如li[i].n=i;还有就是用闭包方法解决,这个函数本身就是闭包,所谓用闭包来解决闭包的问题。代码如下:

<script language="javascript" type="text/javascript">

var li=document.getElementsByTagName("li");

for(var i=0;i<li.length;i++){

  (function(index){

  li[index].onclick=function(){alert(index);}

  })(i);

}

</script>

Continue reading 【转】JavaScript变量作用域

数据库系统安全技术框架综述

1. 前言

随着计算机技术的飞速发展,数据库的应用十分广泛,深入到各个领域,但随之而来产生了数据的安全问题。各种应用系统的数据库中大量数据的安全问题、敏 感数据的防窃取和防篡改问题,越来越引起人们的高度重视。数据库系统作为信息的聚集体,是计算机信息系统的核心部件,其安全性至关重要,关系到企业兴衰、 国家安全。因此,如何有效地保证数据库系统的安全,实现数据的保密性、完整性和有效性,已经成为业界人士探索研究的重要课题之一,本文就安全防入侵技术做 简要的讨论。

数据库系统的安全除依赖自身内部的安全机制外,还与外部网络环境、应用环境、从业人员素质等因素息息相关,因此,从广义上讲,数据库系统的安全框架可以划分为三个层次:

⑴ 网络系统层次;

⑵ 宿主操作系统层次;

⑶ 数据库管理系统层次。

这三个层次构筑成数据库系统的安全体系,与数据安全的关系是逐步紧密的,防范的重要性也逐层加强,从外到内、由表及里保证数据的安全。下面就安全框架的三个层次展开论述。

2. 网络系统层次安全技术

从广义上讲,数据库的安全首先倚赖于网络系统。随着Internet的发展普及,越来越多的公司将其核心业务向互联网转移,各种基于网络的数据库应用 系统如雨后春笋般涌现出来,面向网络用户提供各种信息服务。可以说网络系统是数据库应用的外部环境和基础,数据库系统要发挥其强大作用离不开网络系统的支 持,数据库系统的用户(如异地用户、分布式用户)也要通过网络才能访问数据库的数据。网络系统的安全是数据库安全的第一道屏障,外部入侵首先就是从入侵网 络系统开始的。网络入侵试图破坏信息系统的完整性、机密性或可信任的任何网络活动的集合,具有以下特点:

a)没有地域和时间的限制,跨越国界的攻击就如同在现场一样方便;

b)通过网络的攻击往往混杂在大量正常的网络活动之中,隐蔽性强;

c)入侵手段更加隐蔽和复杂。

计算机网络系统开放式环境面临的威胁主要有以下几种类型:a)欺骗(Masquerade);b)重发(Replay);c)报文修改 (Modification of message);d)拒绝服务(Deny of service);e)陷阱门(Trapdoor);f)特洛伊木马(Trojan horse);g)攻击如透纳攻击(Tunneling Attack)、应用软件攻击等。这些安全威胁是无时、无处不在的,因此必须采取有效的措施来保障系统的安全。

从技术角度讲,网络系统层次的安全防范技术有很多种,大致可以分为防火墙、入侵检测、协作式入侵检测技术等。

⑴防火墙。防火墙是应用最广的一种防范技术。作为系统的第一道防线,其主要作用是监控可信任网络和不可信任网络之间的访问通道,可在内部与外部网络之 间形成一道防护屏障,拦截来自外部的非法访问并阻止内部信息的外泄,但它无法阻拦来自网络内部的非法操作。它根据事先设定的规则来确定是否拦截信息流的进 出,但无法动态识别或自适应地调整规则,因而其智能化程度很有限。防火墙技术主要有三种:数据包过滤器(packet filter)、代理(proxy)和状态分析(stateful inspection)。现代防火墙产品通常混合使用这几种技术。

⑵入侵检测。入侵检测(IDS-- Instrusion Detection System)是近年来发展起来的一种防范技术,综合采用了统计技术、规则方法、网络通信技术、人工智能、密码学、推理等技术和方法,其作用是监控网络和 计算机系统是否出现被入侵或滥用的征兆。1987年,Derothy Denning首次提出了一种检测入侵的思想,经过不断发展和完善,作为监控和识别攻击的标准解决方案,IDS系统已经成为安全防御系统的重要组成部分。

入侵检测采用的分析技术可分为三大类:签名、统计和数据完整性分析法。

①签名分析法。主要用来监测对系统的已知弱点进行攻击的行为。人们从攻击模式中归纳出它的签名,编写到IDS系统的代码里。签名分析实际上是一种模板匹配操作。

②统计分析法。以统计学为理论基础,以系统正常使用情况下观察到的动作模式为依据来判别某个动作是否偏离了正常轨道。

③数据完整性分析法。以密码学为理论基础,可以查证文件或者对象是否被别人修改过。

IDS的种类包括基于网络和基于主机的入侵监测系统、基于特征的和基于非正常的入侵监测系统、实时和非实时的入侵监测系统等。

⑶协作式入侵监测技术

独立的入侵监测系统不能够对广泛发生的各种入侵活动都做出有效的监测和反应,为了弥补独立运作的不足,人们提出了协作式入侵监测系统的想法。在协作式 入侵监测系统中,IDS基于一种统一的规范,入侵监测组件之间自动地交换信息,并且通过信息的交换得到了对入侵的有效监测,可以应用于不同的网络环境。

3. 宿主操作系统层次安全技术

操作系统是大型数据库系统的运行平台,为数据库系统提供一定程度的安全保护。目前操作系统平台大多数集中在Windows NT 和Unix,安全级别通常为C1、C2级。主要安全技术有操作系统安全策略、安全管理策略、数据安全等方面。

操作系统安全策略用于配置本地计算机的安全设置,包括密码策略、账户锁定策略、审核策略、IP安全策略、用户权利指派、加密数据的恢复代理以及其它安全选项[7]。具体可以体现在用户账户、口令、访问权限、审计等方面。

用户账户:用户访问系统的"身份证",只有合法用户才有账户。

口令:用户的口令为用户访问系统提供一道验证。

访问权限:规定用户的权限。

审计:对用户的行为进行跟踪和记录,便于系统管理员分析系统的访问情况以及事后的追查使用。

安全管理策略是指网络管理员对系统实施安全管理所采取的方法及策略。针对不同的操作系统、网络环境需要采取的安全管理策略一般也不尽相同,其核心是保证服务器的安全和分配好各类用户的权限。

数据安全主要体现在以下几个方面:数据加密技术、数据备份、数据存储的安全性、数据传输的安全性等。可以采用的技术很多,主要有Kerberos认证、IPSec、SSL、TLS、VPN(PPTP、L2TP)等技术。

4. 数据库管理系统层次安全技术

数据库系统的安全性很大程度上依赖于数据库管理系统。如果数据库管理系统安全机制非常强大,则数据库系统的安全性能就较好。目前市场上流行的是关系式数据库管理系统,其安全性功能很弱,这就导致数据库系统的安全性存在一定的威胁。

由于数据库系统在操作系统下都是以文件形式进行管理的,因此入侵者可以直接利用操作系统的漏洞窃取数据库文件,或者直接利用OS工具来非法伪造、篡改数据库文件内容。这种隐患一般数据库用户难以察觉,分析和堵塞这种漏洞被认为是B2级的安全技术措施。

数据库管理系统层次安全技术主要是用来解决这一问题,即当前面两个层次已经被突破的情况下仍能保障数据库数据的安全,这就要求数据库管理系统必须有一 套强有力的安全机制。解决这一问题的有效方法之一是数据库管理系统对数据库文件进行加密处理,使得即使数据不幸泄露或者丢失,也难以被人破译和阅读。

我们可以考虑在三个不同层次实现对数据库数据的加密,这三个层次分别是OS层、DBMS内核层和DBMS外层。

⑴在OS层加密。在OS层无法辨认数据库文件中的数据关系,从而无法产生合理的密钥,对密钥合理的管理和使用也很难。所以,对大型数据库来说,在OS层对数据库文件进行加密很难实现。

⑵在DBMS内核层实现加密。这种加密是指数据在物理存取之前完成加/脱密工作。这种加密方式的优点是加密功能强,并且加密功能几乎不会影响DBMS 的功能,可以实现加密功能与数据库管理系统之间的无缝耦合。其缺点是加密运算在服务器端进行,加重了服务器的负载,而且DBMS和加密器之间的接口需要 DBMS开发商的支持。

定义加密要求工具

DBMS

数据库应用系统

加密器

(软件或硬件)

⑶在DBMS外层实现加密。比较实际的做法是将数据库加密系统做成DBMS的一个外层工具,根据加密要求自动完成对数据库数据的加/脱密处理:

定义加密要求工具加密器

(软件或硬件)

DBMS

数据库应用系统

采用这种加密方式进行加密,加/脱密运算可在客户端进行,它的优点是不会加重数据库服务器的负载并且可以实现网上传输的加密,缺点是加密功能会受到一些限制,与数据库管理系统之间的耦合性稍差。

下面我们进一步解释在DBMS外层实现加密功能的原理:

数据库加密系统分成两个功能独立的主要部件:一个是加密字典管理程序,另一个是数据库加/脱密引擎。数据库加密系统将用户对数据库信息具体的加密要求 以及基础信息保存在加密字典中,通过调用数据加/脱密引擎实现对数据库表的加密、脱密及数据转换等功能。数据库信息的加/脱密处理是在后台完成的,对数据 库服务器是透明的。

加密字典管理程序

加密系统

应用程序

数据库加脱密引擎

数据库服务器

加密字典

用户数据

按以上方式实现的数据库加密系统具有很多优点:首先,系统对数据库的最终用户是完全透明的,管理员可以根据需要进行明文和密文的转换工作;其次,加密 系统完全独立于数据库应用系统,无须改动数据库应用系统就能实现数据加密功能;第三,加解密处理在客户端进行,不会影响数据库服务器的效率。

数据库加/脱密引擎是数据库加密系统的核心部件,它位于应用程序与数据库服务器之间,负责在后台完成数据库信息的加/脱密处理,对应用开发人员和操作 人员来说是透明的。数据加/脱密引擎没有操作界面,在需要时由操作系统自动加载并驻留在内存中,通过内部接口与加密字典管理程序和用户应用程序通讯。数据 库加/脱密引擎由三大模块组成:加/脱密处理模块、用户接口模块和数据库接口模块,如图4所示。其中,"数据库接口模块"的主要工作是接受用户的操作请 求,并传递给"加/脱密处理模块",此外还要代替"加/脱密处理模块"去访问数据库服务器,并完成外部接口参数与加/脱密引擎内部数据结构之间的转换。" 加/脱密处理模块"完成数据库加/脱密引擎的初始化、内部专用命令的处理、加密字典信息的检索、加密字典缓冲区的管理、SQL命令的加密变换、查询结果的 脱密处理以及加脱密算法实现等功能,另外还包括一些公用的辅助函数。

数据加/脱密处理的主要流程如下:

1) 对SQL命令进行语法分析,如果语法正确,转下一步;如不正确,则转6),直接将SQL命令交数据库服务器处理。

2) 是否为数据库加/脱密引擎的内部控制命令?如果是,则处理内部控制命令,然后转7);如果不是则转下一步。

3) 检查数据库加/脱密引擎是否处于关闭状态或SQL命令是否只需要编译?如果是则转6),否则转下一步。

4) 检索加密字典,根据加密定义对SQL命令进行加脱密语义分析。

5) SQL命令是否需要加密处理?如果是,则将SQL命令进行加密变换,替换原SQL命令,然后转下一步;否则直接转下一步。

6) 将SQL命令转送数据库服务器处理。

7) SQL命令执行完毕,清除SQL命令缓冲区。

以上以一个例子说明了在DBMS外层实现加密功能的原理。

5. 结束语

本文对数据库系统安全防入侵技术进行综述,提出了数据库系统的安全体系三个层次框架,并对三个层次的技术手段展开描述。文中还以在DBMS外层实现加密功能的原理为例,详细说明了如何应用数据库管理系统层次的安全技术。

数据库系统安全框架的三个层次是相辅相承的,各层次的防范重点和所采取的技术手段也不尽相同,一个好的安全系统必须综合考虑核运用这些技术,以保证数据的安全。

----------------------------------------------------------------------------------------------------------------------------

数据库安全分析

三大安全风险

数据库是任何商业和公共安全中最具有战略性的资产,通常都保存着重要的商业伙伴和客户信息,这些信息需要被保护起来,以防止竞争者和其他非法者获 取。互联网的急速发展使得企业数据库信息的价值及可访问性得到了提升,同时,也致使数据库信息资产面临严峻的挑战,概括起来主要表现在以下三个层面:

管理层面:主要表现为人员的职责、流程有待完善,内部员工的日常操作有待规范,第三方维护人员的操作监控失效等等,致使安全事件发生时,无法追溯并定位真实的操作者。

技术层面:现有的数据库内部操作不明,无法通过外部的任何安全工具(比如:防火墙、IDS、IPS等)来阻止内部用户的恶意操作、滥用资源和泄露企业机密信息等行为。

审计层面:现有的依赖于数据库日志文件的审计方法,存在诸多的弊端,比如:数据库审计功能的开启会影响数据库本身的性能、数据库日志文件本身存在被篡改的风险,难于体现审计信息的真实性。

伴随着数据库信息价值以及可访问性提升,使得数据库面对来自内部和外部的安全风险大大增加,如违规越权操作、恶意入侵导致机密信息窃取泄漏,但事后却无法有效追溯和审计。

传统数据库安全方案缺陷

传统的审计方案,或多或少存在一些缺陷,主要表现在以下两个方面。

传统网络安全方案:依靠传统的网络防火墙及入侵保护系统(IPS),在网络中检查并实施数据库访问控制策略。但 是网络防火墙只能实现对IP地址、端口及协议的访问控制,无法识别特定用户的具体数据库活动(比如:某个用户使用数据库客户端删除某张数据库表);而 IPS虽然可以依赖特征库有限阻止数据库软件已知漏洞的攻击,但他同样无法判别具体的数据库用户活动,更谈不上细粒度的审计。因此,无论是防火墙,还是 IPS都不能解决数据库特权滥用等问题。

基于日志收集方案:需要数据库软件本身开启审计功能,通过采集数据库系统日志信息的方法形成审计报告,这样的审计方案受限于数据库的审计日志功能和 访问控制功能,在审计深度、审计响应的实时性方面都难以获得很好的审计效果。同时,开启数据库审计功能,一方面会增加数据库服务器的资源消耗,严重影响数 据库性能;另一方面审计信息的真实性、完整性也无法保证。

其他诸如应用程序修改、数据源触发器、统一认证系统授权等等方式,均只能记录有限的信息,更加无法提供细料度的数据库操作审计。

--------------------------------------------------------------------------------------------------------------------------

安全审计

一、数据库安全审计系统主要功能包括:

· 实时监测并智能地分析、还原各种数据库操作。

· 根据规则设定及时阻断违规操作,保护重要的数据库表和视图。

· 实现对数据库系统漏洞、登录帐号、登录工具和数据操作过程的跟踪,发现对数据库系统的异常使用。

· 支持对登录用户、数据库表名、字段名及关键字等内容进行多种条件组合的规则设定,形成灵活的审计策略。

· 提供包括记录、报警、中断和向网管系统报警等多种响应措施。

· 具备强大的查询统计功能,可生成专业化的报表。

二、数据库安全审计系统主要特点

· 采用旁路技术,不影响被保护数据库的性能。

· 使用简单,不需要对被保护数据库进行任何设置。

· 支持SQL-92标准,适用面广,可以支持Oracle、MS SQL Server、Sybase、Informix等多类数据库。

· 审计精细度高,可审计并还原SQL操作语句。

· 采用分布式监控与集中式管理的结构,易于扩展。

· 完备的"三权分立"管理体系,适应对敏感内容审计的管理要求。

----------------------------------------------------------------------------------------------------------------------

安全审计技术分类

常见的安全审计技术主要有四类,分别是:基于日志的审计技术、基于代理的审计技术、基于网络监听的审计技术、基于网关的审计技术。

1.基于日志的审计技术:该技术通常是通过数据库自身功能实现,Oracle、DB2等主流数据库,均具备自身审计功能,通过配置数据库的自审计功能,即可实现对数据库的审计,其典型部署示意图如图2所示:

图2 日志审计技术部署示意

该技术能够对网络操作及本地操作数据库的行为进行审计,由于依托于现有数据库管理系统,因此兼容性很好。

但这种审计技术的缺点也比较明显。首先,在数据库系统上开启自身日志审计对数据库系统的性能就有影响,特别是在大流量情况下,损耗较大;其 次,日志审计记录的细粒度上差,缺少一些关键信息,比如源IP、SQL语句等等,审计溯源效果不好,最后就是日志审计需要到每一台被审计主机上进行配置和 查看,较难进行统一的审计策略配置和日志分析。

2.基于代理的审计技术:该技术是通过在数据库系统上安装相应的审计Agent,在Agent上实现审计策略的配置和日志的采集,常见的产品 如Oracle公司的Oracle Audit Vault、IBM公司的DB2 Audit Management Expert Tool以及第三方安全公司提供的产品,其典型部署示意图如图3所示:

图3 代理审计技术部署示意

该技术与日志审计技术比较类似,最大的不同是需要在被审计主机上安装代理程序。代理审计技术从审计粒度上要优于日志审计技术,但是性能上的损 耗是要大于日志审计技术,因为数据库系统厂商未公开细节,由数据库厂商提供的代理审计类产品对自有数据库系统的兼容性较好,但是在跨数据库系统的支持上, 比如要同时审计Oracle和DB2时,存在一定的兼容性风险。同时由于在引入代理审计后,原数据库系统的稳定性、可靠性、性能或多或少都会有一些影响, 实际的应用面较窄。

3.基于网络监听的审计技术:该技术是通过将对数据库系统的访问流镜像到交换机某一个端口,然后通过专用硬件设备对该端口流量进行分析和还原,从而实现对数据库访问的审计。其典型部署示意图如图4所示:

图4 网络监听审计技术部署示意

该技术最大的优点就是与现有数据库系统无关,部署过程不会给数据库系统带来性能上的负担,即使是出现故障也不会影响数据库系统的正常运行,具备易部署、无 风险的特点;但是,其部署的实现原理决定了网络监听技术在针对加密协议时,只能实现到会话级别审计(即可以审计到时间、源IP、源端口、目的IP、目的端 口等信息),而没法对内容进行审计。不过在绝大多数业务环境下,因为数据库系统对业务性能的要求是远高于对数据传输加密的要求,很少有采用加密通讯方式访 问数据库服务端口的情况,故网络监听审计技术在实际的数据库审计项目中应用非常广泛。

4.基于网关的审计技术:该技术是通过在数据库系统前部署网关设备,通过在线截获并转发到数据库的流量而实现审计,其典型部署示意图如图5所示:

图5 网关审计技术部署示意

该技术是起源于安全审计在互联网审计中的应用,在互联网环境中,审计过程除了记录以外,还需要关注控制,而网络监听方式无法实现很好的控制效 果,故多数互联网审计厂商选择通过串行的方式来实现控制。在应用过程中,这种技术实现方式开始在数据库环境中使用,不过由于数据库环境存在流量大、业务连 续性要求高、可靠性要求高的特点,与互联网环境大相径庭,故这种网关审计技术往往主要运用在对数据库运维审计的情况下,不能完全覆盖所有对数据库访问行为 的审计。

Continue reading 数据库系统安全技术框架综述

Pagination


Total views.

© 2013 - 2019. All rights reserved.

Powered by Hydejack v6.6.1