2012-11-19 39 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