我目前正在为聊天机器人开发原型。使用devise和can-can我可以创建一个简单的聊天框,通过使用Jquery和Ajax向网站发送jsons请求。由于我在当前构建中没有使用任何rails助手,所以任何人都可以将json对象发送到此url(让我们称之为mysite.com/message)并从Json中的chatbot接收响应。
我需要帮助来消除此漏洞,以便任何人无论他们是否登录都可以向/ message发送内容。如果有一个rails helper可以生成与真实性令牌类似的东西,那就足够了。我已经在rails中开发了一些站点,但我仍在学习如何以“Rails”方式开发。
编辑:
问题在于我不希望任何登录用户例如在仅用于聊天框时将json对象发送到/ message。如果我浏览到url,那么我可以在浏览器中看到json响应。
答案 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版,并从一开始就完成安全性。 (尽可能正确,因为它是一个移动目标......)