導航:首頁 > 程序命令 > web程序員防黑

web程序員防黑

發布時間:2022-05-15 19:28:21

⑴ 怎麼防止黑客入侵,不讓他輕易的破壞電腦

如何成為一名黑客 什麼是黑客? Jargon File中對「黑客」一詞給出了很多個定義,大部分定義都涉及高超的編程技術,強烈的解決問題和克服限制的慾望。如果你想知道如何成為一名黑客,那麼好,只有兩方面是重要的。(態度和技術) 長久以來,存在一個專家級程序員和網路高手的共享文化社群,其歷史可以追溯到幾十年前第一台分時共享的小型機和最早的ARPAnet實驗時期。 這個文化的參與者們創造了「黑客」這個詞。 黑客們建起了Internet。黑客們使Unix操作系統成為今天這個樣子。黑客們搭起了Usenet。黑客們讓WWW正常運轉。如果你是這個文化的一部分,如果你已經為它作了些貢獻,而且圈內的其他人也知道你是誰並稱你為一個黑客,那麼你就是一名黑客。 黑客精神並不僅僅局限於軟體黑客文化圈中。有些人同樣以黑客態度對待其它事情如電子和音樂---事實上,你可以在任何較高級別的科學和藝術中發現它。軟體黑客們識別出這些在其他領域同類並把他們也稱作黑客---有人宣稱黑客實際上是獨立於他們工作領域的。 但在本文中,我們將注意力集中在軟體黑客的技術和態度,以及發明了「黑客」一詞的哪個共享文化傳統之上。 另外還有一群人,他們大聲嚷嚷著自己是黑客,實際上他們卻不是。他們是一些蓄意破壞計算機和電話系統的人(多數是青春期的少年)。真正的黑客把這些人叫做「駭客」(cracker),並不屑與之為伍。多數真正的黑客認為駭客們是些不負責任的懶傢伙,還沒什麼大本事。專門以破壞別人安全為目的的行為並不能使你成為一名黑客, 正如拿根鐵絲能打開汽車並不能使你成為一個汽車工程師。不幸的是,很多記者和作家往往錯把「駭客」當成黑客;這種做法激怒真正的黑客。 根本的區別是:黑客們建設,而駭客們破壞。 如果你想成為一名黑客,繼續讀下去。如果你想做一個駭客,去讀 alt.2600 新聞組,並在發現你並不像自己想像的那麼聰明的時候去坐5到10次監獄。 關於駭客,我只想說這么多。 ---黑客的態度 黑客們解決問題,建設事物,信仰自由和雙向的幫助,人人為我, 我為人人。 要想被認為是一名黑客,你的行為必須顯示出你已經具備了這種態度。要想做的好象你具備這種態度,你就不得不真的具備這種態度。但是如果你想靠培養黑客態度在黑客文化中得到承認,那就大錯特錯了。因為成為具備這些特質的這種人對你自己非常重要,有助於你學習,並給你提供源源不斷的活力。同所有有創造性的藝術一樣,成為大師的最有效方法就是模仿大師的精神---不是僅從理智上,更要從感情上進行模仿。 So,如果你想做一名黑客,請重復以下事情直到你相信它們: 1 這世界充滿待解決的迷人問題 做一名黑客有很多樂趣,但卻是些要費很多氣力方能得到的樂趣。 這些努力需要動力。成功的運動員從健壯體魄,挑戰自我極限中汲取動力。同樣,做黑客,你必須 要有從解決問題,磨練技術,鍛煉智力中得到基本的熱望。如果你還不是這類人又想做黑客,你就要設法成為這樣的人。否則你會發現,你的黑客熱情會被其他誘惑無情地吞噬掉---如金錢、性和社會上的虛名。 (同樣你必須對你自己的學習能力建立信心---相信盡管你對某問題所知不多,但如果你一點一點地學習、試探,你最終會掌握並解決它。) 2. 一個問題不應該被解決兩次 聰明的腦瓜是寶貴的,有限的資源。當這個世界還充滿其他有待解決的有趣問題之時,他們不應該被浪費在重新發明輪子這些事情上。 作為一名黑客,你必須相信其他黑客的思考時間是寶貴的---因此共享信息,解決問題並發布結果給其他黑客幾乎是一種道義,這樣其他人就可以去解決新問題而不是重復地對付舊問題。 (你不必認為你一定要把你的發明創造公布出去,但這樣做的黑客是贏得大家尊敬最多的人。賣些錢來給自己養家糊口,買房買車買計算機甚至發大財和黑客價值也是相容的,只要你別忘記你還是個黑客。) 3. 無聊和乏味的工作是罪惡 黑客們應該從來不會被愚蠢的重復性勞動所困擾,因為當這種事情發生時就意味著他們沒有在做只有他們才能做的事情---解決新問題。這樣的浪費傷害每一個人。因此,無聊和乏味的工作不僅僅是令人不舒服而已,它們是極大的犯罪。 要想做的象個黑客,你必須完全相信這點並盡可能多地將乏味的工作自動化,不僅為你自己,也為了其他人(尤其是其他黑客們)。 (對此有一個明顯的例外。黑客們有時也做一些重復性的枯燥工作以進行「腦力休息」,或是為練熟了某個技巧,或是獲得一些除此無法獲得的經驗。但這是他自己的選擇---有腦子的人不應該被迫做無聊的活兒。) 4 自由就是好 黑客們是天生的反權威主義者。任何能向你發命令的人會迫使你停止解決令你著迷的問題,同時,按照權威的一般思路,他通常會給出一些極其愚昧的理由。因此,不論何時何地,任何權威,只要他壓迫你或其他黑客,就要和他斗到底。 (這並非說任何權力都不必要。兒童需要監護,罪犯也要被看管起來。 如果服從命令得到某種東西比起用其他方式得到它更節約時間,黑客會同意接受某種形式的權威。但這是一個有限的、特意的交易;權力想要的那種個人服從不是你的給予,而是無條件的服從。) 權力喜愛審查和保密。他們不信任自願的合作和信息共享---他們只喜歡由他們控制的合作。因此,要想做的象個黑客,你得對審查、保密,以及使用武力或欺騙去壓迫人們的做法有一種本能的反感和敵意。 5. 態度不能替代能力 要做一名黑客,你必須培養起這些態度。但只具備這些態度並不能使你成為一名黑客,就象這並不能使你成為一個運動健將和搖滾明星一樣。成為一名黑客需要花費智力,實踐,奉獻和辛苦。 因此,你必須學會不相信態度,並尊重各種各樣的能力。黑客們不會為那些故意裝模做樣的人浪費時間,但他們卻非常尊重能力---尤其是做黑客的能力,不過任何能力總歸是好的。具備很少人才能掌握的技術方面的能力尤其為好,而具備那些涉及腦力、技巧和聚精會神的能力為最好。 如果你尊敬能力,你會享受提高自己能力的樂趣---辛苦的工作和奉獻會變成一種高度娛樂而非賤役。 要想成為一名黑客,這一點非常重要。 基本黑客技術 黑客態度是重要的,但技術更加重要。態度無法替代技術,在你被別的黑客稱為黑客之前,有一套基本的技術你必須掌握。 這套基本技術隨著新技術的出現和老技術的過時也隨時間在緩慢改變。例如,過去包括使用機器碼編程,而知道最近才包括了HTML語言。但現在明顯包括以下技術: 1 學習如何編程 這當然是最基本的黑客技術。如果你還不會任何計算機語言,我建議你從python開始。它設計清晰,文檔齊全,對初學者很合適。盡管是一門很好的初級語言,它不僅僅只是個玩具。它非常強大,靈活,也適合做大型項目。 但是記住,如果你只會一門語言,你將不會達到黑客所要求的技術水平,甚至也不能達到一個普通程序員的水平---你需要學會如何以一個通用的方法思考編程問題,獨立於任何語言。要做一名真正的黑客,你需要學會如何在幾天內通過一些手冊,結合你現在所知,迅速掌握一門新語言。這意味著你應該學會幾種不同的語言。 如果要做一些重要的編程,你將不得不學習C語言,Unix的核心語言。其他對黑客而言比較重要的語言包括Perl和LISP。 Perl很實用,值得一學;它被廣泛用於活動網頁和系統管理,因此即便你從不用Perl寫程序,至少也應該能讀懂它。 LISP 值得學習是因為當你最終掌握了它你會得到豐富的經驗;這些經驗使你在以後的日子裡成為一個更好的程序員,即使你實際上可能很少使用LISP本身。 當然,實際上你最好四種都會。 (Python, C, Perl, and LISP). 除了是最重要的四種基本語言,它們還代表了四種非常不同的編程方法,每種都會讓你受益非淺。 這里我無法完整地教會你如何編程---這是個復雜的活兒。但我可以告訴你,書本和課程也不能作到。幾乎所有最好的黑客都是自學成材的。真正能起作用的就是去親自讀代碼和寫代碼。 學習如何編程就象學慣用自然語言寫作一樣。最好的做法是讀一些大師的名著,試著自己寫點東西,再讀些,再寫點,又讀些,又寫點....如此往復,直到你達到自己在範文中看到的簡潔和力量。 過去找到好的代碼去讀是困難的,因為很少有大型程序的可用源代碼能讓新手練手。這種狀況已經得到了很大的改善;現在有很多可用的開放源碼軟體,編程工具和操作系統(全都有黑客寫成)。這使我們自然地來到第二個話題... 2 得到一個開放源碼的Unix並學會使用、運行它 我假設你已經擁有了一台個人計算機或者有一個可用的( 今天的孩子們真幸福 :-) )。新手們最基本的一步就是得到一份Linux或BSD-Unix,安裝在個人計算機上,並運行它。 當然,這世界上除了Unix還有其他操作系統。但它們都是以二進制形式發送的---你無法讀到它的源碼,更不可能修改它。嘗試在DOS或Windows的機器上學習黑客技術,就象是在腿上綁了鐵塊去學跳舞。 除此之外,Unix還是Internet的操作系統。你可以不知道Unix而學會用Internet,但不懂它你就無法成為一名Internet黑客。因為這個原因,今天的黑客文化在很大程度上是以Unix為中心的。(這點並不總是真的,一些很早的黑客對此很不高興,但Unix和Internet之間的共生關系已是如此之強,甚至連微軟也無可奈何) So,裝一個Unix---我個人喜歡Linux,不過也有其他選擇。(你也可以在同一台機器上同時運行DOS,Windows和Linux)學會它。運行它。用它跟Internet對話。讀它的代碼。試著去修改他。你會得到比微軟操作系統上好的多的編程工具(包括C,Lisp, Python, and Perl),你會得到樂趣,並將學到比你想像的更多知識。 關於學習Unix的更多信息,請看 The Loginataka. 要得到Linux,請看: 哪裡能得到 Linux. 3 學會如何使用WWW和寫HTML 大多黑客文化建造的東西都在你看不見的地方發揮著作用,幫助工廠、辦公室和大學正常運轉,表面上很難看到它對他人的生活的影響。Web是一個大大的例外。即便政客也同意,這個巨大而耀眼的黑客玩具正在改變整個世界。單是這個原因(還有許多其它的), 你就需要學習如何掌握Web。 這並不是僅僅意味著如何使用瀏覽器(誰都會),而是要學會如何寫HTML,Web的標記語言。如果你不會編程,寫HTML會教你一些有助於學習的思考習慣。因此,先建起自己的主頁。 但僅僅建一個主頁也不能使你成為一名黑客。 Web里充滿了各種網頁。多數是無意義的,零信息量垃圾。 要想有價值,你的網頁必須有內容---必須有趣或對其它黑客有用。這樣,我們來到下一個話題.... 黑客文化中的地位大教堂與集市」,解釋了許多Linux和開放源碼文化的運做原理。我還在它的續集「大教堂與集市」,解釋了許多Linux和開放源碼文化的運做原理。我還在它的續集「開拓智域」一文中有更直接的論述。 FAQ(常問問題解答) 問:你會教我如何做黑客嗎? 自從第一次發布此頁,我每周都會得到一些請求,要我「教會他如何做黑客」;遺憾的是,我沒有足夠的時間和精力來做這個;我自己的編程項目已經佔用了我110%的時間。 甚至即便我想教你也不可能,黑客基本上是一項需要你自行修煉的的態度和技術。你會發現即使真正的黑客想幫助你,如果你乞求他們填鴨一樣教你的話,你不會贏得他們的尊敬。 首先去學習。顯示你在嘗試,你能靠自己去學習。然後再去向黑客們請教問題。 問:你會幫我「黑」掉一個站點嗎?或者教我怎麼黑它? No. 任何在讀完FAQ後還問此問題人,都是愚不可及的傢伙,即使有時間我也不會理睬。 任何發給我的此類mail都會被忽略或被痛斥。 問:哪裡能找到真正的可以與之交流的黑客? 最佳辦法是就近參加一個Unix或Linux的用戶組,參加他們的會議。 問:我該先學哪種語言? HTML, 如果你還不會的話. 但它不是一個真正的編程語言。當你准備編程時,我建議你從 Python開始. 會有很多人向你推薦Perl,它比Python還受歡迎,但卻難學一些。 C 是非常重要的,但它卻是最難學的。不要一開始就嘗試學C。 問:開放源碼的自由軟體不會使程序員餓肚子嗎? 這似乎不大可能---到目前,開放源碼軟體產業創造了而不是消滅了大量工作機會。 如果寫一個程序比不寫一個程序只是個純粹經濟上的收益的話,無論它是否免費,只要它被完成,程序員都會從中得到回報。而且,無論軟體是由多麼的free的方法開發的,對更新的軟體應用的需求總是會有的。 問:我從何學起?哪裡有免費的Unix? 本頁的其他地方指向最常用的免費Unix。要做一名黑客,你需要自立自強,以及自我教育的能力。 現在開始吧...... 黑客技術交流超級群,僅提供技術交流,群①28671133已滿 群②81709181 很榮幸能夠為你解答. 本人QQ:2201117

⑵ 怎麼樣才能寫出安全的java代碼不被黑客攻擊

在本文中,我們討論了對付 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」或「mmy」類代替 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] 和他聯系

⑶ 網站被人攻擊了有什麼防禦

其實畢竟攻防都是消耗資源的,雲盾,帝域DNS可以進一步考慮下來,尤其是DNS的類型決議,用SEO優化的特殊保護功能,可以進行 將搜索引擎的方向性解析出來,將遊客和智能蜘蛛區分開,你會說分辨代碼也可以實現蜘蛛,只要達到效果,意思就不重要了,DNS可以保護帝域到你的 現場即使不開放,排名也不受影響,分開了兩個空間操作,dns緩解攻擊帶來的網站seo影響。

⑷ 網站建設與管理

1.建立網站的目的

這是網站規劃中的核心問題,需要非常明確和具體。建立網站的目的也就是一個網站的目標定位問題,網站的功能和內容,以及各種網站推廣策略都是為了實現網站的預期目的。建立網站可以有多種目的,例如,從事直接網上銷售、作為產品信息發布工具、信息中介服務、教育和培訓等等,不同類型的網站其表達方式和實現手段是不一樣的。

2.域名和網站名稱
一個好的域名對網路營銷的成功具有重要意義,網站名稱同域名一樣具有重要意義,域名和網站名稱應該在網站規劃階段就作為重要內容來考慮。有些網站發布一段時間之後才發現域名或者網站名稱不太合適,需要重新更改,不僅非常麻煩,而且前期的推廣工作幾乎沒有任何價值,同時對自己網站形象也造成一定的傷害
這種現象在早期的一些網站中很普遍,例如搜狐(http://sohu.com ) 曾用http://sohoo.com.cn 作為域名,網易(http://netease.com )的前身是http://nease.net ,而新浪網(http://sina.com.cn)早期的域名是http://srsnet.com 。雖然這些網站現在都已發展成為國內著名的門戶網站,且在那斯達克成功上市,但是,從它們域名的演變也可以看出當初曾經走過的彎路,值得我們認真思考和借鑒。

3. 網站的主要功能
在確定了網站目標和名稱之後,要設計網站的功能了,網站功能是戰術性的,是為了實現網站的目標。網站的功能是為用戶提供服務的基本表現形式。一般來說,一個網站有幾個主要的功能模塊,這些模塊體現了一個網站的核心價值。

4. 網站技術解決方案
根據網站的功能確定網站技術解決方案,應重點考慮下列幾個方面:
(1)是採用自建網站伺服器,還是租用虛擬主機。
(2)選擇操作系統,用unix,Linux還是Window2000/NT。分析投入成本、功能、開發、穩定性和安全性等。
(3)採用系統性的解決方案,如IBM,HP等公司提供的企業上網方案、電子商務解決方案,還是自行開發。
(4)網站安全性措施,防黑、防病毒方案。
(5)相關程序開發。如網頁程序ASP、JSP、CGI、資料庫程序等。
5. 網站內容規劃
一般信息發布型企業網站內容應包括:公司簡介、產品介紹、服務內容、價格信息、聯系方式、網上定單等基本內容;
電子商務類網站要提供會員注冊、詳細的商品服務信息、信息搜索查詢、定單確認、付款、個人信息保密措施、相關幫助等;
綜合門戶類網站則將不同的內容劃分為許多獨立的或有關聯的頻道,有時,一個頻道的內容就相當於一個獨立網站的功能。
6. 網站測試和發布
在網站設計完成之後,應該進行一系列的測試,當一切測試正常之後,才能正式發布。主要測試內容包括:
(1)網站伺服器穩定性、安全性;
(2)各種插件、資料庫、圖像、鏈接等是否工作正常;
(3)在不同接入速率情況下的網頁下載速度;
(4)網頁對不同瀏覽器的兼容性;
(5)網頁在不同顯示器和不同顯示模式下的表現等。

7. 網站推廣
網站推廣活動一般發生在網站正式發布之後,當然也不排除一些網站在籌備期間就開始宣傳的可能。網站推廣是網路營銷的主要內容,可以說,大部分的網路營銷活動都是為了網站推廣的需要,例如,發布新聞、搜索引擎登記、交換鏈接、網路廣告等等。
因此,在網站規劃階段就應該對將來的推廣活動有明確的認識和計劃,而不是等網站建成之後才考慮採取什麼樣的推廣手段。由此也可以看出,網站規劃並不僅僅是為了網站建設的需要,而是整個網路營銷活動的需要。
8. 網站維護
網站發布之後,還要定期進行維護,主要包括下列幾個方面:
(1)伺服器及相關軟硬體的維護,對可能出現的問題進行評估,制定響應時間;
(2)網站內容的更新、調整等,將網站維護制度化、規范化。

3. 網站的主要功能

在確定了網站目標和名稱之後,要設計網站的功能了,網站功能是戰術性的,是為了實現網站的目標。網站的功能是為用戶提供服務的基本表現形式。一般來說,一個網站有幾個主要的功能模塊,這些模塊體現了一個網站的核心價值。

4. 網站技術解決方案

根據網站的功能確定網站技術解決方案,應重點考慮下列幾個方面:

(1)是採用自建網站伺服器,還是租用虛擬主機。

(2)選擇操作系統,用unix,Linux還是Window2000/NT。分析投入成本、功能、開發、穩定性和安全性等。

(3)採用系統性的解決方案,如IBM,HP等公司提供的企業上網方案、電子商務解決方案,還是自行開發。

(4)網站安全性措施,防黑、防病毒方案。

(5)相關程序開發。如網頁程序ASP、JSP、CGI、資料庫程序等。

5. 網站內容規劃

一般信息發布型企業網站內容應包括:公司簡介、產品介紹、服務內容、價格信息、聯系方式、網上定單等基本內容;

電子商務類網站要提供會員注冊、詳細的商品服務信息、信息搜索查詢、定單確認、付款、個人信息保密措施、相關幫助等;

綜合門戶類網站則將不同的內容劃分為許多獨立的或有關聯的頻道,有時,一個頻道的內容就相當於一個獨立網站的功能。

6. 網站測試和發布

在網站設計完成之後,應該進行一系列的測試,當一切測試正常之後,才能正式發布。主要測試內容包括:

(1)網站伺服器穩定性、安全性;

(2)各種插件、資料庫、圖像、鏈接等是否工作正常;

(3)在不同接入速率情況下的網頁下載速度;

(4)網頁對不同瀏覽器的兼容性;

(5)網頁在不同顯示器和不同顯示模式下的表現等。

7. 網站推廣

網站推廣活動一般發生在網站正式發布之後,當然也不排除一些網站在籌備期間就開始宣傳的可能。網站推廣是網路營銷的主要內容,可以說,大部分的網路營銷活動都是為了網站推廣的需要,例如,發布新聞、搜索引擎登記、交換鏈接、網路廣告等等。

因此,在網站規劃階段就應該對將來的推廣活動有明確的認識和計劃,而不是等網站建成之後才考慮採取什麼樣的推廣手段。由此也可以看出,網站規劃並不僅僅是為了網站建設的需要,而是整個網路營銷活動的需要。

8. 網站維護

網站發布之後,還要定期進行維護,主要包括下列幾個方面:

(1)伺服器及相關軟硬體的維護,對可能出現的問題進行評估,制定響應時間;

(2)網站內容的更新、調整等,將網站維護制度化、規范化。

⑸ 網站安全之如何防止網站被黑

1、隱藏好IP,做好防護。
2、網站使用CDN。就近接入,就是利用DNS服務找到離用戶最近的機器,從而達到 最短路徑提供服務,DNS服務理論上可以找到所有這個公司的機房和IP,從而還能 夠進行流量的調度。
3、伺服器的補丁一定及時打好,不定時更新很有必要。
4、網站後台的路徑要隱藏好,很多網站都不注意這一點,很容易被攻擊。
5、網站的賬號密碼要設置復雜點,平常注冊的時候提示什麼數字字母特殊符號的 。
6、伺服器備份。而且要及時更新備份,不要等到失去是後悔莫及。
7、伺服器的防火牆。不要亂傳來路不明以及不好的內容到網站的目錄。
8、常用的埠都要關閉。
9、一定要開啟防火牆。
10、最後注意不要存在弱命令。
11、伺服器端設置防火牆等,通常需要與空間服務商溝通,讓其代為設置。建議找專業的安全公司來解決,國內也就Sinesafe和綠盟等安全公司 比較專業.我們需要做的就是讓網站自身的安全性更高,防止黑客獲取我們網站相關的許可權.

⑹ 防黑加固Linux伺服器安全加固

使用一些安全測試的辦法與工具對伺服器進行風險檢測,找出伺服器的脆弱點以及存在的安全缺陷。
針對伺服器操作系統自身的安全測試,包括一些系統配置、主機漏洞掃描等等
查看伺服器操作系統當前用戶是否為root用戶,盡量避免使用root用戶登錄,啟動其他服務程序,除非是一些需要root許可權的安全工具,前提需要保證工具來源可信。終端需要 who 既可以查看當前登錄用戶。
登錄到Linux系統,此時切換到root用戶,下載lynis安全審計工具,切換到lynis運行腳本目錄,執行 ./lynis --check-all –Q 腳本語句,開始對本地主機掃描審計,等待掃描結束,查看掃描結果。
登錄到Linux系統,切換到root用戶,使用命令行方式安裝Clamav 殺毒軟體,安裝完畢需要更新病毒庫,執行掃描任務,等待掃描結束獲取掃描結果,根據掃描結果刪除惡意代碼病毒;
登錄到Linux系統,切換到root用戶,下載Maldetect Linux惡意軟體檢測工具,解壓縮後完成安裝。運行掃描命令檢測病毒,等待掃描結束獲取掃描報告,根據掃描報告刪除惡意病毒軟體;
登錄到Linux系統,切換到root用戶,下載Chkrootkit後門檢測工具包,解壓縮後進入 Chkrootkit目錄,使用gcc安裝Chkrootkit,安裝成功即開始Chkrootkit掃描工作,等待掃描結束,根據掃描結果恢復系統;
登錄到Linux系統,切換到root用戶,下載RKHunter 後門檢測工具包,解壓縮後進入 RKHunter 目錄,執行命令安裝RKHunter ,安裝成功即開始啟用後門檢測工作,等待檢測結束,根據檢測報告更新操作系統,打上漏洞對應補丁;
使用下面工具掃描Web站點:nikto、wa3f、sqlmap、safe3 … …
掃描Web站點的信息:操作系統類型、操作系統版本、埠、伺服器類型、伺服器版本、Web站點錯誤詳細信息、Web目錄索引、Web站點結構、Web後台管理頁面 …
測試sql注入,出現幾個sql注入點
測試xss攻擊,出現幾個xss注入點
手動測試某些網頁的輸入表單,存在沒有進行邏輯判斷的表單,例如:輸入郵箱的表單,對於非郵箱地址的輸入結果,任然會繼續處理,而不是提示輸入錯誤,返回繼續輸入。
針對風險測試後得到的安全測試報告,修復系統存在的脆弱點與缺陷,並且進一步加強伺服器的安全能力,可以藉助一些安全工具與監控工具的幫助來實現。
對伺服器本身存在的脆弱性與缺陷性進行的安全加固措施。
使用非root用戶登錄操作系統,使用非root用戶運行其他服務程序,如:web程序等;
web許可權,只有web用戶組用戶才能操作web應用,web用戶組添加當前系統用戶;
資料庫許可權,只有資料庫用戶組用戶才能操作資料庫,資料庫用戶組添加當前系統用戶;
根據安全審計、惡意代碼檢查、後門檢測等工具掃描出來的結果,及時更新操作系統,針對暴露的漏洞打上補丁。
對於發現的惡意代碼病毒與後門程序等及時刪除,恢復系統的完整性、可信行與可用性。
部署在伺服器上的Web站點因為程序員編寫代碼時沒有注意大多的安全問題,造成Web服務站點上面有一些容易被利用安全漏洞,修復這些漏洞以避免遭受入侵被破壞。
配置當前伺服器隱藏伺服器信息,例如配置伺服器,隱藏伺服器類型、伺服器的版本、隱藏伺服器管理頁面或者限制IP訪問伺服器管理頁面、Web站點錯誤返回信息提供友好界面、隱藏Web索引頁面、隱藏Web站點後台管理或者限制IP訪問Web站點後台。
使用Web代碼過濾sql注入或者使用代理伺服器過濾sql注入,這里更加應該使用Web代碼過濾sql注入,因為在頁面即將提交給伺服器之前過濾sql注入,比sql注入到達代理伺服器時過濾,更加高效、節省資源,用戶體驗更好,處理邏輯更加簡單。

⑺ web程序員的日常工作是怎樣的

Web前端工程師的職業生涯,我覺得可以分為三步,初級前端開發工程師- > 資深前端工程師- > 前端架構師。每種職責都有其不同的角色和分工。

前端開發工程師(或者說「網頁製作」、「網頁製作工程師」、「前端製作工程師」、「網站重構工程師」),這樣的一個職位的主要職責是與交互設計師、視覺設計師協作,根據設計圖用HTML和CSS完成頁面製作。同時,在此基礎之上,對完成的頁面進行維護和對網站前端性能做相應的優化。
資深前端開發工程師,相比較「前端開發工程師」而言,更加資深一些,當然其工作的職責也會相應的更加大一些。一般而言,資深前端開發工程師需要使用JavaScript或者ActionScript來編寫和封裝具有良好性能的前端交互組件,同時還要對Web項目的前端實現方案提供專業指導和監督並在日常工作之中對新人及相關開發人員進行前端技能的培訓和指導。另外,還要跟蹤研究前端技術,設計並實施全網前端優化。
對於前端架構師,更多意義上說像是一個管理的崗位,但是其職責要求卻不僅只是管理。前端架構師需要帶領組員實現全網的前端框架和優化,還要創建前端的相應標准和規范,並通過孜孜不倦的佈道來完善並推廣和應用自己的標准和框架。同時,還要站在全局的角色為整個網站的信息架構和技術選型提供專業意見和方案。

學無止境,重要的是通過工作實現自我價值。:)

⑻ asp/asp.net/php三種技術做網站的對比,比如瀏覽速度,cpu使用率,防黑方面,最好一表格的方式表現出來

ASP首先微軟已經宣布停止更新了。。。老網站用的都是他。現在新開發的基本不考慮這個語言
ASP.NET相對於新手來說。安全性也相對較高。不過屬於預編譯速度較慢。。。
PHP速度最快。以前不是面向對象。。PHP5以後性能得到了極大提升。。安全性沒問題。不過想要絕對安全要靠經驗。防止注入和XSS跨站攻擊。。
總結來說。..速度方面PHP無懈可擊。安全性靠程序員的經驗來彌補。另外PHP+MYSQL+LINUX是一套完美的組合。完全免費,伺服器最強組合。。。除了銀行等安全機構採用
JSP+Oracle意外。現在所有的網站基本都使用PHP

⑼ WEB程序員是干什麼的上班時的工作具體是做什麼的要會哪些東西有前途嗎誰能幫我說得詳細點!!

web 簡單來說就是網站什麼的了,web程序員就是做網站開發的.
具體學什麼就要看分工不同的,開發語言有很多種類,目前比較主流的 php,asp,jsp,.net,ruby,cgi(python,c....) 以上說的是後台語言, 前台相關的還有一些東西 ,比如(x)html,xml,css,javascript這些.

根據分工不同,還會有 程序開發人員,網頁設計人員,項目設計人員,平面設計人員等等...

當你的後台設計語言學到一定水平的時候,就會接觸到一些高級技術,比如ajax,框架,web2.0,w3c等等.

你如果想學的話,上面任何一種東西學精通了都很厲害,不在於學的多,在於精....

⑽ 作為一個WEB應用開發程序員,在WEB應用開發過程中要注意哪些安全問題

SQL注入攻擊,XSS腳本攻擊,URL頁面傳參<例如:window.location.href='index.aspx?id=1'>,緩存的應用<防止讀臟數據,未更新的數據>
解決方法:
SQL注入攻擊:通過對輸入內容的檢測,例如:檢測關鍵字,即查看輸入的內容裡面是不是有Update insert select Delete 等關鍵字!
XSS腳本攻擊:檢測輸入內容輸入內容是否含有< > <script> <p> <a> 等HTML標記!
參數攻擊:直接在URL中更換參數,查看一些自己沒有許可權查看的內容!即所謂的跨許可權查看。
緩存的應用:使用緩存,就應該及時更新緩存,以防止讀舊數據,臟數據等,也可以使用緩存替換技術!等等等吧!好多呢!ca

閱讀全文

與web程序員防黑相關的資料

熱點內容
怎麼分割pdf 瀏覽:812
壓縮垃圾報警器 瀏覽:628
小公司一般都用什麼伺服器 瀏覽:967
java獲取時間gmt時間 瀏覽:819
為什麼csgo一直連接不到伺服器 瀏覽:503
安卓登ins需要什麼 瀏覽:835
機器人演算法的難點 瀏覽:225
全自動化編程 瀏覽:725
程序員高薪限制 瀏覽:692
壓縮圖片壓縮 瀏覽:75
美國發明解壓魔方 瀏覽:302
電腦怎麼備案網上伺服器 瀏覽:514
旅行商問題Python寫法 瀏覽:952
解壓破壞王裡面的所有兌換碼 瀏覽:860
文件夾如何拖拽還保留原來的 瀏覽:22
職業生涯pdf 瀏覽:954
ubuntu安裝軟體php 瀏覽:160
黑馬程序員退學流程 瀏覽:362
網頁伺服器崩潰怎麼回事 瀏覽:651
cnc編程前景怎麼樣 瀏覽:320