2015-11-05 49 views
0

我創建單頁網頁應用程序與ArangoDB存儲。 Arango提供了訪問和操作數據的絕佳方法。其中之一是經典的JS API。在客戶端JS中編寫直接的DB查詢將是很容易的,這將直接對DB進行查詢。所以中間沒有服務器應用程序。安全分貝查詢單頁網絡應用程序

當然,這實在是不安全的模式。所以我應該編寫一些REST-full API服務,通過URL從服務器查詢數據,然後服務器查詢數據庫。但是這真的很不方便,因爲我需要編寫兩到三次的代碼(第一次查詢我的服務器,第二次查詢數據庫,並且可能在兩個查詢之間有一些轉換器)。另外,我認爲我的服務器的API調用看起來與針對數據庫的API調用幾乎相同。

我不想去完全抽象,因爲應用程序應該很複雜,並且會有很多類型的API請求,這隻會帶來bug並且會花費更多時間。

那麼從數據庫請求數據到客戶端應用程序的最佳方式是什麼,首先是安全性,其次是編碼的簡易性?

+1

看來你的目標有衝突。編寫不安全的代碼非常容易。編寫安全代碼很困難。但你想要兩個。我認爲你應該更喜歡安全。否則,你會希望你的數據庫通過SQL注入被刪除之後。 – ray

+3

如果你的目標是ArangoDB(看起來這個問題的標籤是這樣的),那麼[Foxx](https://www.arangodb.com/foxx/)。它是一個用於構建基於REST的應用程序的服務器端JavaScript框架,運行在ArangoDB內部。數據庫操作和查詢您的應用程序需求可以通過URL訪問,以便您的單頁應用程序可以直接調用它們。仍然可以控制可以運行的查詢,因爲您可以控制Foxx路由中的代碼。不需要使用Foxx編寫客戶端查詢,只需要使用常規的AJAX手段調用服務器URL即可。 – stj

回答

0

我發現了一個GraphQLRelay被Facebook最能解決這個問題。

+0

是的,還有幾個基於客戶端的數據庫。通過這種方式,中繼將調用您的Web(REST)服務,並且無論如何您都需要在服務器端服務上實施適當的授權。 – gusto2

+0

不用了,用ArangoDB就簡單多了。不需要REST端點。 –

+0

我瞭解您對搜索的使用簡單性,我沒有說您需要REST服務。我試圖說的(檢查原始問題)是,沒有適當的服務器端授權,你不能相信你的客戶端請求。始終可以操縱/僞造客戶端代碼。 – gusto2

1

我真的會建議編寫REST API調用(或一般的URL調用)來訪問您的數據。任何在客戶端上運行的東西或來自客戶端的任何流量都可以被訪問和操縱。這與身份驗證和SQL調用自己。 你想保護什麼? DB客戶端認證?如果你加密它,你需要在客戶端解密它。 SQL調用 - 如果您構建並傳輸它們,客戶端可以操縱它們以ANY值獲取/更新ANY數據。真的沒有簡單的方法..周圍那麼 - 是安全的 - 堅持到這裏的模式..