Tag: 安全

Rails 3 ActiveRecordStore session_id篡改

我正在Rails 3.0.9中共同开发一个简单的Web应用程序,我已经意识到可能通过恶意请求篡改session_id。 请注意,这是我的第一个RoR应用程序,因此我的概念可能完全错误。 当前的应用程序function需要会话,所以我转向ActiveRecordStore会话存储, 安装它并开始在原始工作流程中进行测试。 我注意到Rails框架创建了名为_session_id cookie和一些随机类似哈希的字符串的值(在DB SESSION表中,此字符串对应于session_id列)。 如果更改了cookie中的值,例如使用Firebug,则当前会话ID将更改为随cookie提供的数据(使用request.session_options[:id]检查),并且更改将传播到数据库表,从而创建新的会话记录具有上述参数。 虽然这不会对会话的变量产生任何影响,但会话ID已经从其通常的类似哈希的外观偏离到用户被篡改的外观。 这是一个问题 – 如何检测或优先防止这种行为?

Rails:从日志中过滤JSON参数中的敏感数据

我正在运行Rails 3并尝试从我们的日志中过滤敏感信息,这些日志是作为post参数传递的JSON blob。 例如,用户创建可能会使用一个名为user的post param,其字符串值是JSON对象。 JSON对象中的一个键是password ,我们希望从日志中过滤掉它。 我发现这样做的最好方法是在filter_params中添加一个块,如下所示: keys_to_filter = [‘password’, ‘password_confirmation’] config.filter_parameters << lambda do |k,v| if v.is_a? String keys_to_filter.each do |key| # Match "key":"”, or “key”:””}, allowing for whitespace v.sub!(/(“\s*#{key}\s*”)\s*:\s*”[^,\}]*”\s*([,\}])/, “\\1:\”[FILTERED]\”\\2”) end end end 这会向filter_params添加一个块,这会导致另一个问题中描述的错误: Rails:ParameterFilter :: compiled_filter尝试重复符号 将块传递给filter_parameters似乎是不安全的,所以我想知道是否有另一种方法可以解决这个问题。

用于保护S3文档的Rails实现

我想通过rails app保护我的s3文件,如果我去: www.myapp.com/attachment/5应在显示/下载文档之前对用户进行身份validation。 我已经阅读了关于stackoverflow的类似问题,但我不确定我是否已经看到任何好的结论。 根据我的阅读,您可以采取一些措施来“保护”您的S3文档。 1)模糊URL。 我做到了这一点。 我认为这是一件好事,所以没有人可以猜到这个url。 例如,如果您的S3 URL显而易见,那么很容易“遍历”URL: https : //s3.amazonaws.com/myapp.com/attachments/1/document.doc 。 有一个URL,如: https : //s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc似乎好多了。 这很好,但不能解决通过电子邮件或网站传递URL的问题。 2)使用如下所示的过期URL: Rails 3,paperclip + S3 – 如何存储实例并保护访问对我而言,这不是一个很好的解决方案,因为URL被暴露(即使只是很短的一段时间)并且另一个用户可能及时重用URL。 您必须调整允许下载的时间,而不会提供太多的复制时间。 这似乎是错误的解决方案。 3)通过应用程序代理文档下载。 起初我尝试使用send_file: http : //www.therailsway.com/2009/2/22/file-downloads-done-right但问题是这些文件只能是服务器上的静态/本地文件不通过其他网站(S3 / AWS)提供服务。 但是,我可以使用send_data并将文档加载到我的应用程序中,并立即将文档提供给用户。 这个解决方案的问题很明显 – 带宽的两倍和时间的两倍(将文档加载到我的应用程序然后再返回给用户)。 我正在寻找一种能够提供#3完全安全性的解决方案,但不需要额外的带宽和时间来加载。 看起来Basecamp正在“保护”他们应用程序背后的文档(通过身份validation),我认为其他网站正在做类似的事情,但我不认为他们正在使用我的#3解决方案。 建议将不胜感激。 更新 : 我选择了第四个解决方案: 4)使用amazon存储桶策略来控制基于引用者的文件访问: http : //docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html 再次更新: #4井可以通过浏览器开发人员的工具轻松解决。 所以我仍然在寻找一个可靠的解决方案。

Rails登录重置会话

当用户成功登录时调用reset_session并在用户注销时再次调用它是最佳做法吗? 这样做会有副作用/问题吗?

使用Rails存储加密的cookie

我需要在Rails中的cookie中存储一小段数据(少于10个字符),我需要它是安全的。 我不希望任何人能够读取该数据或注入他们自己的数据(因为这会打开应用程序进行多种攻击)。 我认为加密cookie的内容是要走的路(我应该签名吗?)。 最好的方法是什么? 现在我正在这样做,这看起来很安全,但对于那些比我更了解安全性的人而言,很多东西看起来都很安全,然后发现它并不安全。 我以这种方式保存秘密: encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token) cookies[:secret] = { :value => encryptor.encrypt(secret), :domain => “example.com”, :secure => !(Rails.env.test? || Rails.env.development?) } 然后我就这样读它: encryptor = ActiveSupport::MessageEncryptor.new(Example::Application.config.secret_token) secret = encryptor.decrypt(cookies[:secret]) 那安全吗? 有没有更好的方法呢? 更新 :我了解Rails的会话及其安全性,通过签名cookie和可选地存储会话服务器端的内容,我确实使用会话来实现它的目的。 但我的问题是关于存储cookie,这是我在会话中不想要的一条信息,但我仍然需要它是安全的。

如何使用Rails保护数据库中的用户数据?

我正在创建一个需要存储大量敏感数据的rails应用程序。 为了向我的客户保证数据受到保护,我想基于每个用户对其进行加密。 我已经研究过寻找可以实现这一目标的gem。 到目前为止,我发现了保险箱和安全 。 总之,这似乎为我提供了一个解决方案。 但是,我想知道这是否是一种常见做法。 似乎大多数rails应用程序都有一些关于其用户的敏感数据存储。 AuthLogic正在处理我的密码加密,但电子邮件和其他个人数据同样敏感。 通常的做法是将这些项目未加密保留在数据库中并假设它永远不会受到损害吗? 我知道数据库位于一个无法与外界通信的区域,但是一个坚定的攻击者可能很容易妥协。 对于Rails开发人员来说,通常的做法是将数据保留为未加密状态,并且只是信任其Web服务器的安全性吗?

通过PHP中的适当身份validation进行安全登

如何在PHP中编写/组合安全登录? 网站开发者指南说我不应该自己动手,所以参考谷歌提供的样本是没用的。 你是如何做到这一点的呢? 假设您正在使用rails构建世界级的应用程序,这里可以使用相同的库/技术吗? 谢谢

在Rails中清理CSS

我想允许我正在构建的Web应用程序的用户编写自己的CSS以自定义他们的个人资料页面。 但是我知道这种开放存在许多安全风险,即背景:url(’javascript:alert(“得到你的cookie!”+ document.cookies’)。 因此,我正在寻找一种清理CSS的解决方案,同时仍然为我的用户提供尽可能多的CSSfunction。 所以我的问题,如果有人知道一个gem或插件来处理这个? 我已经搜索过我的大脑,所以任何提示都会非常感激!

params.merge和跨站点脚本

我正在使用Brakeman来识别安全问题。 它标记了使用params.merge作为跨站点脚本漏洞的任何链接。 我如何清理以下内容? – @archives.each do |archive| = link_to “FTP”, params.merge(:action => :ftp, :archive => archive, :recipient => “company”)

Rails – 每个子域单独的数据库

我即将开始编写一个Rails应用程序,它允许客户端拥有一个单独的子域来访问我们的应用程序。 从数据安全的角度考虑,如果每个客户端的访问权限真正限制在他们的数据库中会很好,这样,如果生产代码中存在错误,他们只能访问自己的数据库,而不能访问任何其他数据库。客户端。 我知道如何做我想要的代码,但我想知道是否有一个更简单的解决方案,我可能会失踪。 您将如何保护客户端数据,以便在出现错误或黑客威胁时,他们的数据不太可能被暴露?