如何在Rails应用程序中隐藏源代码片段?

时间:2010-10-27 17:36:00

标签: ruby-on-rails security

我注意到在查看我的Rails应用程序的来源时,很多信息都是公开的,不应该是 - 特别是包含我的GA帐号的Google Analytics脚本,以及我的表单的真实性令牌。 是否有关于在源代码中隐藏此类代码的指南?

3 个答案:

答案 0 :(得分:1)

您的Google Analytics ID和真实性令牌都需要供浏览器使用才能完成。它们不需要隐藏。让用户看到它们没有任何安全风险。

答案 1 :(得分:0)

如果“查看源代码”是指从服务器返回的HTML,则表示没有。有些服务和产品会对您的页面进行编码并使其难以解密,但这绝不是不可能的,因为您的浏览器最终必须这样做才能呈现页面。大多数这些页面加密器(有时称为它们)会使您的网站难以访问搜索引擎,因为它们在索引页面之前不会运行您的JavaScript。

看看其他网站,你会发现将这种东西保持开放是相当普遍的做法,因为隐藏它的时间和精力是浪费时间。只要您没有无意中泄露任何敏感信息,例如您的Amazon S3帐户密钥或用于加密会话的秘密(这不太可能偶然发生),那么您会没事的。

不过,请考虑一下。如果浏览器无法访问您的Google Analytics帐号,Google脚本将如何知道要跟踪哪个帐户?

答案 2 :(得分:0)

我认为在那里拥有您的真实性令牌并不危险。为了查看该真实性令牌,用户必须登录。该用户是否具有该会话的真实性令牌并不重要。它应该在用户注销时到期。

但是,如果你愿意,可以从源代码中隐藏这些内容(尽管如果你有Firebug或类似的工具,它们仍然可用)。

对于GA脚本,您可以将其视为资源。您的application.js(或其他一些包含的js文件)可以对控制器进行AJAX调用(请求标头必须接受javascript),并且您的控制器可以发回包含该脚本的js.erb文件。如果您查看对控制器的请求的响应,此js现在仅在Firebug中可见。你不会在源头看到它。

对于真实性令牌,您可以执行类似的操作。我在我的一个应用程序中创建了一个JavaScript表单构建器。此表单构建器是一个资源,它再次通过AJAX调用检索并作为js.erb发送。 js.erb文件有一个FormBuilder构造函数。在该构造函数中,有一个builder.form()函数执行此操作:

return $('<%= form_for @object do |f| %> <% end %>');

这将返回一个jQuery对象,其中包含带有真实性令牌和所有其他好东西的Rails表单。

如果您希望JS表单构建器执行的操作不仅仅是吐出表单(例如,根据对象的属性名称动态创建构建器对象的属性,这些属性名称包含相应属性的输入,复选框和集合),请与我和我可以告诉你我是怎么做的那样:)