2015-09-26 22 views
4

我正在開發基於NodeJs/Express的我的網站項目,對於某些UI部分,我正在使用Jquery ajax請求來獲取輔助數據。NodeJS/express - 公共API端點的安全性

我們如何處理我們用於瀏覽器的Ajax調用的Rest API端點的一些基本控制? 我在考慮某種類型的令牌授權,但一旦它被攔截,它也可以被其他客戶端(腳本等)使用,那麼我們如何保護我們的服務器免受不受歡迎的請求?在這種情況下應該使用哪些其他控件(識別來自同一客戶端的太多請求,客戶端黑名單等)?

回答

8

主要有三個主題認證,授權,安全。我會給予鏈接,並且只是簡短的回答。主題足夠大,可以寫幾本書。

認證 - 誰是誰提出請求。認證用戶有很多「策略」。請檢查大多數瞳孔模塊:http://passportjs.org/docs

當然,你可以單獨實施一個或多個這種策略。

對於無狀態身份驗證jwt令牌非常方便。如果你想自己編碼(Passport有這個策略),請檢查這個鏈接(網絡中的很多)。

如何防止令牌攔截?始終使用https並將令牌過期時間縮短。

在哪裏存儲令牌客戶端?詳細看這https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/總之,由於XSS攻擊,不要存儲在網絡存儲中。使用cookies時,如果他們正確配置他們是安全的(更多在附加鏈接),如果沒有配置他們非常容易受到威脅。

授權:我們知道用戶,但他只能訪問一些資源。請檢查https://github.com/OptimalBits/node_acl 有node_acl和passport的要點:https://gist.github.com/danwit/e0a7c5ad57c9ce5659d2 簡而言之護照驗證用戶。我們現在誰想要什麼。我們設置角色和資源並定義角色和資源關係。然後我們爲每個用戶角色設置。模塊將檢查我們的用戶權限。

安全性:請在sails框架文檔http://sailsjs.org/documentation/concepts/security的文檔中尋找這個主題,它們描述了攻擊以及框架如何防止形成它們。我寫了關於快遞的問題:

DDOS:(您的問題的一部分「來自同一客戶的太多請求」)「在API層,預防方式沒有太多可以做的事情。這是服務器管理員最關心的問題。總之使用負載均衡器。如果它是一個IP(不是數百),那麼黑名單或德利反應(開始看這個https://www.npmjs.com/package/delayed-request,但我解決方案必須更復雜)。

CSRF:「迫使最終用戶在Web應用程序後端執行不需要的操作的攻擊類型」。看看這個模塊https://www.npmjs.com/package/csrf

XSS:「惡意代理程序設法將客戶端JavaScript注入您的網站的攻擊類型」不相信任何來自用戶的數據。始終驗證,過濾,santize。看這https://www.npmjs.com/package/xss

在帆的文件,有更多的攻擊類型,但以上是最流行的。

+0

因此,如果我們的網頁是公開的,而不需要任何用戶身份驗證,那麼無法阻止任何外部對REST API的調用? – MQ87

+0

「公共」意味着對所有人開放,那麼對於你來說,什麼意思是「外部」呼叫? –

+0

在網站上下文之外使用,所以我們假設不是來自我寫的代碼。 – MQ87

0

使用快速會話+護照(http://passportjs.org/) 基本上,您應該有一個登錄到網站,並且只有經過身份驗證的用戶才能調用REST API。 現在...如果你不想登錄,比你無法真正保護API,因爲設計的網站是開放的。 你沒有指定太多的信息,所以很難說比這更多。

此外,DoS攻擊無法受到您的代碼的保護,通常它不是應用服務器的責任(在您的情況下,node.js express)提供此類保護。如果有人希望您的網站通過執行DoS攻擊而不是其他層(請參閱https://en.wikipedia.org/wiki/Denial-of-service_attack#Defense_techniques),這主要意味着它要由路由器/交換機/等等來實施。