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

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

J2EE架構(gòu)學(xué)習(xí)者的6個(gè)最佳實(shí)踐

2019-11-17 06:21:51
字體:
供稿:網(wǎng)友

  雖然許多文章曾經(jīng)討論過J2EE最佳實(shí)踐。那么,為什么我還要再寫一篇文章呢?本文究竟與以前的文章有何不同或者說比其他文章好在哪呢?

  首先,本文的目標(biāo)讀者是正在從事技術(shù)工作的架構(gòu)師。為了避免浪費(fèi)大家的才智,我會(huì)避免講述一些陳腐的最佳實(shí)踐,例如"日常構(gòu)建(build daily)"、"測(cè)試一切(test everything)"和"經(jīng)常集成( integrate often)。 任何具有稱職架構(gòu)師的項(xiàng)目都有分工明確的、定義良好的團(tuán)隊(duì)結(jié)構(gòu)。他們還為進(jìn)行編碼檢查、構(gòu)建代碼(每日或在需要時(shí))、進(jìn)行測(cè)試(單元、集成和系統(tǒng)的)、部署和配置/釋放治理而具備已記錄的過程。

  其次,我將跳過通常吹捧的最佳實(shí)踐,例如"基于接口的設(shè)計(jì)"、"使用聞名的設(shè)計(jì)模型"以及"使用面向服務(wù)的架構(gòu)"等。相反,我將集中講述我曾學(xué)過并且使用了若干年的6(不是很多)個(gè)方面的in-the-trench課程。最后,本文的目的是讓您思考一下自己的架構(gòu),提供工作代碼示例或者解決方案超出了本文的范圍。下面就讓我介紹一下這6課:

  第1課:切勿繞過服務(wù)器端驗(yàn)證

  作為一位軟件顧問,我曾有機(jī)會(huì)不但設(shè)計(jì)并實(shí)現(xiàn)了Web應(yīng)用程序,而且還評(píng)估/審核了許多Web應(yīng)用程序。在復(fù)雜的、并且用javascript客戶端封裝的應(yīng)用程序內(nèi),我經(jīng)常碰到對(duì)用戶輸入信息執(zhí)行大量檢查的Web頁面。即使Html元素具有數(shù)據(jù)有效性的屬性也如此,例如MAXLENGTH。只有在成功驗(yàn)證所有輸入信息后,才能提交HTML表單。結(jié)果,一旦服務(wù)器端收到通知表單(請(qǐng)求),便恰當(dāng)?shù)貓?zhí)行業(yè)務(wù)邏輯。

  在此,您發(fā)現(xiàn)問題了么?開發(fā)人員已經(jīng)做了許多重要的假設(shè)。例如,他們假設(shè)所有的Web應(yīng)用程序用戶都同樣老實(shí)。開發(fā)人員還假設(shè)所有用戶將總是使用他們測(cè)試過的瀏覽器訪問Web應(yīng)用程序。還有很多其他的假設(shè)。這些開發(fā)人員忘記了利用可以免費(fèi)得到的工具,通過命令行很輕易地模擬類似瀏覽器的行為。事實(shí)上,通過在瀏覽器窗口中鍵入適當(dāng)?shù)腢RL,您可以發(fā)送任何"posted"表單,盡管如此,通過禁用這些頁面的GET請(qǐng)求,您很輕易地阻止這樣的"表單發(fā)送"。但是,您不能阻止人們模擬甚至創(chuàng)建他們自己的瀏覽器來入侵您的系統(tǒng)。

  根本的問題在于開發(fā)人員不能確定客戶端驗(yàn)證與服務(wù)器端驗(yàn)證的主要差別。兩者的主要差別不在于驗(yàn)證究竟發(fā)生在哪里,例如在客戶端或者在服務(wù)器端。主要的差別在于驗(yàn)證背后的目的不同。

  客戶端驗(yàn)證僅僅是方便。執(zhí)行它可為用戶提供快速反饋??使應(yīng)用程序似乎做出響應(yīng),給人一種運(yùn)行桌面應(yīng)用程序的錯(cuò)覺。

  另一方面,服務(wù)器端驗(yàn)證是構(gòu)建安全Web應(yīng)用程序必需的。不管在客戶端一側(cè)輸入的是什么,它可以確??蛻舳怂屯?wù)器的所有數(shù)據(jù)都是有效的。

  因而,只有服務(wù)器端驗(yàn)證才可以提供真正應(yīng)用程序級(jí)的安全。許多開發(fā)人員陷入了錯(cuò)誤感覺的圈套:只有在客戶端進(jìn)行所有數(shù)據(jù)的驗(yàn)證才能確保安全。下面是說明此觀點(diǎn)的一個(gè)常見的示例:

  一個(gè)典型的登錄頁面擁有一個(gè)用來輸入用戶名的文本框和一個(gè)輸入密碼的文本框。在服務(wù)器端,某人在接收servlet中可能碰到一些代碼,這些代碼構(gòu)成了下面形式的SQL查詢:

"SELECT * FROM SecurityTable WHERE username = '" + form.getParameter("username") + "' AND passWord = '" + form.getParameter("password") + "';",并執(zhí)行這些代碼。假如查詢?cè)诮Y(jié)果集的某一行返回,則用戶登錄成功,否則用戶登錄失敗。

  第一個(gè)問題是構(gòu)造SQL的方式,但現(xiàn)在讓我們暫時(shí)忽略它。假如用戶在用戶名中輸入"Alice'--"會(huì)怎樣呢?假設(shè)名為"Alice"的用戶已經(jīng)在SecurityTable中,這時(shí)此用戶(更恰當(dāng)?shù)恼f法是黑客)成功地登錄。我將把找出為什么會(huì)出現(xiàn)這種情況的原因做為留給您的一道習(xí)題。

  許多創(chuàng)造性的客戶端驗(yàn)證可以阻止一般的用戶從瀏覽器中這樣登錄。但對(duì)于已經(jīng)禁用了Javascript的客戶端,或者那些能夠使用其他類似瀏覽器程序直接發(fā)送命令(HTTP POST和GET命令)的高級(jí)用戶(或者說黑客)來說,我們又有什么辦法呢?服務(wù)器端驗(yàn)證是防止這種漏洞類型所必須的。這時(shí),SSL、防火墻等都派不上用場(chǎng)了。

  第2課:安全并非是附加物

  如第1課所述,我曾有幸研究過許多Web應(yīng)用程序。我發(fā)現(xiàn)所有的JavaServer Page(jsp)都有一個(gè)共同的主題,那就是具有類似下面?zhèn)未a的布局:



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 静乐县| 徐水县| 通榆县| 龙泉市| 子长县| 甘孜| 温宿县| 连州市| 天津市| 阿克苏市| 昌江| 浙江省| 新干县| 广州市| 故城县| 罗城| 营山县| 雅江县| 安顺市| 普定县| 尤溪县| 谷城县| 呼玛县| 房产| 石阡县| 丰宁| 乡城县| 通州区| 永安市| 邹城市| 楚雄市| 高碑店市| 三穗县| 遵义县| 昆明市| 洛阳市| 延寿县| 榆树市| 石嘴山市| 平邑县| 黄浦区|