亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

テキスト

概觀

術語“生產”指的是軟件生命周期中的一個階段,即應用程序或API通常可供其最終用戶或消費者使用。相反,在“開發(fā)”階段,您仍然在積極編寫和測試代碼,并且該應用程序不對外部訪問開放。相應的系統(tǒng)環(huán)境分別被稱為生產開發(fā)環(huán)境。

開發(fā)和生產環(huán)境通常以不同的方式建立,并具有完全不同的要求。生產中可能無法接受發(fā)展中的問題。例如,在開發(fā)環(huán)境中,您可能需要詳細記錄錯誤以進行調試,而同樣的行為可能會成為生產環(huán)境中的安全問題。在開發(fā)過程中,您無需擔心可擴展性,可靠性和性能,而這些擔憂在生產中變得至關重要。

注意:如果您認為您發(fā)現(xiàn)了Express中的安全漏洞,請參閱安全策略和過程。

生產中的Express應用程序的安全最佳實踐包括:

  • 請勿使用Express的已棄用或易受攻擊的版本

  • 使用TLS

  • 使用頭盔

  • 使用cookies安全

  • 確保您的依賴性是安全的

  • 避免其他已知的漏洞

  • 額外的考慮

請勿使用Express的已棄用或易受攻擊的版本

Express 2.x和3.x不再維護。這些版本中的安全和性能問題不會被修復。不要使用它們!如果您尚未移至版本4,請按照遷移指南進行操作。

同時確保您未使用安全更新頁面上列出的任何易受攻擊的Express版本。如果是,請更新到其中一個穩(wěn)定版本,最好是最新版本。

使用TLS

如果您的應用處理或傳輸敏感數(shù)據(jù),請使用傳輸層安全性(TLS)來保護連接和數(shù)據(jù)。該技術在將數(shù)據(jù)從客戶端發(fā)送到服務器之前對其進行加密,從而防止一些常見(并且容易)的黑客攻擊。雖然Ajax和POST請求可能不明顯,并且在瀏覽器中似乎“隱藏”,但它們的網絡流量很容易受到數(shù)據(jù)包嗅探和中間人攻擊。

您可能熟悉安全套接字層(SSL)加密。TLS只是SSL的下一個進程(https://msdn.microsoft.com/en-us/library/windows/desktop/aa380515(v = vs.85%29.aspx)。換句話說,如果您使用的是以前的SSL,可以考慮升級到TLS,一般來說,我們推薦Nginx來處理TLS,關于在Nginx(和其他服務器)上配置TLS的很好的參考,請參閱推薦的服務器配置(Mozilla Wiki)。

此外,獲得免費TLS證書的便捷工具還包括由互聯(lián)網安全研究組(ISRG)提供的免費,自動化和開放的認證機構(CA)Let's Encrypt。

使用頭盔

通過適當設置HTTP標頭,頭盔可以幫助保護您的應用免受一些著名的網絡漏洞攻擊。

頭盔實際上只是九個較小的中間件功能的集合,它們設置了與安全相關的HTTP頭文件:

  • csp設置Content-Security-Policy標題以幫助防止跨站腳本攻擊和其他跨站點注入。

  • hidePoweredBy刪除X-Powered-By標題。

  • hpkp添加公共密鑰固定標頭以防止偽造證書的中間人攻擊。

  • hsts設置Strict-Transport-Security標頭,強制執(zhí)行到服務器的安全(HTTP over SSL / TLS)連接。

  • ieNoOpen設置X-Download-Options為IE8 +。

  • noCache設置Cache-Control和Pragma標題來禁用客戶端緩存。

  • noSniff設置X-Content-Type-Options為防止瀏覽器從MIME中嗅探到已聲明的內容類型的響應。

  • frameguard設置X-Frame-Options標題以提供點擊劫持保護。

  • xssFilter設置X-XSS-Protection為在最新的Web瀏覽器中啟用跨站點腳本(XSS)過濾器。

像其他模塊一樣安裝頭盔:

$ npm install --save helmet

然后在代碼中使用它:

// ...var helmet = require('helmet')app.use(helmet())// ...

至少,禁用X-Powered-By標頭

如果你不想使用頭盔,那么至少要禁用X-Powered-By頭部。攻擊者可以使用此標頭(默認情況下啟用)檢測運行Express的應用程序,然后啟動專門針對性的攻擊。

所以,最好的做法是用app.disable()方法關閉標題:

app.disable('x-powered-by')

如果你使用helmet.js它,它為你照顧這個。

注意:禁用X-Powered-By header并不能防止復雜的攻擊者確定應用程序正在運行Express。它可能會阻止偶然的利用,但還有其他方式可以確定應用程序正在運行Express。

使用cookies安全

為確保cookie不會將您的應用打開,請不要使用默認會話cookie名稱并適當設置cookie安全選項。

有兩個主要的中間件cookie會話模塊:

  • 快速會話,取代express.sessionExpress 3.x內置的中間件。

  • cookie會話,用于替換express.cookieSessionExpress 3.x中內置的中間件。

這兩個模塊的主要區(qū)別是它們如何保存cookie會話數(shù)據(jù)。該快遞會話服務器上的中間件存儲會話數(shù)據(jù); 它只會將會話ID保存在cookie本身中,而不是會話數(shù)據(jù)。默認情況下,它使用內存中的存儲,而不是為生產環(huán)境設計的。在制作中,您需要設置一個可擴展的會話存儲; 請參閱兼容會話存儲的列表。

相反,Cookie會話中間件實現(xiàn)了cookie支持的存儲:它將整個會話序列化為cookie,而不僅僅是會話密鑰。僅當會話數(shù)據(jù)相對較小并且易于編碼為原始值(而不是對象)時才使用它。雖然瀏覽器應支持每個cookie至少4096個字節(jié),但為確保不超過限制,請不要超過每個域4093個字節(jié)的大小。此外,請注意,客戶端可以看到Cookie數(shù)據(jù),因此如果有任何理由保證其安全或模糊,那么Express-session可能是更好的選擇。

不要使用默認的會話cookie名稱

使用默認會話cookie名稱可以打開您的應用程序以進行攻擊。構成的安全問題類似于X-Powered-By:潛在的攻擊者可以使用它來指紋服務器并相應地針對攻擊。

為了避免這個問題,使用通用的cookie名稱; 例如使用快速會話中間件:

var session = require('express-session')app.set('trust proxy', 1) // trust first proxyapp.use(session({
  secret: 's3Cur3',
  name: 'sessionId'}))

設置Cookie安全選項

設置以下cookie選項以增強安全性:

  • secure  - 確保瀏覽器僅通過HTTPS發(fā)送Cookie。

  • httpOnly  - 確保cookie僅通過HTTP(S)而不是客戶端JavaScript發(fā)送,有助于防止跨站腳本攻擊。

  • domain - 表示cookie的域名; 使用它來與請求URL的服務器的域進行比較。如果它們匹配,則檢查下一個路徑屬性。

  • path - 表示Cookie的路徑; 用它來比較請求路徑。如果這個和域名匹配,然后發(fā)送請求中的cookie。

  • expires  - 用于設置持久性cookie的到期日期。

以下是使用Cookie會話中間件的示例:

var session = require('cookie-session')
var express = require('express')
var app = express()
var expiryDate = new Date(Date.now() + 60 * 60 * 1000) // 1 hour
app.use(session({
  name: 'session',
  keys: ['key1', 'key2'],
  cookie: {
    secure: true,
    httpOnly: true,
    domain: 'example.com',
    path: 'foo/bar',
    expires: expiryDate  }}))

確保您的依賴性是安全的

使用npm來管理你的應用程序的依賴是強大和方便的。但是,您使用的軟件包可能包含嚴重的安全漏洞,這些漏洞也可能會影響您的應用程序。您的應用程序的安全性與您的依賴關系中的“最薄弱的環(huán)節(jié)”一樣強大。

使用以下兩種工具中的一種或兩種來幫助確保您使用的第三方軟件包的安全性:nsp和Snyk。

nsp是一個命令行工具,用于檢查Node Security項目漏洞數(shù)據(jù)庫,以確定您的應用程序是否使用具有已知漏洞的軟件包。安裝如下:

$ npm i nsp -g

使用此命令提交npm-shrinkwrap.json/ package.json文件進行驗證,以nodesecurity.io:

$ nsp check

Snyk提供了一個命令行工具和一個Github集成,可以檢查您的應用程序與Snyk的開源漏洞數(shù)據(jù)庫是否存在相關性中的任何已知漏洞。按如下所示安裝CLI:

$ npm install -g snyk
$ cd your-app

使用此命令測試您的應用程序是否存在漏洞:

$ snyk test

使用此命令打開一個向導,引導您完成應用更新或修補程序以修復找到的漏洞的過程:

$ snyk wizard

避免其他已知的漏洞

留意Node Security Project或Snyk建議,這些建議可能會影響Express或您的應用使用的其他模塊。一般來說,這些數(shù)據(jù)庫是關于節(jié)點安全性的知識和工具的絕佳資源。

最后,Express應用程序 - 就像任何其他網絡應用程序 - 可能容易受到各種基于Web的攻擊。熟悉已知的網絡漏洞并采取預防措施以避免它們。

額外的考慮

以下是一些優(yōu)秀的Node.js安全檢查表的進一步建議。有關這些建議的所有詳細信息,請參閱該博客文章:

  • 實施限速以防止對認證的暴力攻擊。一種方法是使用StrongLoop API網關來執(zhí)行限速策略?;蛘撸梢允褂弥虚g件(如express-limiter),但這樣做會需要您稍微修改代碼。

  • 使用csurf中間件來防止跨站請求偽造(CSRF)。

  • 始終過濾和清理用戶輸入以防止跨站點腳本(XSS)和命令注入攻擊。

  • 通過使用參數(shù)化查詢或預準備語句來防御SQL注入攻擊。

  • 使用開源sqlmap工具來檢測應用程序中的SQL注入漏洞。

  • 使用nmap和sslyze工具測試SSL密碼,密鑰和重新協(xié)商的配置以及證書的有效性。

  • 使用safe-regex來確保您的正則表達式不受正則表達式拒絕服務攻擊的影響。

前の記事: 次の記事: