自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何構(gòu)建安全的Web應(yīng)用程序

安全
黑客總能利用各種漏洞來(lái)進(jìn)入Web應(yīng)用程序。本文討論在以安全為中心的計(jì)算機(jī)編程時(shí),如何構(gòu)建低風(fēng)險(xiǎn)的基于Web的應(yīng)用程序。

多年以來(lái),安全專家們都在警告人們Web應(yīng)用程序的漏洞,而這些警告往往會(huì)變成現(xiàn)實(shí)。我們經(jīng)??吹竭@樣的報(bào)道:黑客成功地滲透進(jìn)入了一個(gè)Web應(yīng)用。黑客或網(wǎng)絡(luò)罪犯?jìng)円苍诠蚕硇掳l(fā)現(xiàn)的漏洞,分享他們的成功故事或者對(duì)下一個(gè)目標(biāo)的研究。我們不可能保證企業(yè)網(wǎng)絡(luò)絕對(duì)無(wú)法滲透,而且黑客們已經(jīng)證明了這一點(diǎn),那么,為保障這些關(guān)鍵的企業(yè)應(yīng)用,編程者應(yīng)該做點(diǎn)兒什么呢?

[[108840]]

本文討論在以安全為中心的計(jì)算機(jī)編程時(shí),如何構(gòu)建低風(fēng)險(xiǎn)的基于Web的應(yīng)用程序。

1.查詢參數(shù)化

有許多針對(duì)Web應(yīng)用程序的攻擊可追溯到成功竊取了口令的SQL注入攻擊。企業(yè)、政府、社交網(wǎng)站都成為這種攻擊的受害者,這使其成為一個(gè)普遍的問(wèn)題。雖然許多人認(rèn)為這個(gè)問(wèn)題是廠商問(wèn)題,但從根本上講這屬于開(kāi)發(fā)者的編程問(wèn)題。

網(wǎng)頁(yè)表單的評(píng)論框、數(shù)據(jù)字段或允許自由輸入數(shù)據(jù)的表單區(qū)域,特別是開(kāi)放性的字符串輸入,都會(huì)導(dǎo)致這種漏洞。SQL注入攻擊甚至可以通過(guò)非可見(jiàn)的Web元素(如HTTP的header的值)來(lái)傳遞。惡意的SQL代碼的簡(jiǎn)單插入,有時(shí)會(huì)導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)都有可能遭到竊取、清除或篡改,甚至被用來(lái)惡意地運(yùn)行操作系統(tǒng)命令來(lái)破壞企業(yè)的數(shù)據(jù)庫(kù)。

為阻止SQL注入,開(kāi)發(fā)者必須防止非可信的輸入被解析為SQL命令的一部分。阻止SQL注入的最佳方法是借助使用參數(shù)化查詢的編程技術(shù)。

例如,在java標(biāo)準(zhǔn)中,可借助如下方法實(shí)現(xiàn)參數(shù)化查詢:

String custname = request.getParameter("customerName");

String query = "SELECT account_balance FROM user_data WHERE user_name = ? ";

PreparedStatement pstmt = connection.prepareStatement( query );

pstmt.setString( 1, custname);

ResultSet results = pstmt.executeQuery( );

2.保證口令存儲(chǔ)的安全

顯然,如果SQL注入可被用于竊取口令,就需要我們安全地保存用戶口令。但為什么我們沒(méi)有這樣做?

保存口令的最糟糕的方法當(dāng)然就是使用純文本;但是,加密也不會(huì)好很多。原因在于加密是可逆的,還有一個(gè)原因就是MD5或者任何其它的哈希算法都是 有問(wèn)題的。當(dāng)今的黑客們可以訪問(wèn)強(qiáng)大但并非十分昂貴的計(jì)算資源,這可以使他們創(chuàng)建甚至購(gòu)買“彩虹表”,從而可以實(shí)時(shí)地破譯一般強(qiáng)度的密碼。如今,黑客們甚至不再使用彩虹表,轉(zhuǎn)而使用高性能的家用計(jì)算機(jī)去執(zhí)行高速度的字典攻擊。密碼加鹽技術(shù)是一種有助于對(duì)付彩虹表攻擊和刪除口令哈希重復(fù)數(shù)據(jù)的編碼技術(shù),但僅有這種技術(shù)是不夠的。

利用有限的資源(如,利用并不昂貴的家用電腦),攻擊者可以生成GPU破解程序,針對(duì)存儲(chǔ)口令,它每秒鐘可以執(zhí)行250億次口令嘗試。

為存儲(chǔ)口令和防止GPU破解程序和類似的資源暴露口令,我們建議結(jié)合三種主要技術(shù):采用單向算法、加鹽、有意利用慢速算法。有兩個(gè)很好的算法,SCRYPT 和 PBKDF2可用來(lái)以這種形式安全地存儲(chǔ)口令。

3.輸出編碼的XSS防御

跨站腳本攻擊(XSS)有一個(gè)更合適的名字,即JavaScript劫持,它可被用于會(huì)話劫持、站點(diǎn)破壞、網(wǎng)絡(luò)掃描、破壞CSRF防御、站點(diǎn)重定向或釣魚(yú)、遠(yuǎn)程托管腳本的加載、數(shù)據(jù)竊取和擊鍵記錄等,而且,攻擊者還越來(lái)越頻繁地使用XSS。

輸出編碼是一種用于阻止XSS的關(guān)鍵編程技術(shù),這種技術(shù)在輸出時(shí)執(zhí)行。在你構(gòu)建用戶界面時(shí),這種編碼可以在不可信的數(shù)據(jù)被動(dòng)態(tài)添加到HTML之前的最后時(shí)刻執(zhí)行。

首要的規(guī)則是拒絕所有,也就是不要將不可信任的數(shù)據(jù)放置到HTML文檔中,除非滿足特殊情況。最重要的是,千萬(wàn)不要接受來(lái)自不可信源的JavaScript代碼。

4.內(nèi)容安全策略

內(nèi)容安全策略是一種新出現(xiàn)的瀏覽器標(biāo)準(zhǔn)。其基本理念在于創(chuàng)造一種標(biāo)準(zhǔn)化的框架,實(shí)現(xiàn)基于瀏覽器的保護(hù),從而只需花費(fèi)開(kāi)發(fā)者用較少的工作就可以阻止XSS攻擊。

為了使內(nèi)容安全策略有效,嵌入到HTML中的所有JavaScript都需要清除,并部署在一個(gè)獨(dú)立的外部JavaScript文件中。從這一點(diǎn)來(lái)看,如果能夠理解內(nèi)容安全策略的瀏覽器檢測(cè)到了HTML文檔中嵌入的JavaScript(例如,黑客試圖插入這種腳本),該操作將被拒絕。這種做法能真正地鎖定瀏覽器,防止許多形式的XSS攻擊。

5.防止跨站腳本請(qǐng)求偽造

一旦用戶登錄進(jìn)入了一個(gè)安全站點(diǎn),然后打開(kāi)了另一個(gè)標(biāo)簽并無(wú)意中登錄了一個(gè)惡意網(wǎng)站,該問(wèn)題站點(diǎn)可能包含有跨站請(qǐng)求,并充分利用用戶已經(jīng)登錄進(jìn)入的事實(shí)。然后,該惡意站點(diǎn)可能提交虛假請(qǐng)求,帶來(lái)重大危害,如欺騙用戶將金錢從銀行網(wǎng)站轉(zhuǎn)賬。

為防止這類攻擊,開(kāi)發(fā)者需要考慮部署加密令牌,并要求用戶重新進(jìn)行身份驗(yàn)證才能完成交易,從而防止會(huì)話劫持。

6.多因素認(rèn)證

許多人認(rèn)為口令作為一種單一的認(rèn)證因素已經(jīng)死亡。更佳的認(rèn)證方案是雙因素或多因素認(rèn)證??偸且笥脩舯仨殧y帶另一種設(shè)備才能驗(yàn)證身份是不現(xiàn)實(shí)的,所以這兩種認(rèn)證在過(guò)去已經(jīng)有了很大的普及。雖然MFA的SMS和本地應(yīng)用并不完美,但確實(shí)可以減少風(fēng)險(xiǎn)。許多消費(fèi)者網(wǎng)站和其它網(wǎng)絡(luò)服務(wù)現(xiàn)在提供多因素認(rèn)證,如谷歌。

7.遺忘口令的安全設(shè)計(jì)

許多網(wǎng)站允許用戶用簡(jiǎn)單的認(rèn)證就可以請(qǐng)求原有口令或?qū)⑿驴诹畎l(fā)送到一個(gè)注冊(cè)的郵件地址。其實(shí),更強(qiáng)健的過(guò)程應(yīng)當(dāng)是:用安全問(wèn)題驗(yàn)證身份;通過(guò)帶外方法(即SMS或令牌)向用戶發(fā)送一個(gè)隨機(jī)生成的密碼;在同樣的Web會(huì)話中驗(yàn)證代碼并增強(qiáng)鎖定策略;用戶改變口令。

雖然上述步驟并不能根除現(xiàn)有的每個(gè)漏洞,也無(wú)法阻擊所有的攻擊要素,但這些措施卻有助于強(qiáng)化網(wǎng)站和應(yīng)用程序。

應(yīng)用程序的編程者應(yīng)當(dāng)學(xué)會(huì)用安全方式編寫代碼。這是企業(yè)安裝網(wǎng)站安全正確防御的唯一關(guān)鍵機(jī)會(huì)。

責(zé)任編輯:藍(lán)雨淚 來(lái)源: TechTarget中國(guó)
相關(guān)推薦

2017-11-23 15:09:16

2016-01-24 22:14:51

2012-04-19 09:34:21

ibmdw

2017-09-25 12:31:51

2013-11-19 15:35:01

2011-02-13 14:36:35

2013-02-18 16:12:55

2012-05-14 17:35:28

移動(dòng)Web

2009-01-03 14:25:10

ibmdwWeb

2009-02-27 17:00:25

2010-06-13 09:22:37

jQuery

2023-09-21 08:00:00

ChatGPT編程工具

2024-01-02 00:18:56

Buffalo項(xiàng)目Go Web框架

2010-03-16 09:15:20

2017-12-10 14:13:14

云服務(wù)云原生應(yīng)用程序

2012-03-21 09:36:33

ibmdw

2009-09-22 12:59:07

ibmdwWeb

2017-03-02 11:10:39

AndroidMVVM應(yīng)用程序

2022-02-21 14:41:21

APIWeb安全

2012-06-11 09:37:41

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)