Rails form_withhidden_​​field 值对新对象进行了加密

2024-04-09

我有一个用于创建新模型的简单表单。该模型有一个属性panel这是在控制器中设置的。我认为这应该不重要,但是panel是一个枚举。

def new
  @order = Order.new(panel: params[:panel])
end

在视图中,我创建了以下表单(省略了其他属性,因为与问题无关)

<%= form_with model: @order do |f| %>
<%= f.hidden_field :panel %>
<% end %>

Problem

问题是,这创建了一个输入字段panel使用一些散列或加密的值而不是正确的值panel value:

<input type="hidden" value="TfVtJbT4RBcPdCCqrkap+dA8uhJvotCH02+Isxx9ACmI2a9hcp4dOEszqztFy5A8pfIxqi35SW7BexQfYvq8BQ==" name="order[panel]" id="order_panel">

当尝试提交此表单时,我收到一个有意义的错误......

ArgumentError('TfVtJbT4RBcPdCCqrkap+dA8uhJvotCH02+Isxx9ACmI2a9hcp4dOEszqztFy5A8pfIxqi35SW7BexQfYvq8BQ=='不是有效面板)

备择方案

我尝试在表单中显式指定值,但这不会更改创建的 HTML,因此仍然存在相同的问题。

<%= form_with model: @order do |f| %>
<%= f.hidden_field :panel, value: @order.panel %>
<% end %>

解决方案

到目前为止唯一有效的就是创建一个text_field并将其设置为隐藏

<%= form_with model: @order do |f| %>
<%= f.text_field :panel, value: @order.panel, hidden: true %>
<% end %>

这会创建正确的值:

<input value="sport" type="text" name="order[panel]" id="order_panel" hidden="hidden">

这是执行此操作的正确方法吗?为什么hidden_field没有按预期工作?我缺少什么?

这是最新版本的 Ruby on Rails (Rails 6.0.2.1)。

CSP

经过进一步调查,这似乎与内容安全策略和 Turbolinks 和/或 UJS 有关

这是我的 CSP:

Rails.application.config.content_security_policy do |policy|
  policy.default_src :self, :https
  policy.font_src    :self, :https, :data
  policy.img_src     :self, :https, :data
  policy.object_src  :none
  policy.script_src  :self, :https
  policy.style_src   :self, :https, :unsafe_inline
  policy.connect_src :self, :https, "http://localhost:3035", "ws://localhost:3035" if Rails.env.development?
end

# If you are using UJS then enable automatic nonce generation
Rails.application.config.content_security_policy_nonce_generator = -> request { SecureRandom.base64(16) }

# Set the nonce only to specific directives
Rails.application.config.content_security_policy_nonce_directives = %w(script-src)
# Rails.application.config.content_security_policy_report_only = true

我注意到,有时,在浏览时,浏览器实际上会导航到链接,而不是 Turbolinks 执行其工作(即使在这些情况下,不会记录 CSP 违规),在没有 CSP 的同一实例中,Turbolinks 会按预期工作。

我已经将我的 Javascript 包含在nonce: content_security_policy_nonce

<%= javascript_pack_tag 'application', nonce: content_security_policy_nonce, 'data-turbolinks-track': 'reload' %>

如果我删除nonce: content_security_policy_nonce在这里,Turbolinks 似乎再次按预期工作......


您没有在问题中指定浏览器,但存在问题Firefox 自动完成功能过于激进并覆盖隐藏字段值 https://bugzilla.mozilla.org/show_bug.cgi?id=520561。该问题已解决,但有人抱怨 5 月份使用 75 版本。

尝试禁用给定字段的自动完成功能,如下所示:

<%= f.hidden_field :panel, autocomplete: 'off' %>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails form_withhidden_​​field 值对新对象进行了加密 的相关文章

  • 如何在 Rails 3.2.1 版本中注释 Rails 模型

    我正在尝试遵循一些在线教程来在 Rails 中注释我的模型 然而 似乎所有教程都在谈论过时的注释版本或不正确的安装 这真是一团糟 到目前为止我已经尝试过以下方法 1 在 Gemfile 中添加此内容 gem annotate 2 4 0 2
  • Rails:format.js 或 format.json,或两者?

    可能很明显 但我仍然缺乏基本知识 那么在控制器内部 两者都可以使用 还是总是 Javascript 所以两者是相同的 json and js是两种不同类型的响应 它们在 Rails 中被定义为不同的 MIME 类型 Mime Type re
  • Rails 注释分段错误

    有一些问题围绕着这个问题 但没有什么真正能满足我的需求 After I bundle install下面列出了我的 Gemfile 我运行annotate并出现以下错误 Users nickcoelius rvm gems ruby 1 8
  • 预期的 ProductField,出现数组问题

    我有一个 Rails 4 应用程序 它有一个如下所示的 params 块 def store params params require store permit name description user id products attr
  • 为什么“捆绑”会在我的开发机器上安装生产 gem?

    Gemfile 说 gem sqlite3 groups gt development test gem mysql2 group gt production 然而当我打字时bundle install在我的开发机器上安装了所有 gem 我
  • Ruby on Rails REST 设计问题 - 在账户之间转账

    我有一个 Account 类 想要实现转账屏幕以允许用户在 2 个账户之间转账 我将如何实现这种 RESTful 方式 我有标准帐户和休息操作 那很好 但我该如何实现转移呢 通常我只会向帐户控制器和相应的视图添加一个名为 transfer
  • Rubymine 6 更新/刷新 Rails 项目中可用的方法和路径?

    这是一个例子 假设我更新路线resources foo这给我带来了一些新的道路 例如 new foo session当我开始在 ERB 视图中输入路径时 我希望它向我显示 建议自动完成与路径匹配的名称 当我输入 new foo 我会得到所有
  • 目前最流行的 Ruby on Rails AUTHORIZATION gem/plugin 是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rails 3 在 Ruby 1.9.2 上初始化非常慢

    我使用 RVM 来管理环境 安装了 Ruby 1 9 2 p136 我认为是最新版本 和 Rails 3 创建了 gemset 并运行捆绑器 到目前为止一切正常 但 Rails 在运行命令 即生成 销毁 rake 等 时初始化速度非常慢 完
  • 仅删除多对多关系

    我有一个 has and belongs to many friends join table gt friends peoples 要添加朋友 我会这样做 people followers lt lt friend这会创建关系和新的个人资
  • 多重要求和允许强参数rails 4

    在下面的情况下 我尝试使用强参数 我想要求email address password并允许remember me fields 但像下面这样使用它只允许最后一行在方法示例中 在下面的情况下 它只需要params permit rememb
  • (Rails) Assert_Select 的烦人警告

    有谁知道如何让assert select在rake测试期间不输出所有那些讨厌的html警告 你知道 就像这样的东西 ignoring attempt to close body with div opened at byte 1036 li
  • 使用 rspec 测试嵌套路由

    我正在尝试使用 rspec 测试路由 以下给出了 预期块返回真值 的错误 我不确定我错过了什么 通过浏览器我可以发布到这个网址并且成功 有任何想法吗 谢谢 Routes resources forum topics do resources
  • 用户未定义的方法 attr_accessible 错误

    我正在尝试创建某种登录 我创建了一个用户脚手架并将此代码放在我的 user rb 中 class User lt ActiveRecord Base attr accessible name password digest password
  • 为什么我收到“未定义的方法`assert_valid_keys`”?

    知道为什么我会收到此错误 Exception encountered
  • ruby从1.8.7升级到1.9.2(使用Rails 3.1.1)后本地服务器错误

    我刚刚安装了rvm并使用rvm将ruby从1 8 7升级到1 9 2 我在我的应用程序上运行了捆绑安装 它重新安装了我的 gems 当我在本地运行 Rails 服务器并将浏览器导航到 localhost 3000 时 服务器日志中显示以下错
  • Rails Windows Vagrant 响应时间非常慢

    我在跑 Vagrant 1 7 1 Rails 4 1 4 Thin 1 6 1 Windows 7 每个静态文件的发送时间都超过一秒 在我的 PC 上加载一个页面可能需要大约 20 秒 而在同事的 Linux 机器上则只需瞬间 有一些帖子
  • 服务器上的 Rails 会话

    我想让一些 Rails 应用程序在不同的服务器上共享同一个会话 我可以在同一服务器内完成此操作 但不知道是否可以在不同服务器上共享 有人已经做过或者知道怎么做吗 Thanks Use the 数据库会话存储 https github com
  • 让 Rails 生产在端口 80 上运行

    我正在尝试让我的 Rails 应用程序在生产模式下运行 但遇到了一些困难 我正在使用 Passenger 和 apache 并运行 Ubuntu 12 04 我已经配置和创建了生产数据库 并设置了乘客 状态如下 rvmsudo passen
  • 仅针对 Rake 任务运行初始化程序

    我希望在执行 Rake 任务时运行某个初始化程序 但在运行 Rails 服务器时不运行 区分 Rake 调用和服务器调用的最佳方法是什么 Rake 允许您指定任务的依赖关系 最好的建议操作是将特定于 rake 的初始化放入其自己的任务中 而

随机推荐

  • PRAW:评论提交者的用户名

    我正在开发一个 reddit 机器人 它需要知道哪个用户提交了评论 根据 PRAW API 包装器文档 没有特定的方法可以获取 Comment 对象作者的用户名 理想情况下我可以直接取回用户名 如果这是不可能的 有没有办法获取作者的全名 然
  • 将多个帧选项传递到 rmarkdown::beamer_presentation 中的单个帧

    如何将多个框架选项传递给特定框架rmarkdown beamer presentation 在下面的 MWE 中 第二帧应包含与前一帧相同的表 只是多了几行 Thus 理想情况下 两个框架的页码相同 gt noframenumbering
  • Windows 容器内的 Active Directory 帐户(服务器 2016 TP5)

    我有 Windows Server 2016 TP5 并且正在使用容器 我能够很好地完成基本的 docker 任务 我正在尝试弄清楚如何对一些 IIS 托管的 Web 应用程序进行容器化 事实是 我们通常对数据库使用集成身份验证 对应用程序
  • Git:在没有提交的情况下创建新分支时,对 master 的更改也会更改分支

    假设我有一个带有文本文件的全新项目 我跑 git init git add git commit m Initial commit 然后创建一个新分支 git checkout b new branch 回到master git check
  • 混合 JSF 标签和 HTML

    我刚刚开始使用 JSF 2 0 但我发现自己将 JSF 标签与标准 HTML 标签混合在一起 以达到想要的布局 虽然我使用facelets来布局我的页面 但我想我忍不住混合组件
  • 如果应用程序终止,则删除的 NSHTTPCookie 返回

    使用一些代码删除所有 cookie 后 NSHTTPCookie cookie NSHTTPCookieStorage storage NSHTTPCookieStorage sharedHTTPCookieStorage for cook
  • Spring MockMvcBuilders 安全过滤器

    我已经设法使用 spring mvc 创建 REST API 我的目的是用 JWToken 保护资源 现在我正在尝试编写三个测试 1 使用授予的用户 密码获取 Token 身份验证失败 gt test OK2 获取未授予用户 密码的Toke
  • 性能:float 到 int 转换并将结果裁剪到范围

    我正在用 float 进行一些音频处理 结果需要转换回 PCM 样本 并且我注意到从 float 到 int 的转换非常昂贵 更令人沮丧的是 我需要将结果限制在短路范围内 32768 到 32767 虽然我通常本能地假设可以通过简单地将 f
  • 在总共 48 个 gem 中找不到“cocoapods”(>= 0.a)(Gem::MissingSpecError)

    Mac OS 10 15 7 ABCD MBP abcd which ruby usr local opt ruby bin ruby ABCD MBP abcd ruby v ruby 3 0 2p107 2021 07 07 revis
  • 我想在 iOS Swift 中摇动谷歌地图标记

    我正在开发一个项目 我想在谷歌地图上摇动标记 我正在使用自定义标记图标在地图上表示 就像一个人的头在摇晃 我不知道该怎么做并且搜索了很多但没有找到任何解决方案 您可以添加一个CAKeyframeAnimation or CABasicAni
  • 如何在 Rails 4 中正确设置 database.yml 文件

    我很好奇如何正确设置我的database ymlRails 4 应用程序中的文件 我并没有真正详细研究过它 因为它似乎在部署到 Heroku 时才起作用 但我现在想了解它 并注意到格式从 Rails 4 0 到 4 1 发生了一些变化 例如
  • Juval Lowy 的 C# 编码标准问题

    我喜欢并强烈推荐朱瓦尔 洛伊 http www idesign net C 编码标准 http www idesign net Downloads GetDownload 1985 Juval 明确避免了每个指令的基本原理 以保持标准的严格
  • 我如何让詹金斯构建颠覆存储库的每个修订版

    我们使用 jenkins 进行持续集成 使用每 10 分钟一次的标准轮询方案 并且效果很好 现在我想设置一个在重现中的每个修订上运行的作业 它将生成或多或少与特定提交相对应的二进制补丁 我想出的唯一方法是在 svnserver 上使用提交后
  • Cloud PubSub 重复消息触发的 Cloud Functions

    我正在尝试使用 Cloud Functions 作为由 PubSub 触发的异步后台工作程序 并执行更长的工作 以分钟为单位 完整的代码在这里https github com zdenulo cloud functions pubsub h
  • 如何在我的代码中找到 CoffeeScript 1.9.0 重大更改的情况?

    TL DR 是否有任何方法可以识别对 CoffeeScript 的新 1 9 0 行为的违规行为 foo参数命名 现在使用裸露的代码是非法的 并且不会导致警告 错误foo函数中的变量 在CoffeeScript 1 9 0版本中声明 更改了
  • 使用数据值在 d3 js 条形图中添加背景颜色

    我创建了一个非常简单的条形图 现在 我想向创建的条形图添加一些样式 如示例所示 我想在x值大于200时添加红色 我尝试了各种样式填充和背景 但无法获得预期结果 现在知道如何处理吗 添加了代码
  • 在新窗口中打开链接或如果已打开则将焦点移至该链接

    我有一个应该在新选项卡中打开的链接 但如果该选项卡已打开 只需切换到它即可 我尝试过使用 javascript wnd window open 和 wnd focus 它们适用于 Chrome 19 但不适用于 FF 13 或 IE 9 这
  • Pythonic 方式打印列表项

    我想知道是否有比这更好的方法来打印 Python 列表中的所有对象 myList Person Foo Person Bar print n join map str myList Foo Bar 我读这种方式不太好 myList Pers
  • mscorlib.dll 是 CLR 吗?

    如果这不是我几乎可以肯定的 那么 mscorlib dll 的作用是什么以及 CLR 位于哪里 CLR不在mscorlib dll but in MSCorEE dll 我想这就是你正在寻找的 这是加载 NET exe 程序集时加载的主 D
  • Rails form_withhidden_​​field 值对新对象进行了加密

    我有一个用于创建新模型的简单表单 该模型有一个属性panel这是在控制器中设置的 我认为这应该不重要 但是panel是一个枚举 def new order Order new panel params panel end 在视图中 我创建了