国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

您的 Java 代碼安全嗎?

2019-11-18 13:48:56
字體:
供稿:網(wǎng)友

 雖然客戶仍然很關(guān)心您為他們構(gòu)建的應(yīng)用程序的可伸縮性和可用性,但他們可能變得也很關(guān)心安全性,而且要求非凡嚴(yán)格。應(yīng)用程序可能輕易受到兩類安全性威脅的攻擊:靜態(tài)和動(dòng)態(tài)。雖然開發(fā)人員不能完全控制動(dòng)態(tài)威脅,但在開發(fā)應(yīng)用程序時(shí),您可以采取一些預(yù)防措施來消除靜態(tài)威脅。本文概括并解釋了 13 種類型的靜態(tài)暴露 ― 它們是系統(tǒng)中的缺陷,它使系統(tǒng)暴露在想要篡奪該系統(tǒng)的特權(quán)的攻擊者面前。您將學(xué)會(huì)如何處理這些暴露,以及如何發(fā)現(xiàn)(假如不處理這些暴露)這些暴露可能造成的影響。

在開發(fā) java Web 應(yīng)用程序時(shí),您需要確保應(yīng)用程序擁有完善的安全性特征補(bǔ)充。這里在談到 Java 安全性時(shí),我們并不談及 Java 語言提供的安全性 API,也不涉及使用 Java 代碼來保護(hù)應(yīng)用程序。本文將著重討論可能潛伏在您的 Java 應(yīng)用程序中的 安全性暴露。安全性暴露是系統(tǒng)中的缺陷,它使系統(tǒng)無法 ― 即使系統(tǒng)被正常使用 ― 防止攻擊者篡奪對(duì)系統(tǒng)的特權(quán)、控制系統(tǒng)的運(yùn)行、危及系統(tǒng)上的數(shù)據(jù)安全或者假冒未經(jīng)授權(quán)的信任。相對(duì)于安全性暴露,許多開發(fā)人員更加關(guān)心網(wǎng)站的感官效果。

毫無疑問,客戶現(xiàn)在既嚴(yán)格地關(guān)注性能、可伸縮性和可用性也嚴(yán)格地關(guān)注安全性。應(yīng)用程序可能輕易受到兩類安全性威脅的攻擊: 動(dòng)態(tài)和 靜態(tài)。動(dòng)態(tài)威脅是那些同未經(jīng)授權(quán)進(jìn)入系統(tǒng)有關(guān)的威脅,或那些同跨越網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)的完整性、隱私和機(jī)密性有關(guān)的威脅。這些威脅同應(yīng)用程序的功能代碼沒有多大關(guān)系;使用加密、加密術(shù)和認(rèn)證技術(shù)來消除這些威脅。相比之下,靜態(tài)威脅卻同應(yīng)用程序的功能代碼 有關(guān);它們同進(jìn)入系統(tǒng)的授權(quán)用戶所做的事情有關(guān)。未知用戶闖入系統(tǒng)是動(dòng)態(tài)威脅的一個(gè)示例;授權(quán)用戶以未授權(quán)方式操作系統(tǒng)內(nèi)的代碼或數(shù)據(jù)是靜態(tài)威脅的示例。應(yīng)用程序開發(fā)人員并不能完全控制動(dòng)態(tài)威脅;但開發(fā)人員在構(gòu)建應(yīng)用程序時(shí)卻可以采取預(yù)防措施來消除靜態(tài)威脅。

在本文中,我們討論了對(duì)付 13 種不同靜態(tài)暴露的技巧。對(duì)于每種暴露,我們解釋了不處理這些安全性問題所造成的影響。我們還為您推薦了一些準(zhǔn)則,要開發(fā)不受這些靜態(tài)安全性暴露威脅的、健壯且安全的 Java 應(yīng)用程序,您應(yīng)該遵循這些準(zhǔn)則。一有合適的時(shí)機(jī),我們就提供代碼樣本(既有暴露的代碼也有無暴露的代碼)。

對(duì)付高嚴(yán)重性暴露的技巧

請(qǐng)遵循下列建議以避免高嚴(yán)重性靜態(tài)安全性暴露:

·限制對(duì)變量的訪問

·讓每個(gè)類和方法都成為 final,除非有足夠的理由不這樣做

·不要依靠包作用域

·使類不可克隆

·使類不可序列化

·使類不可逆序列化

·避免硬編碼敏感數(shù)據(jù)

·查找惡意代碼

限制對(duì)變量的訪問

假如將變量聲明為 public,那么外部代碼就可以操作該變量。這可能會(huì)導(dǎo)致安全性暴露。

影響

假如實(shí)例變量為 public ,那么就可以在類實(shí)例上直接訪問和操作該實(shí)例變量。將實(shí)例變量聲明為 PRotected 并不一定能解決這一問題:雖然不可能直接在類實(shí)例基礎(chǔ)上訪問這樣的變量,但仍然可以從派生類訪問這個(gè)變量。

清單 1 演示了帶有 public 變量的代碼,因?yàn)樽兞繛?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");

}

}

建議

一般來說,應(yīng)該使用取值方法而不是 public 變量。按照具體問題具體對(duì)待的原則,在確定哪些變量非凡重要因而應(yīng)該聲明為 private 時(shí),請(qǐng)將編碼的方便程度及成本同安全性需要加以比較。清單 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;

}

}



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 大悟县| 尚义县| 含山县| 礼泉县| 丹阳市| 渑池县| 浮梁县| 东丰县| 徐水县| 朔州市| 渝中区| 五寨县| 铜鼓县| 随州市| 皋兰县| 朝阳区| 武乡县| 谷城县| 汾阳市| 长汀县| 容城县| 新绛县| 延安市| 安仁县| 胶南市| 大厂| 蕲春县| 吴旗县| 兴仁县| 法库县| 永城市| 江陵县| 曲阳县| 赤峰市| 视频| 江北区| 紫阳县| 白城市| 常宁市| 墨竹工卡县| 上饶县|