2015-11-27 51 views
0

目前我正在研究一個我將部署(某天)用於我自己的創業公司的CRUD應用程序。然而,我沒有接近完成這個產品,我偶然發現了一個我似乎無法解決的問題。(NodeJS,MySQL,AngularJS,Express 4.0)風險不阻止我的用戶的API /路線?

我正在使用Express來爲我的MySQL數據庫提供角度的數據。爲此,我必須創建'/ api /'路線。但是,如果我去(例如)'/ api/clients',我將能夠看到整個客戶列表中的一個醜陋的數組。在這種情況下,這並不重要,因爲它只是他們無論如何都能看到的數據。

但是我的問題是,阻止用戶的這種類型的路線很重要嗎?當用戶轉到'api/createClient'時會出現問題嗎?這可能導致數據庫注入,可能會毀了我的分貝?

我的項目可以在這裏找到:https://github.com/mickvanhulst/BeheerdersOmgevingSA

  • 服務器端的路由代碼,可以發現:服務器>道> clientDao.js
  • 控制器,HTML &客戶端路由可以在發現'公共'文件夾。

我希望我的問題很清楚,有人能回答我的問題。如果沒有,請說明爲什麼問題不明確,我會盡力澄清。

謝謝!

回答

1

看看代碼,它看起來像你的URL可以直接使用瀏覽器訪問,如果是的話,這確實會造成安全問題。

使用用戶提供的字段或值進行數據庫事務是主要的安全問題,如果這些數據在進行數據庫調用之前未經過驗證和消毒。

我會推薦以下最低的步驟各具特色的API是內部的,但可以使用瀏覽器訪問前遵循 -

  1. 如果這是內部的,那麼不要從服務器提供HEADER Access Control或保持僅限於您的域名。這可以防止從其他域對您的API進行任何Ajax調用。

  2. 在進行任何類型的數據庫事務之前,請徹底清理並驗證所有數據。關於如何做到這一點,到處都有很多材料。

  3. 如果這些API旨在用於內部目的,那麼請在藉助中間件進行邏輯工作之前,先爲API提供某種身份驗證。您可以利用Cookie認證進行非常簡單的API認證管理。如果您想要更高級別的安全性,您還可以使用JSON Web令牌。

如果你操縱你的數據庫,那麼我強烈建議你在你的API中使用某種認證。當然,第二點是必須的。

+0

謝謝你的回答!天真的我希望有一個簡單的答案來阻止所有用戶對api的請求,但這會導致我無法顯示數據庫中的任何數據。 我可以從你的答案中得出結論:我最好的辦法就是驗證傳入數據(對我的數據庫)? 我不完全理解你的第三點,因爲我對安全性尚不熟悉。 – Mick

+0

既然你會將數據插入數據庫,我會建議上面的步驟... – Chandan