我們正在計劃一個安全的Node.JS服務器,它使用多個第三方Web服務。每個都需要操作團隊需要配置的憑據。管理Node.JS的Web服務憑據的最佳實踐?
很明顯,他們可以簡單地將它們以明文形式放在配置文件中。
Microsoft .NET似乎提供了更好的DPAPI選項 - 請參閱Credential storage best practices。有沒有辦法通過IISNode使其可用?或者是否有任何其他選項可以在Node-JS配置中保護這些憑據?
- 查爾斯
我們正在計劃一個安全的Node.JS服務器,它使用多個第三方Web服務。每個都需要操作團隊需要配置的憑據。管理Node.JS的Web服務憑據的最佳實踐?
很明顯,他們可以簡單地將它們以明文形式放在配置文件中。
Microsoft .NET似乎提供了更好的DPAPI選項 - 請參閱Credential storage best practices。有沒有辦法通過IISNode使其可用?或者是否有任何其他選項可以在Node-JS配置中保護這些憑據?
有2種方式來做到這一點安全:
第一個是當您啓動您的應用程序使用命令行參數。
這些參數然後process.argv
於是發現,node myapp.js username password
會給你:
process.argv[0]=node
process.argv[1]=/.../myapp.js (absolute path)
process.argv[2]=username
process.argv[3]=password
二是設置憑據作爲ENV變量。通常認爲這是最好的做法,因爲只有您有權訪問這些變量。
你將不得不使用export命令設置變量,比你訪問它在process.env
有幾個選項進行了廣泛討論,這裏包括由xShirase建議二:
http://pmuellr.blogspot.co.uk/2014/09/keeping-secrets-secret.html
用戶定義的服務解決了這個問題,但僅限於Cloud Foundry。
這個博客http://encosia.com/using-nconf-and-azure-to-avoid-leaking-secrets-on-github/指出你通常可以在服務器上單獨設置環境變量,並建議使用nconf分別讀取它們和配置文件。
我還在想,IIS是否有特色?
我現在必須做同樣的事情對我的外部API憑據。這是我做過什麼
希望這有助於。
所以你的配置可以和節點代碼一樣位於同一個容器中。
感謝您的響應。但也許我沒有說清楚。這將是一個Web服務器 - 我沒有啓動「應用程序」。所以ENV變量和命令行參數最終都必須位於腳本的某個位置;使用它們不會提供額外的安全性。或者我錯過了什麼? – CharlesW 2014-10-09 16:56:39
您的節點服務器仍然必須從某處啓動,因此您可以在運行服務器的計算機上設置env變量,不是嗎? – xShirase 2014-10-09 16:58:35