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

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

對(duì)JAVA安全性的討論

2019-11-18 15:06:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  眾所周知,java小應(yīng)用程序(Applet)在網(wǎng)絡(luò)應(yīng)用方面有著十分強(qiáng)大的功能,但是由于其存在著安全隱患,所以對(duì)于"她"的使用,JAVA語(yǔ)言做了很多的限制,想必大家都已經(jīng)很清楚了,其中最讓人不開(kāi)心的就是,小應(yīng)用程序只能夠連接提供網(wǎng)頁(yè)的計(jì)算機(jī)(Applet必需嵌入到一個(gè)Html頁(yè)面中才能得以發(fā)布),但如何將您的小應(yīng)用程序分發(fā)出去呢,這就是我們要討論的。

JAVA語(yǔ)言的"強(qiáng)項(xiàng)"就在于其網(wǎng)絡(luò)功能的強(qiáng)大和操作的簡(jiǎn)易性,而小應(yīng)用程序(Applet)作為JAVA技術(shù)的一部分,更是"錦上添花"。然而,您可否碰到過(guò)這樣的事情呢,"辛辛勞苦"做出了一個(gè)自認(rèn)為很出色的Applet,可是運(yùn)行時(shí),卻是"千呼萬(wàn)喚,她也不出來(lái)",原因何在呢,那就是JAVA語(yǔ)言對(duì)Applet的安全性做了多方面的限制,現(xiàn)在就讓我們了解一下吧!

Applet的安全性

您有沒(méi)有想過(guò),通過(guò)Applet來(lái)連接一個(gè)網(wǎng)絡(luò)服務(wù)器;您有沒(méi)有想過(guò),通過(guò)Applet來(lái)訪問(wèn)本地的文件,……。我想您一定做過(guò)不少的嘗試,但結(jié)果總是讓人難以滿足,原困就是JAVA語(yǔ)言對(duì)Applet技術(shù)做了多方面的限制。

"Applet只能把電話打回家里"(摘自《JAVA2核心技術(shù)》),什么意思?大家不要會(huì)錯(cuò)意了,這是說(shuō),網(wǎng)絡(luò)瀏覽器只答應(yīng)一個(gè)小應(yīng)用程序在給它提供服務(wù)的主機(jī)讀取和寫(xiě)入數(shù)據(jù)。Applet只能連接其所駐留的計(jì)算機(jī)的套接字。

乍看起來(lái),這個(gè)限制似乎毫無(wú)意義:為什么這個(gè)小應(yīng)用程序被禁止執(zhí)行四周瀏覽器一直在執(zhí)行的操作,即是從網(wǎng)絡(luò)上某臺(tái)主機(jī)獲取數(shù)據(jù)的操作。也許大家有些不大明白,讓我們具體化這三個(gè)相關(guān)的主機(jī),會(huì)有助于理解這個(gè)基本原理(參圖一)。

源主機(jī)--給客戶發(fā)送網(wǎng)頁(yè)和JAVA小應(yīng)用程序的計(jì)算機(jī)。

本地主機(jī)--運(yùn)行你的小應(yīng)用程序的用戶計(jì)算機(jī)。

你的小應(yīng)用程序預(yù)備訪問(wèn)的第三方的數(shù)據(jù)存儲(chǔ)庫(kù)。

Applet安全性規(guī)定:
Applet只能讀取源主機(jī)上的數(shù)據(jù)。
Applet不能寫(xiě)入本地主機(jī)。
Applet不能讀取本地主機(jī)上的數(shù)據(jù)。

不能讓小應(yīng)用程序?qū)懭氡镜刂鳈C(jī)是因?yàn)锳pplet可能會(huì)向本地主機(jī)傳播病毒或修改它上面的重要文件,所以我們要保護(hù)運(yùn)行小應(yīng)用程序的客戶機(jī);不能讓小應(yīng)用程序讀取本地主機(jī)的信息是因?yàn)楸镜乜赡鼙A糁脩翥y行卡數(shù)字等這類敏感的信息,因?yàn)樾?yīng)用程序支持多線程,當(dāng)你打開(kāi)一個(gè)漂亮的頁(yè)面,使用它上面提供的有用的功能時(shí),你可能不會(huì)意識(shí)到這個(gè)小應(yīng)用程序背后的其它線程在做些什么。所以說(shuō),不能讓小應(yīng)用程序?qū)Ρ镜赜?jì)算機(jī)進(jìn)行讀寫(xiě)操作是同樣重要的。

這樣還可以理解,但為什么這個(gè)小應(yīng)用程序不能從網(wǎng)上讀取其它文件呢?網(wǎng)絡(luò)不正是一個(gè)公用信息資源庫(kù)嗎?難道不是每個(gè)人都可以從網(wǎng)上讀取信息嗎?假如你在家里利用括號(hào)設(shè)備訪問(wèn)Internet的話,可能是能夠隨心所欲的。但是你假如是一名公司的職員,在公司內(nèi)部使用網(wǎng)絡(luò)資源,正好你們所在公司又恰好安裝了防火墻(FireWall),那么情況就完全不一樣了。

假如要具體介紹防火墻,可能最近幾天大家都有不要睡覺(jué)了,所以這里只是說(shuō)一下防火墻的功能。可以這樣理解一個(gè)防火墻就是一個(gè)計(jì)算機(jī),它過(guò)濾進(jìn)出公司局域網(wǎng)的數(shù)據(jù)包。通過(guò)對(duì)安全策略的設(shè)置,它可以完成很多功能。例如:它可以拒絕局域網(wǎng)內(nèi)除了郵件服務(wù)器以外的所有主機(jī)上郵件端口的訪問(wèn)請(qǐng)求防火墻也可以過(guò)濾公司局域網(wǎng)與Internet之間的通信規(guī)則,所有的這些完全取決于安全的需要。(參圖二)

擁有一個(gè)防火墻可以讓一個(gè)公司利用網(wǎng)絡(luò)向雇員發(fā)送對(duì)他們有重要意義的內(nèi)部信息,但同時(shí)拒絕來(lái)自公司外部的訪問(wèn)。一個(gè)公司只需簡(jiǎn)單的安裝一臺(tái)網(wǎng)絡(luò)服務(wù)器,把其地址通知全部的雇員,并設(shè)立防火墻以拒絕任何來(lái)自公司外部的訪問(wèn)這個(gè)服務(wù)器的請(qǐng)求。而公司的職員可以用安全的使用公司內(nèi)部的網(wǎng)絡(luò),瀏覽服務(wù)器。

假如一個(gè)雇員訪問(wèn)了你提供的網(wǎng)頁(yè)(含有Applet的網(wǎng)頁(yè)),那么就會(huì)有一個(gè)小應(yīng)用程序被下載到裝有防火墻的計(jì)算機(jī)并開(kāi)始在那里運(yùn)行。假如這個(gè)小應(yīng)用程序可以讀取它駐留的瀏覽器讀取的所有網(wǎng)頁(yè),就可以訪問(wèn)這個(gè)公司內(nèi)的住處接著,它可以連接一個(gè)主機(jī),并利用這個(gè)主機(jī)接收和送回所有私人信息。顯然這是不安全的。

這簡(jiǎn)直太糟糕了,真的,你不能自己編寫(xiě)運(yùn)行于網(wǎng)上的小應(yīng)用程序,獲取信息,處理和格式化這些信息,并把它們發(fā)送給Applet用戶。假如,我們的小應(yīng)用程序只是想得到一些信息,而并不想向它的主機(jī)寫(xiě)回任何信息,難道這樣也不行嗎?為什么不能讓瀏覽器和這個(gè)小應(yīng)用程序簽一個(gè)協(xié)議呢?假如這個(gè)小應(yīng)用程序答應(yīng)不向任何地方寫(xiě)入數(shù)據(jù),那么它應(yīng)該能讀取任何地方的數(shù)據(jù)。這樣的話,她只充當(dāng)一個(gè)住處捕捉者和處理者,并在用戶屏幕顯示瞬息的結(jié)果。(實(shí)現(xiàn)上,這是可行的,這就是目前最為流行的"數(shù)字簽名技術(shù)",以后我們?cè)谧鹘榻B,這里我們介紹的是另外一種解決方法。)

代理服務(wù)器

除了"數(shù)字簽名技術(shù)"這種高級(jí)技術(shù)外,我們還可以使用其它的方法來(lái)加以實(shí)現(xiàn)。比如,你可以建一個(gè)網(wǎng)頁(yè),它可以內(nèi)嵌你想要運(yùn)行的小應(yīng)用程序(這時(shí)它用的是存儲(chǔ)你的服務(wù)器的假數(shù)據(jù))。你可以提供一個(gè)按鈕,用戶可以使用這個(gè)按鈕下載這個(gè)小應(yīng)用程序和相應(yīng)的策略文件,這樣用戶就可以從這個(gè)小應(yīng)用程序運(yùn)行的瀏覽器中運(yùn)行它了。雖然這是一個(gè)可行的方法,但卻使你的小應(yīng)用程序的"魅力"大打折扣。好在還有另外一種方法。

代理服務(wù)器方法是另外一種突破安全性的限制,實(shí)現(xiàn)信息的提取,現(xiàn)在我們就具體的介紹一下。

在你的WEB服務(wù)器上安裝一個(gè)代理服務(wù)器。它是一個(gè)服務(wù)程序,隨著服務(wù)器的啟動(dòng)而自動(dòng)運(yùn)行,這個(gè)程序可以獲取來(lái)自于網(wǎng)頁(yè)的請(qǐng)求信息,并發(fā)送給請(qǐng)求它的任何人。舉個(gè)例子來(lái)看一下:假設(shè)你的小應(yīng)用程序向駐留在同一臺(tái)主機(jī)上的代理服務(wù)器發(fā)關(guān)一個(gè)GET請(qǐng)求

http://www.server.com/PRoxysvr?URL=http://www.yahoo.com/search.pl?Name=java

那么代理服務(wù)器會(huì)為這個(gè)小應(yīng)用程序取回網(wǎng)頁(yè),并把它做為GET請(qǐng)求的答復(fù)發(fā)送回來(lái),這樣小應(yīng)用程序就可以處理取回的信息了(參圖三)

圖三 通過(guò)代理服務(wù)器獲取數(shù)據(jù)的流程
由此可見(jiàn)代理服務(wù)器可以實(shí)現(xiàn)這個(gè)功能,但現(xiàn)有的代理服務(wù)器都是功能豐富,而我們只是利用它的最基本的功能,所以建議大家用JAVA自己寫(xiě)一段代碼。我們是用Servlet來(lái)實(shí)現(xiàn)的,一個(gè)Servlet是由一個(gè)Servlet引擎來(lái)啟動(dòng)的。現(xiàn)在大部分的網(wǎng)絡(luò)服務(wù)器都可以運(yùn)行Servlet。

代理服務(wù)器源代碼(ProxySvr.java)

import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class ProxySvr extends HPPTServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws SevletException, IOException {
String query = null;
response.setContentType("text/html");
PrintWriter out = response.getWriter();
query = request.getParameter("URL");
if(query == null) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"Missing URL parameter");
return;
}
try {
query = URLDecoder.decode(query);
} catch(Exception exception) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
"URL decode error " + exception);
return;
}
try {
URL url = new URL(query);
BufferedReader in = new BufferedReader(new
InputStreamReader(url.openStream()));
String line;
while((line = in.readLine()) != null)
out.println(line);
out.flush();
} catch(IOException exception) {
response.sendError(HttpServletResponse.SC_NOT_FOUND,
"Exception: " + exception);
}
}
}

說(shuō)明:WEB服務(wù)器的Servlet服務(wù)接收到一個(gè)GET請(qǐng)求時(shí),它調(diào)用doGet()方法。HttpServletRequest參數(shù)包含請(qǐng)求參數(shù)。這個(gè)Servlet用getParameter()方法得到URL參數(shù)的值。在任何Servlet中,你需要把響應(yīng)答復(fù)發(fā)送給HttpServletResponse類的getwriter()方法返回的PrintStream,這個(gè)Servlet連接URL參數(shù)指定的資源,每次讀取它的數(shù)據(jù),并把它發(fā)送給響應(yīng)流。最后,用sendError()方法報(bào)告出現(xiàn)的錯(cuò)誤。

小結(jié)

現(xiàn)在讓我們回顧一下為什么代理服務(wù)器可以解決這個(gè)小應(yīng)用程序的安全問(wèn)題。當(dāng)你的小應(yīng)用程序要訪問(wèn)來(lái)自異地主機(jī)的信息時(shí),它會(huì)將請(qǐng)求發(fā)送給駐留在本機(jī)上的代理服務(wù)器,然后代理服務(wù)器連接要訪問(wèn)的異地主機(jī),取出所要求的數(shù)據(jù),然后將數(shù)據(jù)返回給小應(yīng)用程序。

雖然幾經(jīng)周折,但是卻可以避免安全性的問(wèn)題。OK,這也許并不是最好的解決方案,但是,它確實(shí)是一種實(shí)用的解決方案,歡迎大家一起研究。

參考資料
下面是上述程序的源代碼(Zip格式)ProxySvr.zip

《JAVA2核心技術(shù)》機(jī)械工業(yè)出版社

java.sun.com http://java.sun.com/docs/books/jls/index.html

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗山县| 宝兴县| 石屏县| 祁连县| 龙游县| 武强县| 阿克陶县| 法库县| 边坝县| 昭平县| 台南县| 乌兰浩特市| 江门市| 镇原县| 靖边县| 河西区| 法库县| 手游| 长垣县| 聊城市| 商水县| 循化| 浑源县| 敦煌市| 铜鼓县| 鄂尔多斯市| 长治县| 沭阳县| 宁河县| 乐都县| 汉寿县| 东山县| 金沙县| 兴山县| 明溪县| 开阳县| 伊金霍洛旗| 微山县| 怀来县| 保靖县| 湖州市|