成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Web客戶端安全性最佳實踐

LiveVideoStack / 1550人閱讀

摘要:因而,前端開發(fā)人員也需要更多關(guān)注安全性方面的問題。對于提升應(yīng)用的安全性,這是目前為止最重要的一步。有很多種靈活的用法,如果使用得當(dāng),可以有效提升應(yīng)用的安全性。可用性目前所有主流的瀏覽器都支持,除了。你可以通過的屬性來增強(qiáng)使用的安全性。

得益于HTML5,Web應(yīng)用中越來越多的邏輯從服務(wù)器端遷移到了客戶端。因而,前端開發(fā)人員也需要更多關(guān)注安全性方面的問題。在這篇文章中,我會告訴你如何使你的應(yīng)用更加安全。我會著重描述一些你可能從未聽說過的技術(shù),而不是僅僅告訴你“別忘了對用戶提交的頁面數(shù)據(jù)做轉(zhuǎn)義(escape)”。

HTTP?想都別想

當(dāng)然,我并不想讓你通過FTP或者普通的TCP協(xié)議來傳輸你的數(shù)據(jù)。我的意思是,如果你想讓你的用戶安全地訪問你的網(wǎng)站,你應(yīng)該使用SSL(HTTPS)來加密你的數(shù)據(jù)傳輸。不僅要加密登陸節(jié)點或者關(guān)鍵信息,而是要加密所有的數(shù)據(jù)。否則當(dāng)用戶通過公用網(wǎng)絡(luò)訪問你的應(yīng)用時,他看見的內(nèi)容說不定已經(jīng)被別人“黑”掉了。這就叫中間人攻擊,見下圖:


(譯者注:此處引用的原圖中筆誤,中間人攻擊的英文為Man-In-The-Middle Attack)

如果你使用SSL,所有的數(shù)據(jù)在發(fā)送之前就會被加密,即使攻擊者在網(wǎng)絡(luò)中截獲了數(shù)據(jù)包,他也沒有辦法查看或者篡改其中的內(nèi)容。對于提升應(yīng)用的安全性,這是目前為止最重要的一步。

嚴(yán)格傳輸安全性標(biāo)記(Strict-Transport-Security)

如果你只想通過SSL來傳輸你的數(shù)據(jù),那么這個HTTP頭屬性會讓你覺得非常好用。如果服務(wù)器端在響應(yīng)頭中使用了這個標(biāo)記(你也可以在頁面中使用標(biāo)簽,不過這樣的話就會存在一個未被加密的請求),那么所有從客戶端到服務(wù)器端的數(shù)據(jù)都會被加密。使用方式如下:

Strict-Transport-Security: max-age=3600; includeSubDomains

其中的includeSubDomains屬性是可選的,你可以使用它來加密當(dāng)前域的子域,所有對子域的訪問也會被HTTPS加密。而其中的max-age屬性可以設(shè)置在多長的時間范圍內(nèi)(以秒為單位)需要用SSL對頁面數(shù)據(jù)傳輸進(jìn)行加密。不過可惜的是,目前只有Firefox、Chrome和Opera瀏覽器支持這個標(biāo)記。

Secure和HttpOnly屬性

還有一種方法可以有效增強(qiáng)HTTP和HTTPS訪問的安全性,那就是使用Secure和HttpOnly這兩個cookie屬性。前者能確保cookie的內(nèi)容只通過SSL連接進(jìn)行傳輸;而后者正好相反。如果你覺得這兩者互相矛盾,沒啥用處,那就錯了。它們告訴瀏覽器cookie的內(nèi)容只能分別通過HTTP(S)協(xié)議進(jìn)行訪問,從而避免了被別人輕易竊取,比如JavaScript中的document.cookie.

通過Content-Security-Policy(CSP)標(biāo)記來減少跨站腳本攻擊(XSS)的危害

如果你覺得依靠XSS過濾器能夠防范所有可能的XSS攻擊,不妨先看一看這篇文章,再好好思考一下。當(dāng)然,為整個Web應(yīng)用都配置上完備的防范措施也會存在一些問題,比如,可能拖累整個網(wǎng)站的性能。不過我還有一招。

這招叫做Content-Security-Policy標(biāo)記。它能讓你指定網(wǎng)站上所有腳本和圖片等資源的源站點。此外,它還能阻止所有內(nèi)聯(lián)(inline)的腳本和樣式。即使有人在頁面評論或者回帖中嵌入了腳本標(biāo)簽,這些腳本代碼也不會被執(zhí)行。CSP標(biāo)記一般寫在HTTP頭中(也可以寫在HTML的標(biāo)簽中),寫法如下:

Content-Security-Policy: policy

其中的policy字段代表一系列CSP屬性,下面列舉一些常用的屬性:

script-src – 設(shè)置可以接受的JavaScript代碼的源站點

style-src – 設(shè)置可以接受的CSS樣式代碼的源站點

connect-src – 定義瀏覽器可以通過XHR、WebSocket或者 EventSource訪問哪些站點

font-src – 設(shè)置可以接受的字體文件的源站點

frame-src – 定義瀏覽器可以通過iframe訪問哪些站點

img-src – 設(shè)置可以接受的圖片的源站點

media-src – 設(shè)置可以接受的音頻和視頻文件的源站點

object-src – 設(shè)置可以接受的Flash和其它插件的源站點

如果沒有設(shè)置上述屬性,那么瀏覽器默認(rèn)會接受來自任何源站點的腳本和數(shù)據(jù)。不過瀏覽器的默認(rèn)屬性也能通過default-src屬性來設(shè)置。其它的屬性如果沒有設(shè)置的話,就會默認(rèn)采用這個屬性中設(shè)置的值。此外,還有一個叫做sandbox的屬性,它可以讓瀏覽器以iframe的形式加載頁面。下面是一個CSP頭的例子:

Content-Security-Policy: default-src: "self"; script-src: https://apis.google.com;

在這個例子中,瀏覽器只會加載源自這個Web應(yīng)用所在站點的資源(默認(rèn)源設(shè)置為self),以及通過Google API服務(wù)器獲取的腳本。CSP有很多種靈活的用法,如果使用得當(dāng),可以有效提升Web應(yīng)用的安全性。

CSP的缺點

當(dāng)你使用CSP的時候,有一點千萬要記住:默認(rèn)情況下,所有的內(nèi)聯(lián)JavaScript腳本都不會被執(zhí)行。例如:

內(nèi)聯(lián)的事件監(jiān)聽器:比如


所有的javascript URL:比如


之所以這樣,是因為瀏覽器無法區(qū)分你的內(nèi)聯(lián)腳本和黑客注入的腳本。你需要通過JavaScript的addEventListener或者一些框架中類似的函數(shù)來重寫上述腳本。某種程度上來看,這也不算一件壞事,它逼你不得不分離邏輯層的代碼和展現(xiàn)層的代碼,而你本來就應(yīng)該這么做。此外,CSP默認(rèn)還會阻止所有eval()風(fēng)格的代碼的執(zhí)行,包括setInterval/setTimeout中的字符串和類似于new Function(‘return false’)之類的代碼。

CSP的可用性

大部分時下流行的瀏覽器都支持CSP。Firefox、Chrome和Opera(包括手持設(shè)備上的)使用標(biāo)準(zhǔn)的CSP頭。Safari(包括iOS中的)和安卓上的Chrome使用X-WebKit-CSP頭。IE10(僅支持sandbox屬性)使用X-Content-Security-Policy頭。所以,由于IE的支持(部分支持也是支持),你不僅可以著手使用CSP(除非你用的是Google Chrome Frame之類的東西),而且還能在各種實際的瀏覽器中運(yùn)行,有效地改善Web應(yīng)用的安全性。

使用跨域資源共享(Cross Origin Resource Sharing)來代替JSONP

目前由于瀏覽器同源策略的限制,JSONP常被用于從其它服務(wù)器上獲取數(shù)據(jù)。通常的辦法是在腳本中寫一個回調(diào)函數(shù),然后把回調(diào)函數(shù)的名字寫在請求的URL中,像下面這樣:

function parseData(data) {
   ...
}


但是這樣做會有很大的安全隱患。如果你請求數(shù)據(jù)的服務(wù)器被黑了,那么黑客就能在返回的數(shù)據(jù)中植入惡意代碼,進(jìn)而竊取用戶的隱私信息。因為在瀏覽器看來,通過這種方法獲取的腳本代碼和正常的頁面代碼沒什么區(qū)別。

正確的做法是使用跨域資源共享。它允許資源提供方在響應(yīng)頭中加入一個特殊的標(biāo)記,使你能通過XHR來獲取、解析并驗證數(shù)據(jù)。這樣就能避免惡意代碼在你的應(yīng)用中執(zhí)行。

這個方法需要在響應(yīng)頭中加入的標(biāo)記如下:

Access-Control-Allow-Origin: allowed origins

這里可以列舉一些可以接受的數(shù)據(jù)源,以逗號隔開,使用通配符*來接受所有的數(shù)據(jù)源。

CORS可用性

目前所有主流的瀏覽器都支持,除了Opera Mini。

當(dāng)然,更重要的是數(shù)據(jù)提供方能支持跨域資源共享,不過這就不是開發(fā)者能說了算的了。

在iframe中使用sandbox屬性

如果你使用iframe加載外部網(wǎng)站的內(nèi)容,也別忘了它的安全問題。你可以通過iframe的sandbox屬性來增強(qiáng)iframe使用的安全性。通過設(shè)置sandbox屬性,可以使得iframe無法隨意跳轉(zhuǎn)頁面,無法執(zhí)行外部腳本,無法鎖定鼠標(biāo),無法彈出新窗口,無法提交表單,等等。此外頁面上若干個iframe中加載的所有內(nèi)容還必須來自唯一的源,也就不能使用localStorage等有悖于同源策略的東西。當(dāng)然,如果有需要的話,你也可以通過顯式的設(shè)置來放寬限制,可以設(shè)置的屬性如下:

allow-same-origin –iframe只要各自符合同源規(guī)范即可

allow-scripts –iframe中可以執(zhí)行JavaScript腳本

allow-forms –iframe中可以提交表單

allow-pointer-lock –iframe中可以鎖定鼠標(biāo)

allow-popups – iframe中可以彈出新窗口

allow-top-navigation – iframe中可以完成頁面跳轉(zhuǎn)

可用性

目前iframe的sandbox屬性受各種主流瀏覽器支持,除了Opera Mini以外。

結(jié)束語

主要內(nèi)容就是這些了。希望讀者能通過這篇文章學(xué)到一些新技術(shù),能用于今后的項目中,更好的提升Web應(yīng)用的安全性。得益于HTML5的發(fā)展,我們可以在Web上實現(xiàn)越來越豐富的功能。但是我們也不能掉以輕心,因為網(wǎng)絡(luò)中攻擊和威脅無處不在,在敲第一行代碼之前就要好好想一想安全性方面的問題。


原文:Client-Side Security Best Practices
轉(zhuǎn)載自: 伯樂在線 - njuyz

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/11101.html

相關(guān)文章

  • [譯]Express在生產(chǎn)環(huán)境下的最佳實踐 - 安全

    摘要:前言這將是一個分為兩部分,內(nèi)容是關(guān)于在生產(chǎn)環(huán)境下,跑應(yīng)用的最佳實踐。潛在的攻擊者可以通過它們進(jìn)行針對性的攻擊。 前言 這將是一個分為兩部分,內(nèi)容是關(guān)于在生產(chǎn)環(huán)境下,跑Express應(yīng)用的最佳實踐。第一部分會關(guān)注安全性,第二部分最會關(guān)注性能和可靠性。當(dāng)你讀這篇文章時,假設(shè)你已經(jīng)對Node.js和web開發(fā)有所了解,并且對生產(chǎn)環(huán)境有了概念。 概覽 生產(chǎn)環(huán)境,指的是軟件生命循環(huán)中的某個階段。...

    Forelax 評論0 收藏0
  • PostgreSQL安全:快速查看身份驗證最佳實踐

    摘要:它提供自動身份驗證單點登錄。對于真實用戶,更需要或身份驗證。此外,如果從外部世界訪問數(shù)據(jù)庫服務(wù)器,則使用證書加密會話以避免數(shù)據(jù)包嗅探很有用。這種身份驗證方法稱為代理身份驗證。 showImg(https://segmentfault.com/img/remote/1460000018887928); 來源 | 愿碼(ChainDesk.CN)內(nèi)容編輯 愿碼Slogan | 連接每個程...

    SnaiLiu 評論0 收藏0
  • 在零信任世界中提高AWS安全的六個最佳實踐

    摘要:在零信任世界中,六種提高安全性的最佳做法在亞馬遜網(wǎng)絡(luò)服務(wù)公司,報告稱,年第三季度的收入為億美元,年前三個財政季度的收入為億美元。在零信任世界中增加對的安全性被盜的特權(quán)訪問憑據(jù)是當(dāng)今違規(guī)的主要原因。在零信任世界中,六種提高AWS安全性的最佳做法在亞馬遜網(wǎng)絡(luò)服務(wù)公司(Amazon Web Services,AWS)報告稱,2018年第三季度的收入為66億美元,2018年前三個財政季度的收入為18...

    BenCHou 評論0 收藏0
  • REST API最佳實踐

    摘要:最佳實踐漸漸成為向外曝露服務(wù)的通用方式。有效的使用狀態(tài)碼定義了非常多的狀態(tài)碼,這些碼對客戶端非常有意義。下面是狀態(tài)碼的列表和摘要表示對應(yīng)的或操作成功。 REST API最佳實踐 REST漸漸成為向外曝露服務(wù)的通用方式。之所以這么流行的原因主要是簡單,易于使用,使用HTTP協(xié)議(REST可以用于所有協(xié)議,但應(yīng)用最廣泛的是HTTP)等。但是所有向外暴露的資源都被認(rèn)為是REST是一種誤解,是...

    ShevaKuilin 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<