2012-11-19 130 views
3

我目前正在尋找開發我的下一個web應用程序的最佳方式。我正在考慮使用Backbone.js並構建一個單頁面應用程序。但我真的無法想象如何保護我的應用程序,因爲幾乎所有事情都是在客戶端完成的。當然,我可以阻止用戶訪問我的RESTful Api,這樣他們就無法訪問我的數據。但所有的視圖/模型/集合/模板js文件仍然可以訪問。使用Backbone.js,Require.js和Laravel的SPA安全

或者是否有一種已知的方式來使用php(laravel)來提供js文件,這將允許我僅爲相應用戶提供所需的文件。

我只是無法通過搜索Web找到解決方案。但我不認爲我是一個孤獨的人,他需要一個乾淨安全的身份驗證方法,包括不同的用戶權限。

預先感謝您!

+0

您是否考慮過僅使用與require.js一起提供的r.js來爲您的代碼編譯版本? –

回答

2

您的後端應用程序將從後端(= API)獲取數據,並可能發回一些更改。 只要您的後端受到保護,此代碼就不能有「安全漏洞/泄漏」。 如果你害怕盜取你的代碼的人,你總是可以縮小JS(爲此檢查grunt.js和almond.js)

爲了保護你的後端,你可以使用Laravel的auth類和auth過濾器正如之前所提。

除了正常的身份驗證,您可以實現角色,您可以分配給特定的用戶,讓他們或多或少地訪問您的後端的某些資源。

0

下面是我會嘗試的方法:

將應用程序分爲兩部分。

一部分 - 在單獨的頁面上通過常規的Laravel Auth登錄,然後當用戶登錄時以不同的視圖提供單頁面應用程序。

這不工作?

+0

當然會,但是你只能夠保護整個應用程序,而不是擁有不同用戶權限的多個部分。 而你仍然無法保護你的js文件。 –

+0

你是什麼意思,你將無法保護你的js文件?在Laravel中,您可以在任何路由或控制器上放置Auth過濾器。您絕對可以保護您想要保護的應用程序的某些部分。不登錄用戶將不知道你的js文件在哪裏! – msurguy

0

Web服務與您構建的任何其他Web應用程序沒有區別。在一天結束的時候,你會向客戶端展示功能(這也是攻擊者)。無論客戶端實施什麼都不重要,如果您暴露危險的功能,您將被黑客入侵。

有會話狀態,跟蹤用戶ID並確保用戶只訪問他們被允許訪問的資源。

+0

您能否進一步解釋「會話狀態」和「資源」的含義?骨幹代碼或服務器提供的內容數據?我認爲根據客戶端的會話狀態禁止訪問js文件。還是我完全錯了? 我只是不確定是否它是一件好事,每個人都可以訪問我的backbone.js代碼,這在某種程度上是我數據庫結構的一個鏡像。 –

+0

@Marcel服務器資源,服務器會話狀態。不能進一步解釋。 – rook

0

我不認爲JS /模板文件暴露真正重要。實質上,您應該只允許數據交互以驗證用戶身份。把它想成兩個獨立的應用程序。

  1. 前端應用程序登錄,並存儲cookie(或使用其他一些持久性)。
  2. 後端應用程序然後使用持久性驗證來驗證每個用戶對數據的請求以及每個用戶操作。

這樣你就不必擔心安全問題,客戶端只能獲取服務器允許的數據,而且同樣只能在服務器允許的情況下與數據交互。無論如何,即使登錄,您也不應依賴客戶端的安全性,否則某些惡意用戶可能會保存所有前端代碼,並在未經身份驗證的情況下將其用於您。

+0

正如我的文章所述,我知道盡管每個人都可以訪問我的Backbone文件,但是沒有人能夠訪問我在服務器上的數據。 你可能對「我不認爲JS /模板文件暴露真正重要」,但我只是不太喜歡它。也許我只是偏執狂...... –

+0

我明白你爲什麼不希望看到它,我有同樣的擔憂,但如果你正在交付桌面應用程序,它會是一樣的。所有的代碼都會在那裏供用戶使用,但是它所使用的服務器將被鎖定,因此不會有任何危險(只要你沒有硬核密碼,當然是:P) – GTF

相關問題