在查看我的Rails应用程序的源代码时,我注意到很多不应该公开的信息都是公开的--特别是包含我的GA账号和表单的真实性令牌的Google Analytics脚本。在源代码中隐藏这类代码有什么指导原则吗?
发布于 2010-10-28 01:40:02
您的Google Analytics ID和真实性令牌都需要可供浏览器执行其工作。他们不需要被隐藏起来。让用户看到它们不会有任何安全风险。
发布于 2010-10-28 01:41:30
如果您所说的“查看源代码”是指从服务器返回的HTML,则不是。有一些服务和产品会对您的页面进行编码,并使其难以破译,但这绝不是不可能的,因为您的浏览器最终必须这样做才能呈现页面。这些有时被称为页面加密器的大多数都会使搜索引擎无法穿透您的站点,因为它们在索引页面之前不会运行您的JavaScript。
看看其他网站,你会发现让这类东西开放是相当普遍的做法,因为掩盖或隐藏它所涉及的时间和精力都是浪费时间。只要你没有无意中泄露任何敏感信息,比如你的亚马逊S3账户密钥或用于加密会话的秘密,这不太可能是偶然发生的,那么你就会好起来的。
不过,想一想吧。如果浏览器无法访问您的Google Analytics帐号,Google脚本如何知道要跟踪哪个帐户?
发布于 2010-10-28 01:48:10
我不认为把你的身份证明放在那里是危险的。为了查看该身份验证令牌,用户必须登录。用户是否拥有该会话真实性令牌并不重要。它应该在用户注销时过期。
但是,如果您愿意,可以对源代码隐藏这些内容(尽管如果您有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表单构建器不仅仅是输出一个表单(例如,基于对象的属性名称动态创建构建器对象的属性,其中包含相应属性的输入、复选框和集合),请与我交谈,我也可以告诉您我是如何做到的:)
https://stackoverflow.com/questions/4035988
复制相似问题