2013-07-21 25 views
0

我目前正在开发chatbot的原型。使用设计和可以 - 我可以创建一个简单的聊天框,通过使用jquery和Ajax向网站发送jsons请求。由于我没有在当前版本中使用任何rails helper,任何人都可以发送一个json对象给这个url(让我们称之为mysite.com/message),并从Json中的chatbot接收响应。在安全的情况下使用rails

我需要帮助来摆脱此漏洞,以便任何人不管他们是否已登录都可以将消息发送给/ message。如果有一个助手可以生成类似于真实性令牌的东西,那足以满足要求。我已经在rails中开发了一些网站,但我仍然在学习如何以“Rails”的方式进行开发。

编辑:

的问题是,我不希望在用户的任何记录到例如发送一个JSON对象/消息时,是指对客舱进行只用于做。如果我浏览到网址,那么我可以在浏览器中看到json响应。

+0

请格式化您的问题,因为您将格式化您的代码(绝对不是以spagheti方式) –

回答

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请求。

+0

对不起迈克尔我不完全遵循什么你在谈论。我做的AJAX请求确实是POST。问题是除了登录之外,没有认证。 – Diceydawg

+0

好吧,我以为你使用get请求。忘了那个。 –

0

安全是讨厌的,麻烦一些。

如果您正在寻找一些简单和廉价的,怎么样发送一个cookie的随机值与HTTP_ONLY时。

用户登录您保留随机值的副本,当它回来比较设置。

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

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

+0

我只是想阻止一切,但现在的json请求 – Diceydawg

相关问题