ruby-on-rails - Rails 中的安全查询参数
问题描述
我在我的应用程序中发现了一个我不知道如何修复的安全风险。我只是在对 HTML 进行一些检查时发现了这一点,并且正在使用它。
所以我在表单标签上有这段代码
<%= form_tag("/spree/admin/workorders/#{@workorder.id}
/?workflow_id=#{workflow.id}
&name=workstep_name_{workflow.product_workstep.workstep.name}
&workstep_id=#{workflow.product_workstep.workstep.id}", method: "put")do%>
该方法将捕获查询参数。
def update
@incoming_status = params[params[:name]]
# grab workflow, this is current data, use this to compare status to in comming status
@workflow = get_workorder_product_workstep(params[:workflow_id])
if is_workstep_for_shipping?
if @workorder.order.shipment_state.downcase == "shipped"
update_workflow
else
flash[:notice] = "Product not yet shipped"
end
else
update_workflow
end
redirect_to admin_workorder_path(@workorder)
end
def update_workflow
# check current status if its pending allow to update
if @workflow.send("can_#{@incoming_status}?")
# update status
@workflow.send(@incoming_status.to_s)
# updated attribute handled_by
@workflow.update_attributes(handled_by_id: @curr_user.id)
@workflow.save
else
flash[:notice] = 'Action not allowed'
end
end
在浏览器上,在视图中创建的表单将呈现这个。
<form action="/spree/admin/workorders/45/?workflow_id=141&name=workstep_name_w4&workstep_id=61" accept-charset="UTF-8" method="post">
</form>
现在该表单,可以更改那些查询参数值。尝试输入错误的值,我的后端崩溃了。如何解决这个问题?我可以阅读任何想法或文章吗?谢谢你。
更新
在玩网络的时候。我还在网络选项卡上找到了这个request payload
{spree_user: {email: "-----, password: "---"}}
spree_user: {email: "----", password: "----"}
一切都是纯文本。我刚刚将我的电子邮件和密码更改为----
如果一个有技术背景的人可以很容易地发现这一点。
代码来自生产。我认为我们在这里没有使用 JWT。
解决方案
推荐阅读
- c++ - 我初始化为0的变量随机变成-1?
- javascript - 根据变量值防止点击html元素
- kubernetes - cert-manager:让我们加密拒绝 ACME 帐户
- ios - UserDefaults.standard.set() 仅在 watchOS 上不起作用
- pytorch - 为什么 timm 视觉变压器位置嵌入初始化为零?
- android - 有没有办法让 actionBar 后退按钮用 putExtra 重新发送意图?
- arrays - 使用 For each Statement 循环遍历 VBA Excel 中的多维数组 - 仅第一维
- react-native - React native reducer:如何更新数组中的对象值
- r - 行名称列并修改 R 中的日期
- javascript - 制作一个按钮来移动一个对象