0

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

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

编辑:

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

4

2 回答 2

0

如果您正在谈论的那些请求是 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 请求。

于 2013-07-21T21:43:29.613 回答
0

安全性很差,有些麻烦。

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

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

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

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

于 2013-07-22T01:40:53.393 回答