使用带有安全性的导轨

时间:2013-07-21 21:06:51

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

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

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

编辑:

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

2 个答案:

答案 0 :(得分: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请求。

答案 1 :(得分:0)

安全性令人讨厌并且有些麻烦。

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

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

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

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