gpt4 book ai didi

ruby-on-rails - 简单的 Rails 安全问题

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:31 26 4
gpt4 key购买 nike

所以我正在用 Rails 5 编写一个应用程序,我对我尝试编写的一个简单功能的安全问题很感兴趣。用户做出 Picks,这些 Picks 在特定时间之前是彼此保密的。如果我通过:

@picks = Pick.all

其中包含每个人的选择,使用 Controller 访问 View ,然后根据 View 中的用户过滤显示的内容,用户是否能够使用恶意方法访问该 @picks 变量?起初我认为是的,但现在我认为用户只是得到发送的原始 View ,没有 @picks 变量。除非用户可以偷偷摸摸地开发自己的 html View ?

无视在 Controller 中进行过滤可能是更好的主意,我只是想看看是否可以公开变量,如果您将它们完整地提供给 View 然后在那里过滤它们。

最佳答案

简答:

不可以,客户端不能直接访问@picks变量。您的 View 必须在 View 中显示 @picks 的值,以便浏览器接收它。

长答案:

但是,最好在数据到达 View 之前限制分配给 @picks 的数据。随着代码库的增长和老化,也许其他开发人员开始维护它,您可能不记得 @picks 变量包含不应在 View 中显示的数据。

六个月后,当客户想要根据新功能增强更新 View 时,您不想依赖正在修改 View 的开发人员知道 @picks 包含敏感数据。

通过将 @picks 的内容限制为当时允许用户查看的那些记录,让 future 的开发人员(包括您)的生活变得轻松。使用评论中建议的代码是个好主意:

@picks = current_user.picks

或者更好的是,向您的模型添加一个方法,该方法包含用于确定在给定时间用户可以选择哪些选项的业务逻辑:

class User < ApplicationRecord
...
def authorized_picks
# code that returns the picks this user is allowed to see right now
end
...
end

然后你的 Controller 代码是:

@picks = current_user.authorized_picks

这样一来,您的所有业务逻辑都在模型中,90% 的时间它都属于模型。这也允许您保留代码 DRY通过将授权逻辑全部集中在一个地方。

让您的代码保持简单和 DRY,您将感谢自己。

关于ruby-on-rails - 简单的 Rails 安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47804821/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com