港口危险事故各种应急预案该如何写

港口危险事故各种应急预案该如何写,第1张

第一章 总 则

第一条 为迅速、有效地处置港口危险货物事故,积极抢救受害人员,把事故控制在局部范围内,最大限度地减少事故造成的损失。根据《中华人民共和国港口法》、《中华人民共和国安全生产法》、《危险化学品管理条例》、《港口危险货物管理规定》等法律、法规、规章,结合洞头港口实际,特制定本应急预案。

第二条 本预案适用于洞头港口区域内所有从事经营、装卸、储存、运输、使用、包装危险货物以及对危险货物集装箱进行拆装和作业的港口经营人。

第三条 本预案所称“危险货物”,是指列入国家标准GB12268《危险货物品名表》和国际海事组织制订的《国际海运危险货物运输规则》,具有爆炸、易燃、毒害、腐蚀、放射性等特性,在水路运输、港口装卸和储存等过程中,容易造成人身伤亡和财产毁损而需要特别防护的货物。

第四条 本预案所称的港口危险货物事故是指危险货物在港口装卸、储存、运输过程中可能发生泄漏、火灾、爆炸、出现毒害等重大人身伤亡或重大经济损失的事故。

第五条 温州市港航管理局洞头分局在上级部门和县人民政府的领导下,负责洞头县行政区域内港口的重大危险货物事故应急救援工作的组织和实施。相关企业相应制定适合本辖区本单位有效的危险货物事故应急预案和建立严格的应急处理责任制,切实履行各自职责,保证危险货物事故应急救援工作的正常进行。

第二章 应急救援的组织机构与职责

第六条 重特大事故发生后,按照统一指挥,逐级负责的原则,成立港口危险货物事故应急指挥部,全面指挥、协调此项工作。指挥部下设应急救援办公室、施救处理组、后勤保障组等。

指挥部组成和主要职责:

总指挥部:洞头县人民政府

指挥部:温州市港航管理局洞头分局

指挥部成员:由局领导和职能科室及各港航所负责人组成。

指挥部主要职责:

1.负责制订并完善本港危险货物事故应急预案,建立应急救援网络体系。

2.统一组织指挥全港危险货物事故应急救援工作,统一调配有利于施救的车、船、物资、器材等,统一指挥参加施救的人员,必要时提请总指挥部联系公安、消防、部队、海事等部门参与应急救援工作。

3.督促危险货物港口经营人严格执行《港口法》、《港口危险货物管理规定》,成立本单位的应急救援组织,制定应急预案。

第七条 应急求援办公室设在温州市港航管理局洞头分局港口科。

办公室主要职责:

1.负责接受报警并向指挥部报告,及时传递、发布预警信息;

2.负责与有关部门应急机构保持联系;

3.传达、贯彻、落实上级对事故处理、人员疏散和施救工作的指示;

4.帮助指挥部协调对救助资金的筹集、疏运物资的安排、调运。

5.承办指挥部交办的其他工作。

第八条 施救处理组由港航分局和发生事故企业等相关负责人组成。

主要职责:

1.迅速了解港口危险货物事故发生状况、类别、影响范围等基本情况;根据上级领导与总指挥部的指示精神,制定抢险与救援方案。

2.调配相关人员维护事故现场交通秩序;对事故现场进行保护;

3.负责筹措、征用、调集应急救援所需要的交通工具、器材等;

4.组织指挥现场伤员救治及转送;

5.承担指挥部交办其他工作。

第九条 后勤保障组由港航分局和发生事故企业等相关负责人组成。

主要职责:

1.集中力量,保证抢险救护物资及生产生活急需物资的供应和落实。

2.负责沟通联系现场各部门之间,现场与外界之间的联系;

3.统筹安排,保证现场指挥与上级及各级现场救援小组的及时联系,确保救援工作的不间断;

4.配合其他应急救援小组处理伤亡的救护工作;

5.完成现场指挥部交办的其他任务。

第三章 应急救援准备工作

第十条 在洞头港口区域内所有从事经营、装卸、储存、运输、使用、包装危险货物以及对危险货物集装箱进行拆装和作业的港口经营人要做好如下准备:

1.结合实际制定本单位港口危险货物事故应急预案,明确事故应急工作职责,并报指挥部备案。应急预案的主要内容应当包括:危险货物作业码头、库场、储罐等港口设施的概况、重点部位、应急队伍的组成及职责、应急措施、应急救援流程图、指挥序列表、通信方式、应急人员联络表等。

2.对职工进行安全教育,建立从事港口危险货物现场管理,作业人员持证上岗制度,危险货物港口作业申报制度,提高职工防范港口危险货物事故意识和能力。

3.配备防护服、防毒面具、氧气袋以及其他必要的劳动保护用品和应急器材,并保证在使用时有效。

第十一条 各单位应成立专业(兼职)应急队伍、定期组织应急救援演练,并做好记录、总结、完善预案,提高应急能力。

第四章 事故报告程序与现场保护

第十二条 事故发生后,事故单位应立即做到:

1.迅速采取有效措施,积极组织抢救,防止事故蔓延扩大。

2.立即启动本单位应急预案,迅速报警,同时如实向当地政府、港口行政管理部门和安全生产监督管理局等相关部门报告事故情况。

3.事故报告应包括以下内容

(1)发生事故单位、时间、地点及事故类型;

(2)事故简要经过,伤亡情况;

(3)事故原因和性质的初步判断;

(4)事故抢救处理的情况和采取的措施;

(5)事故的报告单位、报告人和报告时间;

第十三条 事故的现场保护

事故发生单位应努力保护好事故现场,如果因抢救人员、防止事故扩大、恢复生产以及疏通交通等原因,需要移动现场物件的,应当作好标志,采取拍照、摄像、绘图等方法详细记录事故现场原貌,并妥善保存现场主要痕迹、物证等。

第五章 应急预案的启动与实施

第十四条 接到危险货物事故报告后,应迅速启动事故应急预案,采取应急行动,排除事故危险,控制事故进一步扩散。

第十五条 本预案启动时,指挥部总指挥、副总指挥及相关成员立即赶赴事故现场,组织指挥救援工作。

应急反应指挥联络图

第十六条 到达现场有关人员应根据预案规定的职责要求,在总指挥部的统一指挥下,采取有关控制措施,迅速了解事故发生类别、状况、人员伤亡情况、污染程度、财产损失情况、已采取的措施和事故发展的趋势等。

第十七条 各项救援工作均以单位自救为基础。

第十八条 在应急抢险救援过程中需要紧急调用物资、设备、人员和占用场地,任何单位和个人不得阻拦和拒绝。

第六章 附 则

第十九条 参加危险货物事故应急救援工作的人员,应当按照预案的规定,采取安全防护措施。

第二十条 本预案自公布之日起实施。

附件:1.应急组织机构人员名单(略)

2.人员急救应急处理措施

3.火灾应急处理措施

4.污染应急处理措施

附件2 人员急救应急处理措施

当发生人员受伤时,现场负责人应组织人员积极抢救,具体措施如下:

1.当班人员应按报告程序,进行报警;

2.在指挥部成员未到达现场前,当班负责人担任临时现场指挥,首先保护受害人员生命安全,其次保护财产、环境,控制危险源。

3.在伤害事故现场,必须对伤员进行紧急救护减少伤害,将伤员救离事故现场并根据不同情况采取相应的救护措施。

4.伤员抢救出现场后紧急处理

(1)皮肤受危险化学品污染时,救助者应协助伤员脱去被污染的衣服,继之用流动清水和肥皂,彻底冲洗身体被污染部位。头脸部皮肤污染时,要注意眼、耳、鼻、口腔的清洗。

(2)皮肤或眼睛被硝酸、硫酸灼伤,首先用软布或纸巾吸干皮肤或眼睛内酸液。然后用生理盐水或大量清水冲洗至少15分钟,皮肤灼伤处冲洗后可涂上烫伤药膏。对于皮肤上的水泡,不可随意弄破防止感染。

(3)对于中、小面积火烧伤,特别是头、面、四肢等部位,可采取“创面冷却疗法”,用清洁水(自来水、河水、井水等)冷敷或浸泡创面,需持续0.5-1小时,以取出后不痛或稍痛为止。

(4)对中毒昏迷或神志不清的伤员,应置伤员于侧卧位,保持呼吸畅通,清除鼻腔、口腔分泌物等,如伤员呼吸困难,应给予氧气吸入(备用氧气袋),呼吸停止时,要进行人工呼吸抢救。

5.对皮肤、眼睛污染严重、中毒、灼伤、昏迷等严重情况,对伤员进行简单处理后,应立即转送救治,与救助医院联系后,立即用车辆送医院或等待医院救护车。

6.现场急救注意事项

(1)进行急救时,无论伤员或救援人员都需要适当防护,特别是把伤员从严重污染场所救出来,救援人员必须加以预防,避免成为新的受害者。

(2)急救人员应集体行动,每组至少2-3人,以便相互照应。

(3)救援器材必须是防爆的,防止发生火灾。

(4)要注意对伤员污染衣物着重处理,防止发生继发性损害。

附件3 火灾应急处理措施

发生火灾时,现场作业负责人应组织人员积极救灾,具体措施如下:

1.现场作业负责人应按报告程序进行报警。

2.报告的同时,立即切断部分通往火灾电源,关闭泵、阀,拆卸软管并切断通往火灾现场的输油管线上的阀门。

3.其他人员应依据火势情况,迅速携带灭火机站在上风或侧风的方向对着火点进行喷射,启用固定或半固定的消防水系统,用消防喷雾水q对高温区域实施冷却,加强相邻管道的冷却。

4.货物泄漏时立即用砂土筑堤,限制着火货物扩大火势和流入江海。

5.对于趸船或靠泊船甲板上的火灾,一般可采用覆盖办法,用泡沫、砂土、干粉等扑救。

6.所有参加灭火施救人员,均应加强自身保护,灭火施救人员尽量站在上风方向。

7.现场施救人员要时刻注意火势的变化,在无力扑灭火灾的情况下,应立即撤离到安全地带待援。

8.消防部门到达现场后,消防部门现场最高职务者担任火场总指挥,其他人员接受统一调配,积极参加火灾扑救工作。

9.火场总指挥要时刻保持高度警惕,加强与各方联系,根据火势情况调动港区内车、船等设备紧急援助或紧急撤离。

10.火灾扑灭后要彻底检查火场及附近,以防复燃。

11.灭火工作结束后,对受污染或使用后的消防器材必须清理消毒或更新、配齐。

附件4 污染应急处理措施

当发生危险货物泄漏时,作业负责人应组织人员积极施救,具体措施如下:

1.码头作业负责人应按报告程序进行报警。

2.发生泄漏事故后,码头负责人在指挥部成员赶到之前,指挥现场所有人员,迅速进行应急处理。

3.抢险人员根据泄漏情况,组织人员对设备设施进行检修、堵漏,所有在溢、漏警戒区进行抢险作业的人员应穿防护服、戴防毒面具、防护眼镜和手套。

4.在装卸作业时发生泄漏,作业人员应立即停泵、关闭相关阀门。

5.抢险人员对软管道裂缝处,采用临时管夹密封;硬管道洞状泄漏点,采用木楔子封堵。

6.根据泄漏情况划定泄漏警戒区域,泄漏警戒区域内严禁烟火,严禁使用任何非防爆设备。

7.泄漏货物处理时,消防系统处于紧急状态随时准备投用。

8.对泄漏至码头上的货物采用“先控制、后处理”的办法,先用黄砂、干土堵堤,用吸油毡、木屑、草垫、土毛巾吸取,对硝酸、硫酸泄漏用稀碱中和(中和时注意不要使反应太激烈),防止货物流入江海。

9.应急指挥部领导成员应根据现场情况,调整布置堵漏、吸收、中和与围堵并重。

10.一旦危险货物流入江海,现场负责人应立即报告环保、卫生等部门,并告知泄漏货物理化特性。

11.货物流入江海时,用围油栏、吸油索、吸油毡、收油机等设备设施进行处理,尽可能减少危害。

12.对回收的泄漏物放置在专用的容器内,集中处理。

在本文中,我们讨论了对付 13 种不同静态暴露的技巧。对于每种暴露,我们解释了不处理这些安全性问题所造成的影响。我们还为您推荐了一些准则,要开发不受这些静态安全性暴露威胁的、健壮且安全的 Java 应用程序,您应该遵循这些准则。一有合适的时机,我们就提供代码样本(既有暴露的代码也有无暴露的代码)。

对付高严重性暴露的技巧

请遵循下列建议以避免高严重性静态安全性暴露:

限制对变量的访问

让每个类和方法都成为 final,除非有足够的理由不这样做

不要依赖包作用域

使类不可克隆

使类不可序列化

使类不可逆序列化

避免硬编码敏感数据

查找恶意代码

限制对变量的访问

如果将变量声明为 public,那么外部代码就可以 *** 作该变量。这可能会导致安全性暴露。

影响

如果实例变量为 public,那么就可以在类实例上直接访问和 *** 作该实例变量。将实例变量声明为 protected 并不一定能解决这一问题:虽然不可能直接在类实例基础上访问这样的变量,但仍然可以从派生类访问这个变量。

清单 1 演示了带有 public 变量的代码,因为变量为 public 的,所以它暴露了。

清单 1. 带有 public 变量的代码

class Test {

public int id

protected String name

Test(){

id = 1

name = "hello world"

}

//code

}

public class MyClass extends Test{

public void methodIllegalSet(String name){

this.name = name// this should not be allowed

}

public static void main(String[] args){

Test obj = new Test()

obj.id = 123// this should not be allowed

MyClass mc = new MyClass()

mc.methodIllegalSet("Illegal Set Value")

}

}

建议

一般来说,应该使用取值方法而不是 public 变量。按照具体问题具体对待的原则,在确定哪些变量特别重要因而应该声明为 private 时,请将编码的方便程度及成本同安全性需要加以比较。清单 2 演示了以下列方式来使之安全的代码:

清单 2. 不带有 public 变量的代码

class Test {

private int id

private String name

Test(){

id = 1

name = "hello world"

}

public void setId(int id){

this.id = id

}

public void setName(String name){

this.name = name

}

public int getId(){

return id

}

public String getName(){

return name

}

}

让每个类和方法都为 final

不允许扩展的类和方法应该声明为 final。这样做防止了系统外的代码扩展类并修改类的行为。

影响

仅仅将类声明为非 public 并不能防止攻击者扩展类,因为仍然可以从它自己的包内访问该类。

建议

让每个类和方法都成为 final,除非有足够的理由不这样做。按此建议,我们要求您放弃可扩展性,虽然它是使用诸如 Java 语言之类的面向对象语言的主要优点之一。在试图提供安全性时,可扩展性却成了您的敌人;可扩展性只会为攻击者提供更多给您带来麻烦的方法。

不要依赖包作用域

没有显式地标注为 public、private 或 protected 的类、方法和变量在它们自己的包内是可访问的。

影响

如果 Java 包不是封闭的,那么攻击者就可以向包内引入新类并使用该新类来访问您想保护的内容。诸如 java.lang 之类的一些包缺省是封闭的,一些 JVM 也让您封闭自己的包。然而,您最好假定包是不封闭的。

建议

从软件工程观点来看,包作用域具有重要意义,因为它可以阻止对您想隐藏的内容进行偶然的、无意中的访问。但不要依靠它来获取安全性。应该将类、方法和变量显式标注为 public、private 或 protected 中适合您特定需求的那种。

使类不可克隆

克隆允许绕过构造器而轻易地复制类实例。

影响

即使您没有有意使类可克隆,外部源仍然可以定义您的类的子类,并使该子类实现 java.lang.Cloneable。这就让攻击者创建了您的类的新实例。拷贝现有对象的内存映象生成了新的实例;虽然这样做有时候是生成新对象的可接受方法,但是大多数时候是不可接受的。清单 3 说明了因为可克隆而暴露的代码:

清单 3. 可克隆代码

class MyClass{

private int id

private String name

public MyClass(){

id=1

name="HaryPorter"

}

public MyClass(int id,String name){

this.id=id

this.name=name

}

public void display(){

System.out.println("Id ="+id+"

"+"Name="+name)

}

}

// hackers code to clone the user class

public class Hacker extends MyClass implements Cloneable {

public static void main(String[] args){

Hacker hack=new Hacker()

try{

MyClass o=(MyClass)hack.clone()

o.display()

}

catch(CloneNotSupportedException e){

e.printStackTrace()

}

}

}

建议

要防止类被克隆,可以将清单 4 中所示的方法添加到您的类中:

清单 4. 使您的代码不可克隆

public final Object clone()

throws java.lang.CloneNotSupportedException{

throw new java.lang.CloneNotSupportedException()

}

如果想让您的类可克隆并且您已经考虑了这一选择的后果,那么您仍然可以保护您的类。要做到这一点,请在您的类中定义一个为 final 的克隆方法,并让它依赖于您的一个超类中的一个非 final 克隆方法,如清单 5 中所示:

清单 5. 以安全的方式使您的代码可克隆

public final Object clone()

throws java.lang.CloneNotSupportedException {

super.clone()

}

类中出现 clone() 方法防止攻击者重新定义您的 clone 方法。

使类不可序列化

序列化允许将类实例中的数据保存在外部文件中。闯入代码可以克隆或复制实例,然后对它进行序列化。

影响

序列化是令人担忧的,因为它允许外部源获取对您的对象的内部状态的控制。这一外部源可以将您的对象之一序列化成攻击者随后可以读取的字节数组,这使得攻击者可以完全审查您的对象的内部状态,包括您标记为 private 的任何字段。它也允许攻击者访问您引用的任何对象的内部状态。

建议

要防止类中的对象被序列化,请在类中定义清单 6 中的 writeObject() 方法:

清单 6. 防止对象序列化

private final void writeObject(ObjectOutputStream out)

throws java.io.NotSerializableException {

throw new java.io.NotSerializableException("This object cannot

be serialized")

}

通过将 writeObject() 方法声明为 final,防止了攻击者覆盖该方法。

使类不可逆序列化

通过使用逆序列化,攻击者可以用外部数据或字节流来实例化类。

影响

不管类是否可以序列化,都可以对它进行逆序列化。外部源可以创建逆序列化成类实例的字节序列。这种可能为您带来了大量风险,因为您不能控制逆序列化对象的状态。请将逆序列化作为您的对象的另一种公共构造器 — 一种您无法控制的构造器。

建议

要防止对对象的逆序列化,应该在您的类中定义清单 7 中的 readObject() 方法:

清单 7. 防止对象逆序列化

private final void readObject(ObjectInputStream in)

throws java.io.NotSerializableException {

throw new java.io.NotSerializableException("This object cannot

be deserialized")

}

通过将该方法声明为 final,防止了攻击者覆盖该方法。

避免硬编码敏感数据

您可能会尝试将诸如加密密钥之类的秘密存放在您的应用程序或库的代码。对于你们开发人员来说,这样做通常会把事情变得更简单。

影响

任何运行您的代码的人都可以完全访问以这种方法存储的秘密。没有什么东西可以防止心怀叵测的程序员或虚拟机窥探您的代码并了解其秘密。

建议

可以以一种只可被您解密的方式将秘密存储在您代码中。在这种情形下,秘密只在于您的代码所使用的算法。这样做没有多大坏处,但不要洋洋得意,认为这样做提供了牢固的保护。您可以遮掩您的源代码或字节码 — 也就是,以一种为了解密必须知道加密格式的方法对源代码或字节码进行加密 — 但攻击者极有可能能够推断出加密格式,对遮掩的代码进行逆向工程从而揭露其秘密。

这一问题的一种可能解决方案是:将敏感数据保存在属性文件中,无论什么时候需要这些数据,都可以从该文件读取。如果数据极其敏感,那么在访问属性文件时,您的应用程序应该使用一些加密/解密技术。

查找恶意代码

从事某个项目的某个心怀叵测的开发人员可能故意引入易受攻击的代码,打算日后利用它。这样的代码在初始化时可能会启动一个后台进程,该进程可以为闯入者开后门。它也可以更改一些敏感数据。

这样的恶意代码有三类:

类中的 main 方法

定义过且未使用的方法

注释中的死代码

影响

入口点程序可能很危险而且有恶意。通常,Java 开发人员往往在其类中编写 main() 方法,这有助于测试单个类的功能。当类从测试转移到生产环境时,带有 main() 方法的类就成为了对应用程序的潜在威胁,因为闯入者将它们用作入口点。

请检查代码中是否有未使用的方法出现。这些方法在测试期间将会通过所有的安全检查,因为在代码中不调用它们 — 但它们可能含有硬编码在它们内部的敏感数据(虽然是测试数据)。引入一小段代码的攻击者随后可能调用这样的方法。

避免最终应用程序中的死代码(注释内的代码)。如果闯入者去掉了对这样的代码的注释,那么代码可能会影响系统的功能性。

可以在清单 8 中看到所有三种类型的恶意代码的示例:

清单 8. 潜在恶意的 Java 代码

public void unusedMethod(){

// code written to harm the system

}

public void usedMethod(){

//unusedMethod()//code in comment put with bad intentions,

//might affect the system if uncommented

// int x = 100

// x=x+10 //Code in comment, might affect the

//functionality of the system if uncommented

}

建议

应该将(除启动应用程序的 main() 方法之外的)main() 方法、未使用的方法以及死代码从应用程序代码中除去。在软件交付使用之前,主要开发人员应该对敏感应用程序进行一次全面的代码评审。应该使用“Stub”或“dummy”类代替 main() 方法以测试应用程序的功能。

对付中等严重性暴露的技巧

请遵循下列建议以避免中等严重性静态安全性暴露:

不要依赖初始化

不要通过名称来比较类

不要使用内部类

不要依赖初始化

您可以不运行构造器而分配对象。这些对象使用起来不安全,因为它们不是通过构造器初始化的。

影响

在初始化时验证对象确保了数据的完整性。

例如,请想象为客户创建新帐户的 Account 对象。只有在 Account 期初余额大于 0 时,才可以开设新帐户。可以在构造器里执行这样的验证。有些人未执行构造器而创建 Account 对象,他可能创建了一个具有一些负值的新帐户,这样会使系统不一致,容易受到进一步的干预。

建议

在使用对象之前,请检查对象的初始化过程。要做到这一点,每个类都应该有一个在构造器中设置的私有布尔标志,如清单 9 中的类所示。在每个非 static 方法中,代码在任何进一步执行之前都应该检查该标志的值。如果该标志的值为 true,那么控制应该进一步继续;否则,控制应该抛出一个例外并停止执行。那些从构造器调用的方法将不会检查初始化的变量,因为在调用方法时没有设置标志。因为这些方法并不检查标志,所以应该将它们声明为 private 以防止用户直接访问它们。

清单 9. 使用布尔标志以检查初始化过程

public class MyClass{

private boolean initialized = false

//Other variables

public MyClass (){

//variable initialization

method1()

initialized = true

}

private void method1(){ //no need to check for initialization variable

//code

}

public void method2(){

try{

if(initialized==true){

//proceed with the business logic

}

else{

throw new Exception("Illegal State Of the object")

}

}catch(Exception e){

e.printStackTrace()

}

}

}

如果对象由逆序列化进行初始化,那么上面讨论的验证机制将难以奏效,因为在该过程中并不调用构造器。在这种情况下,类应该实现 ObjectInputValidation 接口:

清单 10. 实现 ObjectInputValidation

interface java.io.ObjectInputValidation {

public void validateObject() throws InvalidObjectException

}

所有验证都应该在 validateObject() 方法中执行。对象还必须调用 ObjectInputStream.RegisterValidation() 方法以为逆序列化对象之后的验证进行注册。 RegisterValidation() 的第一个参数是实现 validateObject() 的对象,通常是对对象自身的引用。注:任何实现 validateObject() 的对象都可能充当对象验证器,但对象通常验证它自己对其它对象的引用。RegisterValidation() 的第二个参数是一个确定回调顺序的整数优先级,优先级数字大的比优先级数字小的先回调。同一优先级内的回调顺序则不确定。

当对象已逆序列化时,ObjectInputStream 按照从高到低的优先级顺序调用每个已注册对象上的 validateObject()。

不要通过名称来比较类

有时候,您可能需要比较两个对象的类,以确定它们是否相同;或者,您可能想看看某个对象是否是某个特定类的实例。因为 JVM 可能包括多个具有相同名称的类(具有相同名称但却在不同包内的类),所以您不应该根据名称来比较类。

影响

如果根据名称来比较类,您可能无意中将您不希望授予别人的权利授予了闯入者的类,因为闯入者可以定义与您的类同名的类。

例如,请假设您想确定某个对象是否是类 com.bar.Foo 的实例。清单 11 演示了完成这一任务的错误方法:

清单 11. 比较类的错误方法

if(obj.getClass().getName().equals("Foo")) // Wrong!

// objects class is named Foo

}else{

// object's class has some other name

}

建议

在那些非得根据名称来比较类的情况下,您必须格外小心,必须确保使用了当前类的 ClassLoader 的当前名称空间,如清单 12 中所示:

清单 12. 比较类的更好方法

if(obj.getClass() == this.getClassLoader().loadClass("com.bar.Foo")){

// object's class is equal to

//the class that this class calls "com.bar.Foo"

}else{

// object's class is not equal to the class that

// this class calls "com.bar.Foo"

}

然而,比较类的更好方法是直接比较类对象看它们是否相等。例如,如果您想确定两个对象 a 和 b 是否属同一个类,那么您就应该使用清单 13 中的代码:

清单 13. 直接比较对象来看它们是否相等

if(a.getClass() == b.getClass()){

// objects have the same class

}else{

// objects have different classes

}

尽可能少用直接名称比较。

不要使用内部类

Java 字节码没有内部类的概念,因为编译器将内部类转换成了普通类,而如果没有将内部类声明为 private,则同一个包内的任何代码恰好能访问该普通类。

影响

因为有这一特性,所以包内的恶意代码可以访问这些内部类。如果内部类能够访问括起外部类的字段,那么情况会变得更糟。可能已经将这些字段声明为 private,这样内部类就被转换成了独立类,但当内部类访问外部类的字段时,编译器就将这些字段从专用(private)的变为在包(package)的作用域内有效的。内部类暴露了已经够糟糕的了,但更糟糕的是编译器使您将某些字段成为 private 的举动成为徒劳。

建议 如果能够不使用内部类就不要使用内部类。

对付低严重性暴露的技巧

请遵循下列建议以避免低严重性静态安全性暴露:

避免返回可变对象

检查本机方法

避免返回可变对象

Java 方法返回对象引用的副本。如果实际对象是可改变的,那么使用这样一个引用调用程序可能会改变它的内容,通常这是我们所不希望见到的。

影响

请考虑这个示例:某个方法返回一个对敏感对象的内部数组的引用,假定该方法的调用程序不改变这些对象。即使数组对象本身是不可改变的,也可以在数组对象以外 *** 作数组的内容,这种 *** 作将反映在返回该数组的对象中。如果该方法返回可改变的对象,那么事情会变得更糟;外部实体可以改变在那个类中声明的 public 变量,这种改变将反映在实际对象中。

清单 14 演示了脆弱性。getExposedObj() 方法返回了 Exposed 对象的引用副本,该对象是可变的:

清单 14. 返回可变对象的引用副本

class Exposed{

private int id

private String name

public Exposed(){

}

public Exposed(int id, String name){

this.id = id

this.name = name

}

public int getId(){

return id

}

public String getName(){

return name

}

public void setId(int id){

this.id=id

}

public void setName(String name){

this.name = name

}

public void display(){

System.out.println("Id = "+ id + " Name = "+ name)

}

}

public class Exp12{

private Exposed exposedObj = new Exposed(1,"Harry Porter")

public Exposed getExposedObj(){

return exposedObj //returns a reference to the object.

}

public static void main(String[] args){

Exp12 exp12 = new Exp12()

exp12.getExposedObj().display()

Exposed exposed = exp12.getExposedObj()

exposed.setId(10)

exposed.setName("Hacker")

exp12.getExposedObj().display()

}

}

建议

如果方法返回可改变的对象,但又不希望调用程序改变该对象,请修改该方法使之不返回实际对象而是返回它的副本或克隆。要改正清单 14 中的代码,请让它返回 Exposed 对象的副本,如清单 15 中所示:

清单 15. 返回可变对象的副本

public Exposed getExposedObj(){

return new Exposed(exposedObj.getId(),exposedObj.getName())

}

或者,您的代码也可以返回 Exposed 对象的克隆。

检查本机方法

本机方法是一种 Java 方法,其实现是用另一种编程语言编写的,如 C 或 C++。有些开发人员实现本机方法,这是因为 Java 语言即使使用即时(just-in-time)编译器也比许多编译过的语言要慢。其它人需要使用本机代码是为了在 JVM 以外实现特定于平台的功能。

影响

使用本机代码时,请小心,因为对这些代码进行验证是不可能的,而且本机代码可能潜在地允许 applet 绕过通常的安全性管理器(Security Manager)和 Java 对设备访问的控制。

建议

如果非得使用本机方法,那么请检查这些方法以确定:

它们返回什么

它们获取什么作为参数

它们是否绕过安全性检查

它们是否是 public、private 等等

它们是否含有绕过包边界从而绕过包保护的方法调用

结束语

编写安全 Java 代码是十分困难的,但本文描述了一些可行的实践来帮您编写安全 Java 代码。这些建议并不能解决您的所有安全性问题,但它们将减少暴露数目。最佳软件安全性实践可以帮助确保软件正常运行。安全至关重要和高可靠系统设计者总是花费大量精力来分析和跟踪软件行为。只有通过将安全性作为至关紧要的系统特性来对待 — 并且从一开始就将它构建到应用程序中,我们才可以避免亡羊补牢似的、修修补补的安全性方法。

参考资料

请通过单击文章顶部或底部的讨论来参加本文的论坛。

了解关于 Java 安全性 API 的更多知识。

developerWorks 安全专题上通常含有有关计算机安全性的优秀资源。

Larry Koved、 Anthony J. Nadalin、Don Neal 和 Tim Lawson 合作编写的 “The evolution of Java security”(developerWorks,1998 年)对 Java 语言的安全性模型早期开发进行了深入探讨。

Sing Li 在他的 Java 安全性系列文章(由两部分组成的)(developerWorks, 2001 年 2 月)中向开发人员显示:尽管社区可能不得不重新考虑 Java 2 中的安全性设计,还是出现了只对开发人员有帮助,可以满足他们的需求的一致的进展:

第一部分

第二部分

John Viega、Tom Mutdosch、 Gary McGraw 和 Ed Felten 合著的 “Statically scanning Java code for security vulnerabilities” (IEEE Software,2000 年 9 月)介绍了一种 Java 工具,可以使用该工具来检查您的 Java 代码中的安全性漏洞。

G. McGraw 和 E. Felten 合作编写的 Securing Java: Getting Down to Business with Mobile Code(John Wiley 和 Sons,1998 年)深入涵盖了 Java 安全性。(文档是 PDF 格式的。)

定期检查 IBM 研究 Java 安全页面以便 IBM 在安全性领域的创新有重要发展时能够跟踪这一创新。

如果您的 Java 代码运行在 S/390 系统上,那么您将需要查阅 S/390 Java 安全页面以获取额外的信息。

关于作者

Bijaya Nanda Sahu 是就职于印度 IBM Global Services 的软件工程师。他从事过各种因特网技术和框架(J2EE、WSBCC、JADE)、 WebSphere 相关技术、UML 和 OOAD 方面的工作。目前,他从事因特网银行安全性问题方面的工作,重点在 WebSphere Application Server 和 Portal Server 上。可以通过 [email protected] 和他联系

玖玖泰丰,十年验厂老品牌,助您一次性通过验厂!以下资料由深圳玖玖泰丰企业管理顾问有限公司提供,

1. 目的:对公司范围内的危险源进行辨识,评价确定出重大职业健康安全风险,并就此制定职业健康安全风险控制措施。

2. 适用范围:适用于公司范围内危险源的辨识、风险评价和风险控制的策划。

3. 权责:

3.1工务课负责组织危险源辨识、风险评价和风险控制策划的工作。

3.2各相关部门配合、参与危险源辨识、风险评价和风险控制策划的工作。

3.3 管理者代表批准重大职业健康安全风险及风险控制措施。

4. 工作程序:

4.1危险源辨识、风险评价和风险控制策划的时机。。

4.1.1以全体部门为对象,每年进行一次。

4.1.3在相关法规变更,公司的活动、产品、服务、运行条件,以及相关方的要求等情况发生变化时,可适时进行危险源辨识、风险评价和风险控制的策划。

4.2危险源辨识。

4.2.1工务课将“危险源识别和风险评估表”发放到相关部门。

4.2.2各相关部门组织人员从其活动、产品、服务、运行条件中找出能够控制或可望施加影响的危险源,填写“危险源识别和风险评估表”并反馈到行政部。

4.2.3对公司共用的设施设备、建筑物及其周边地带的危险源辨识,由行政部进行。

4.2.4工务课对收集回来的“危险源识别和风险评估表”进行统计和分析,整理出全公司的“危险源识别和风险评估表”。

4.3风险评价。

4.3.1工务课依据“危险源识别和风险评估表”,组织相关部门和人员采定性的方法进行风险评价。

4.3.2风险级别的确定。

以事故后果的严重性等级(见表1)作为表的列项目,以事故发生的可能性等级(见表2)作为表的行项目,制成二维表格,在行列的交点上得出风险的级别(见表3)

表1 事故后果的严重性等级

严重性等级 等级说明 事故后果说明

Ⅰ 严重伤害 出现多人伤亡

Ⅱ 一般伤害 人员严重受伤,严重职业病

Ⅲ 轻微伤害 人员轻度受作,轻度职业病

表2 事故发生的可能性等级

可能性等级 等级说明 事故发生的情况

A 很可能 可能性极大

B 极少 有可能发生

C 不可能 很不可能,以至于可以认为不会发生

表3 OHS风险评估分级确定表

风 严重性等级

可能性等级 轻微伤害(Ⅲ) 一般伤害(Ⅱ) 严重伤害(Ⅰ)

不可能(C) 5级 4级 3级

极少(B) 4级 3级 2级

很可能(A) 3级 2级 1级

4.3.3风险级别的含义。

表4 风险级别的含义

风险级别 风险级别的含义

1级风险(不可容许风险) 事故潜在危险性很大,并难以控制,发生事故的可能性已极大,一旦发生事故将会造成很多人伤亡的风险

2级风险(重大风险) ◆事故潜在危险性较大,较难控制,发生频率较高或可能性较大,容易发生重伤或多人伤害;或者会造成多人伤亡,但事故发生可能性一般的风险

◆粉尘、噪声、毒物作业危险程度分级达Ⅲ、Ⅳ级者

3级风险(中度风险) ◆虽然导致重大伤害事故的可能性小,但经常发生事故或未遂过失,潜伏有伤亡事故发生的危险

◆粉尘、噪声、毒物作业危害程度分级达Ⅰ、Ⅱ级者,高温作业危害程度分及达Ⅲ、Ⅳ级者

4级风险(可容许风险) ◆具有一定危险性,虽然重伤可能性极小,但有可能发生一般伤害事故的风险

◆高温作业危害程度分级达Ⅰ、Ⅱ级者;或粉尘、噪声、高温、毒物作业危害程度分级为安全作业,但对职工休息和健康有影响者

5级风险(可忽略风险) 危险性小,不会伤人的风险

4.3.4 重大风险的确定

4.3.4.1 确定重大风险的准则

①1、2、3、4级风险,要确定为重大风险。

②下述情况可直接确定为重大风险;

a) 违反相关法律、法规和标准的。

b)相关方有合理抱怨或要求的。

c)曾经发生过事故,至今未采取防范、控制措施的。

d)直接观察到可能导致危险的错误,且无适当控制措施的。

4.4风险控制策划。

4.4.1根据风险评价结果,策划风险控制措施。

4.5当公司的活动、产品、服务发生较大变化或法规及其他要求更新时,各部门应及时对危险源进行补充辨识,并报行政部进行风险评价以重新确定重大职业健康安全风险并进行风险控制策划。

5.记录

5.1危险源识别和风险评估表


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12019056.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存