如何防止 Ember Rails 模板泄漏到浏览器中

How can Ember Rails templates be kept from leaking into the browser?

本文关键字:泄漏 浏览器 何防止 Ember Rails      更新时间:2023-09-26

我正在考虑从AngularJS切换到Ember,作为我正在使用的几个Rails应用程序的前端框架。但是让我有点烦躁的事情涉及模板HTML如何以及何时发送到浏览器。

使用 Angular,我通常会像/api/v1/foo那样设置一个 Rails 端点,这样调用foo.html会渲染出一个模板,调用foo.json会渲染出它的数据;如果我想保护foo,我会将整个端点放在一个before_action :some_auth_method过滤器后面,有效地阻止对模板和数据进行未经授权的访问。

使用 Ember,看起来预编译的 Handlebars 模板都以一大块发送到浏览器,这样邪恶的访问者可以很容易地看到它们的样子---数据被剥夺,这是真的,但我仍然不确定我是否愿意将有关应用程序内部工作的模糊细节泄露给每个汤姆, 迪克,还有一起发生的哈基。

所以我的第一个问题当然是:我错过了什么吗?如果我不是,那么:有什么办法可以解决这种行为吗?

不,

你没有错过任何东西,这就是 Ember 开箱即用的工作方式。有没有办法解决这种行为?可能。但在你尝试解决它之前,你应该认真考虑它是否真的值得。你真的在乎是否有人拥有你网站的HTML模板吗?如果您的安全性设置正确,则不应在意。但如果你真的在乎,以下是我可能会做的:

  1. 在服务器上设置路由以检查对客户端上路由的访问。
  2. 设置将模板从服务器发送到客户端的方法。我要么发送预编译的模板,然后使用 eval() 获取函数,要么发送 HTML 并使用 Handlebars 编译器在客户端编译它。
  3. 如果路由的beforeModel钩,请检查对路由的访问。如果用户具有访问权限,请获取模板,将其存储在Ember.TEMPLATES然后让用户进入。如果用户没有访问权限,请将其重定向到其他位置。

您的问题中没有很多细节,所以我无法更具体,但这样的事情可以让您在需要时异步加载模板。在余烬论坛上也有类似的讨论。