【问题标题】:Using rails with security in mind在考虑安全性的情况下使用导轨
【发布时间】:2013-07-21 21:06:50
【问题描述】:

我目前正在开发聊天机器人的原型。使用 devise 和 can-can 创建一个简单的聊天框,通过使用 Jquery 和 Ajax 向网站发送 jsons 请求和从网站发送 jsons 请求。由于我在当前构建中没有使用任何 Rails 助手,因此任何人都可以将 json 对象发送到此 url(我们称之为 mysite.com/message)并从 Json 中的聊天机器人接收响应。

我需要帮助以消除此漏洞,以便任何人无论是否登录都可以将内容发送到 /message。如果有一个 Rails 助手可以生成类似于真实性令牌的东西,那就足够了。我在 Rails 中开发了一些网站,但仍在学习如何以“Rails”方式进行开发。

编辑:

问题是我不希望任何登录用户例如将一个 json 对象发送到 /message,而该对象仅用于聊天框。如果我浏览到 url,那么我可以在浏览器中看到 json 响应。

【问题讨论】:

  • 请像格式化代码一样格式化您的问题(绝对不是意大利面条式)

标签: ruby-on-rails json ruby-on-rails-3 security jquery


【解决方案1】:

如果您所说的那些请求是 POST,那么您需要先禁用真实性令牌!

如果它们是 GET(我猜),那么您可能希望更改 ApplicationController 中的这两种方法(此处为原始版本)

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 174
def verify_authenticity_token
  unless verified_request?
    logger.warn "Can't verify CSRF token authenticity" if logger
    handle_unverified_request
  end
end

# File actionpack/lib/action_controller/metal/request_forgery_protection.rb, line 186
def verified_request?
  !protect_against_forgery? || request.get? || request.head? ||
    form_authenticity_token == params[request_forgery_protection_token] ||
    form_authenticity_token == request.headers['X-CSRF-Token']
end

尤其是在 verified_request? 更改中,因此它还会检查 GET 请求。

【讨论】:

  • 对不起,迈克尔,我没有完全理解你在说什么。我发出的 AJAX 请求确实是 POST。问题是除了登录之外没有任何身份验证。
  • 好的,我以为你使用了 get 请求。算了。
【解决方案2】:

安全性很差,有些麻烦。

如果您正在寻找简单且便宜的东西,那么在用户登录时发送一个带有 HTTP_ONLY 设置的随机值的 cookie 怎么样。

您保留随机值的副本,并在它返回时进行比较。

这仍然会受到数据包嗅探和中间人攻击,但它会保护客户端页面免受 javascript 攻击。您拥有来自 ajax 的用户名和内容,以及他们登录时发布的 cookie 身份验证。

如果安全确实是个问题,那么您应该启动第 2 版,并从一开始就做好。 (尽可能正确,因为它是一个移动的目标......)

【讨论】:

  • 我现在将阻止除 json 请求之外的所有内容
猜你喜欢
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多