㈠ Java安全編碼標准誰有,麻煩給我完整版的...
FYI:http://download.csdn.net/detail/xihqm336/7367027
㈡ Java項目中如何實現數據的安全性,比如安全鎖之類的,求代碼
您好來,提問者:
1、重要信息進行自加密操作。
2、地址欄盡量採用post提交方式。
3、如果涉及多線程的話,可以使用Synchronized鎖。
下面例子:
publicclassMain{
publicstaticvoidmain(String[]args){
newThread(newSuo()).start();
newThread(newSuo()).start();
//開啟兩個線程,加鎖之後數據就不會出錯
}
}
classSuoimplementsRunnable{
privatestaticintnum=100;
publicsynchronizedvoidrun(){
while(true){
if(num==0)
break;
else
System.out.println(num--);
}
}
}
㈢ JAVA代碼安全性檢測過程畫出其執行流程圖
去看《JAVA虛擬機》吧,了解一下JAVA代碼在虛擬機中是怎麼運行的,本人實在無能為力。。。
㈣ java培訓的課程表
JAVA培訓課程包括以下內容:HTML/XML語言。 資料庫技術。 Java程序設計。 數據結構與演算法。 Java設計模式。 J2EE設計和應用。 Eclipse/CVS/OpenSource. 軟體測試/安全性編碼技術。 UML設計。 UNIX. 項目實戰等等。
㈤ 求 java安全編碼標准 電子版的圖書800多頁
D正確;A中char只能表示單個字元;B中byte的范圍是-128到127;C0.23默認是double,不是float;
㈥ 如何編寫安全的Java代碼
靜態欄位
" 避免使用非final的公共靜態變數
應盡可能地避免使用非final公共靜態變數,因為無法判斷代碼有無許可權改變這些變數值。
" 一般地,應謹慎使用易變的靜態狀態,因為這可能導致設想中相互獨立的子系統之間發生不可預知的交互。
縮小作用域
作為一個慣例,盡可能縮小方法和欄位的作用域。檢查包訪問許可權的成員能否改成私有的,保護類型的成員可否改成包訪問許可權的或者私有的,等等。
公共方法/欄位
避免使用公共變數,而是使用訪問器方法訪問這些變數。用這種方式,如果需要,可能增加集中安全控制。
對於任何公共方法,如果它們能夠訪問或修改任何敏感內部狀態,務必使它們包含安全控制。
參考如下代碼段,該代碼段中不可信任代碼可能設置TimeZone的值:
private static TimeZone defaultZone = null;
public static synchronized void setDefault(TimeZone zone)
{
defaultZone = zone;
}
保護包
有時需要在全局防止包被不可信任代碼訪問,本節描述了一些防護技術:
" 防止包注入:如果不可信任代碼想要訪問類的包保護成員,可以嘗試在被攻擊的包內定義自己的新類用以獲取這些成員的訪問權。防止這類攻擊的方式有兩種:
1. 通過向java.security.properties文件中加入如下文字防止包內被注入惡意類。
...
package.definition=Package#1 [,Package#2,...,Package#n]
...
這會導致當試圖在包內定義新類時類裝載器的defineClass方法會拋出異常,除非賦予代碼一下許可權:
...
RuntimePermission("defineClassInPackage."+package)
...
2. 另一種方式是通過將包內的類加入到封裝的Jar文件里。
(參看http://java.sun.com/j2se/sdk/1.2/docs/guide/extensions/spec.html)
通過使用這種技巧,代碼無法獲得擴展包的許可權,因此也無須修改java.security.properties文件。
" 防止包訪問:通過限制包訪問並僅賦予特定代碼訪問許可權防止不可信任代碼對包成員的訪問。通過向java.security.properties文件中加入如下文字可以達到這一目的:
...
package.access=Package#1 [,Package#2,...,Package#n]
...
這會導致當試圖在包內定義新類時類裝載器的defineClass方法會拋出異常,除非賦予代碼一下許可權:
...
RuntimePermission("defineClassInPackage."+package)
...
如果可能使對象不可改變
如果可能,使對象不可改變。如果不可能,使得它們可以被克隆並返回一個副本。如果返回的對象是數組、向量或哈希表等,牢記這些對象不能被改變,調用者修改這些對象的內容可能導致安全漏洞。此外,因為不用上鎖,不可改變性能夠提高並發性。參考Clear sensitive information了解該慣例的例外情況。
不要返回指向包含敏感數據的內部數組的引用
該慣例僅僅是不可變慣例的變型,在這兒提出是因為常常在這里犯錯。即使數組中包含不可變的對象(如字元串),也要返回一個副本這樣調用者不能修改數組中的字元串。不要傳回一個數組,而是數組的拷貝。
不要直接在用戶提供的數組里存儲
該慣例僅僅是不可變慣例的另一個變型。使用對象數組的構造器和方法,比如說PubicKey數組,應當在將數組存儲到內部之前克隆數組,而不是直接將數組引用賦給同樣類型的內部變數。缺少這個警惕,用戶對外部數組做得任何變動(在使用討論中的構造器創建對象後)可能意外地更改對象的內部狀態,即使該對象可能是無法改變的
序列化
當對對象序列化時,直到它被反序列化,它不在Java運行時環境的控制之下,因此也不在Java平台提供的安全控制范圍內。
在實現Serializable時務必將以下事宜牢記在心:
" transient
在包含系統資源的直接句柄和相對地址空間信息的欄位前使用transient關鍵字。 如果資源,如文件句柄,不被聲明為transient,該對象在序列化狀態下可能會被修改,從而使得被反序列化後獲取對資源的不當訪問。
" 特定類的序列化/反序列化方法
為了確保反序列化對象不包含違反一些不變數集合的狀態,類應該定義自己的反序列化方法並使用ObjectInputValidation介面驗證這些變數。
如果一個類定義了自己的序列化方法,它就不能向任何DataInput/DataOuput方法傳遞內部數組。所有的DataInput/DataOuput方法都能被重寫。注意默認序列化不會向DataInput/DataOuput位元組數組方法暴露私有位元組數組欄位。
如果Serializable類直接向DataOutput(write(byte [] b))方法傳遞了一個私有數組,那麼黑客可以創建ObjectOutputStream的子類並覆蓋write(byte [] b)方法,這樣他可以訪問並修改私有數組。下面示例說明了這個問題。
你的類:
public class YourClass implements Serializable {
private byte [] internalArray;
....
private synchronized void writeObject(ObjectOutputStream stream) {
...
stream.write(internalArray);
...
}
}
黑客代碼
public class HackerObjectOutputStream extends ObjectOutputStream{
public void write (byte [] b) {
Modify b
}
}
...
YourClass yc = new YourClass();
...
HackerObjectOutputStream hoos = new HackerObjectOutputStream();
hoos.writeObject(yc);
" 位元組流加密
保護虛擬機外的位元組流的另一方式是對序列化包產生的流進行加密。位元組流加密防止解碼或讀取被序列化的對象的私有狀態。如果決定加密,應該管理好密鑰,密鑰的存放地點以及將密鑰交付給反序列化程序的方式等。
" 需要提防的其他事宜
如果不可信任代碼無法創建對象,務必確保不可信任代碼也不能反序列化對象。切記對對象反序列化是創建對象的另一途徑。
比如說,如果一個applet創建了一個frame,在該frame上創建了警告標簽。如果該frame被另一應用程序序列化並被一個applet反序列化,務必使該frame出現時帶有同一個警告標簽。
原生方法
應從以下幾個方面檢查原生方法:
" 它們返回什麼
" 它們需要什麼參數
" 它們是否繞過了安全檢查
" 它們是否是公共的,私有的等
" 它們是否包含能繞過包邊界的方法調用,從而繞過包保護
清除敏感信息
當保存敏感信息時,如機密,盡量保存在如數組這樣的可變數據類型中,而不是保存在字元串這樣的不可變對象中,這樣使得敏感信息可以盡早顯式地被清除。不要指望Java平台的自動垃圾回收來做這種清除,因為回收器可能不會清除這段內存,或者很久後才會回收。盡早清除信息使得來自虛擬機外部的堆檢查攻擊變得困難。
㈦ 怎麼樣才能寫出安全的Java代碼不被黑客攻擊
其實,絕對安全的代碼是不存在的。世界上沒有人能百分百保證他的代碼沒有問題。就內像我們在測試時容追求的不是零bug一樣。當然,通過一定的努力我們是可以寫出相對安全的代碼的。我們完全可以避免絕大多數常見的漏洞,使你的程序盡可能的安全。避免大的損失和信息的泄露。
我認為要想寫出高質量的安全的代碼有以下幾個要點:
第一,跟自己的編程習慣有很大的關系。好的編程習慣可以寫出更加嚴謹安全的代碼。
第二,跟程序員的安全意識有關,如果程序員覺得代碼安不安全跟他無關,沒有安全意識,那他是無論如何也寫不出安全的代碼的
第三,需要有嚴格的檢查措施,來保證程序安全方面的要求。比如可以專門設置經驗豐富的測試人員來檢查源代碼。但是這需要大量的人力事件成本。對項目的推進會有很大影響。據我所知,大多數企業都採用源代碼應用安全掃描軟體來完成這部分的工作。我知道以色列有一款CheckMarx的軟體可以掃描絕大多數的漏洞。在業界非常有名。但這個軟體盜版很少,我原來公司用它,功能強大。
編程習慣和安全意識這方面可以通過自己不斷積累獲得,也可以參加一些培訓。現在市場上有應用安全之類的培訓。希望對你有所幫助。
㈧ Java並發:如何編寫線程安全的代碼
當然是學安全開發嘍。因為網路安全這塊很缺人,企業重金難聘人才,會JAVA的人有很多,但是會Java安全開發的就寥寥無幾了,個人覺得是一個很好的方向。
具體崗位包括:安全開發工程師、代碼審計工程師、安全測試工程師、安全架構工程師、資料庫開發工程師、Web前端工程師等。
自學是可以的,但是前提是自我約束力夠強,學習能力也要比較強。當然也可以選擇報班,報班的話有老師帶可以保證學習最新的知識,知識體系會比較系統化,就業也會有保障。希望可以幫到你,謝謝!
㈨ 慕課網java課程用的編碼格式是什麼看源代碼的時候發現亂碼了,謝謝!
運行java帶有中文的代碼就出現亂碼,解決方式如下:
設置整個java工程的編碼格式為utf-8,如下圖:
設置html的編碼格式為utf-8
㈩ java 編碼練習
小項目就是學員管理系統
C基礎對JAVA幫助不大
初學沒老師的話,建議把C的題目用JAVA做一做, 那個就很基礎了。