如何最好地消毒 ruby​​ on Rails 中的字段

2023-11-21

我目前有一个控制器从前端的 TinyMCE 捕获一些 html。如果我修补萤火虫,就可以提交脚本标签并将警报消息等注入到屏幕上。

编辑:目前我正在使用清理助手在模型中修复此问题:

require 'action_view'

class NotesController < AuthApplicationController

  include ActionView::Helpers::SanitizeHelper
...
  def update
    params[:note][:content] = sanitize(params[:note][:content],
        :tags => %w(a object p param h1 h2 h3 h4 h5 h6 br hr ul li img),
        :attributes => %w(href name src type value width height data) );

    @note.update_attributes(params[:note])

这在控制器中感觉很混乱。有没有更好的办法? IE。以某种方式集成此 ActiveRecord,以便我可以轻松指定在以类似于验证的方式保存之前对此字段和其他字段执行此操作?

感谢您的任何建议。

edit:

在这里取得一些进展。

在我的 /Libs 下我有

module SanitizeUtilities
  def sanitize_tiny_mce(field)
    ActionController::Base.helpers.sanitize(field,
      :tags => %w(a b i strong em p param h1 h2 h3 h4 h5 h6 br hr ul li img),
      :attributes => %w(href name src type value width height data) );
  end
end

然后在我的模型中代码折叠为

class MyModel < ActiveRecord::Base
  include ::SanitizeUtilities
...
  before_save :sanitize_content
...
  def sanitize_content
    self.content = sanitize_tiny_mce(self.content)
  end

end

这似乎可以毫不费力地去除不需要的标记。

对 Rails 还很陌生,所以很紧张,我可能做错了什么。有人能看到这里潜在的缺点吗?

再次感谢


我认为你这样做的方式很好,但是如果你使用before_save那么你可能仍然会失败验证(因为before_save验证后调用)。另外,您不一定必须将其放入自己的模块中,它可能只是您的类上的私有方法。

就像是:

class MyModel < ActiveRecord::Base

  before_validation :sanitize_content, :on => :create

  private
    def sanitize_content
      self.content = sanitize_tiny_mce(self.content)
    end
    def sanitize_tiny_mce(field)
      ActionController::Base.helpers.sanitize(field,
        :tags => %w(a b i strong em p param h1 h2 h3 h4 h5 h6 br hr ul li img),
        :attributes => %w(href name src type value width height data) );
    end

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

如何最好地消毒 ruby​​ on Rails 中的字段 的相关文章

  • 使用 RSpec 测试导轨金属/机架?

    假设我有一个名为 Preview 的 Metal 类 如何使用 RSpec 进行测试 当我尝试时 require spec helper describe Preview do it should return the posted con
  • 轨道上的下一个对象问题

    视频影像 表 id title votes count 视频影像 控制器 def show video Video find params id next video Video order votes count DESC where v
  • Ruby on Rails 离线编程

    我将离开互联网几周 但仍然想完成一个项目 我应该采取哪些步骤来确保在断开连接时能够访问我需要的内容 ruby 和 ROR 离线时 以下内容很难获得 gems docs Rails 专家博客 堆栈溢出 so gem 安装尽可能多 下载所有的轨
  • 在表单中编辑序列化哈希?

    我正在序列化存储在settings表中的字段 并且希望能够在表单字段中编辑该哈希 class Template lt ActiveRecord Base serialize settings end 但我就是这么做那么文本区域只显示序列化数
  • Ruby on Rails Webpacker 找不到 asset_pack_path 下的图像

    我在使用 Ruby on Rails Webpacker 在视图中包含图像时遇到问题 当我尝试使用 html img 标签和 asset pack path 在我的视图中插入图像时 出现错误 我的图像位于app javascript ima
  • 使用 Mechanize (Ruby) 进行基本身份验证和表单身份验证

    我正在尝试登录公司内部网上的一个站点 该站点具有基本身份验证弹出对话框和基于表单的身份验证 这是我正在使用的代码 导致 401 gt Net HTTPUnauthorized 错误 require rubygems require mech
  • 在 postgresql 中查找和汇总具有重叠记录的日期范围

    我有一个大型数据集 我想对记录具有重叠时间的计数进行求和 例如 给定数据 id 1 name A start 2018 12 10 00 00 00 end 2018 12 20 00 00 00 count 34 id 2 name B
  • Bundle exec rspec VS rspec 规范

    红宝石 1 9 2 导轨 3 1 这是问题所在bundle exec rspec spec 不起作用 但是rspec spec 运行正常 当我跑步时c RailsInstaller work apptwit gt bundle exec r
  • Rails 递归地包含 javascripts 资源文件夹

    我了解如何将一个 JavaScript 文件添加到 Rails 资产管道中 只需添加 require filename 到 application js 但是如何在一个文件夹下包含多个 javascript 文件 vendor assets
  • 用于 S3 私有文件的 ActiveStorage

    到目前为止 我一直在使用 Paperclip 将一些文件上传到 S3 其中一些文件不是公开的 Paperclip 允许通过以下位将一些文件作为私有文件上传 has attached file image styles large 2000x
  • 如何使用国家宝石

    我正在尝试使用国家宝石 https github com hexorx countries 但是在我捆绑安装这个 gem 后 有一些关于如何合并它的基本问题 我是否需要创建新的控制器 模型才能访问这些国家 地区 如何创建一个简单的选择下拉列
  • Rails3/will_paginate/Ajax - 下一个/上一个链接无法正常工作(这是一个错误吗?)

    我正在遵循 使用ajax分页 http railscasts com episodes 174 pagination with ajax railscast 用于我的 Rails 3 应用程序 一切似乎都运行良好 除了上一个和下一个链接根本
  • rake db:migrate db:reset 和 db:schema:load 之间的区别

    和 之间的不同rake db migrate and rake db reset我很清楚 我不明白的是如何rake db schema load与前两者不同 只是为了确保我在同一页面上 rake db migrate 运行尚未运行的迁移 r
  • 如何将 devise/omniauth 重定向到我登录的页面?

    我通过omniauth 进行了身份验证 并且该链接通过layout application html haml 在每个页面上都可用 然而 当他们完成omniauth身份验证后 他们都会进入root权限 我如何设置它 以便他们重定向到他们单击
  • <%=h ... %> 在 Rails 中意味着什么?

    I found here http api rubyonrails org classes ActionView Helpers RecordTagHelper html以下语法 什么是h means 它用于转义标签的输出以避免跨站点脚本
  • 在生产环境中使用 Rails 设置 sunspot solr

    我尝试了各种链接 但我似乎找不到关于创建与生产中的 Rails 一起运行的 solr 实例的好资源 我知道您必须为生产设置 solr 服务器 我已经尝试使用 tomcat 设置 solr 但我似乎无法将其链接到 Rails 应用程序 有什么
  • time_select 表单助手将新时间对象解释为 UTC,而不是配置的时区

    我遇到了对我来说似乎很简单的问题 但我无法弄清楚我做错了什么 在我的应用程序中 用户可以通过简单的 form for 添加他们的课程 他们可以输入课程讲座的开始时间和结束时间 如下所示 div class field Start Time
  • 查找 Rails 应用程序中未使用的代码

    如何查找正在运行和未运行的代码生产中 该应用程序经过充分测试 但还有很多测试unused代码 因此 他们在运行测试时得到覆盖 我想重构并清理这个烂摊子 它一直在浪费我的时间 我有很多后台工作 这就是为什么我希望生产环境来指导我 在 Hero
  • Rails:Passenger Standalone 适合生产部署吗?

    问题标题几乎概括了这一点 我找不到任何好的资源来概述使用 Phusion Passenger Standalone 进行 Rails 应用程序部署的优点 缺点 它与运行 Passenger Nginx 或 Passenger Apache
  • 如何让 Sidekiq 在 Heroku 上运行?

    这是我第一次尝试让 Redis 在 Heroku 上运行 我添加了一个工作dyno 就在今天 所以还没有付款 添加了RedisToGo Nano附加组件 在我的本地机器上测试了后台作业 并将应用程序推送到heroku heroku ps g

随机推荐

  • 如何使用 Google Maps API 捕获多边形的点位置?

    使用 Google Maps API 绘图管理器 我想收集用户绘制的多边形中每个点的位置 我知道有一个getPath 功能 但我不知道在哪里使用它 这是我迄今为止拥有的所有代码 var map var drawingManager func
  • 在 Javascript 中,从不在数组中的对象中删除键

    假设我有一个包含许多键的对象列表 并且我只想保留其中的某些键 我就是这样做的 SO 上其他好的解决方案的问题是 如果键中不存在键以保留它 它仍然会添加一个键 值未定义 let data a 1 b 2 c 3 a 1 c 3 d 4 con
  • 如何在 google chrome 上删除 iframe 的水平滚动条

    我想要启用垂直滚动并关闭水平滚动 using 滚动 否 不是我想要的 因为我仍然想要垂直滚动 我尝试过将其添加到CSS中 myiframe overflow x hidden overflow y auto 但它仍然显示仅适用于 Chrom
  • React Apollo 从状态动态创建查询

    这是一个模型情况 我的数据库中有一些字段 比如颜色 大小 高度 我可以获取这些字段并将其显示给可以选择这些字段的用户 然后将它们设置为组件状态 我想要实现的是动态创建GQL查询 不是查询变量 来自存储在状态中的这些字段 Example im
  • 如何获取通知区域图标列表?

    我正在尝试获取代码以列出通知区域中时间左侧可见的所有图标 我一直在尝试EnumDesktopWindows and GetWindowLong 没有找到任何方法来挑选系统托盘图标 谢谢 使用可访问性接口枚举子级User Promoted N
  • C 地址运算符中的函数指针“不必要”

    在 C 中使用 qsort 我们传入一个比较函数 例如 int cmp const void const void qsort 的原型期望int const void const void 所以我们打电话 qsort cmp 但调用以下方法
  • CodeIgniter 列表字段

    我正在使用 CodeIgniter 2 1 3 我的功能有问题list fields 它应该返回 MySQL 结果的字段数组 所以我下面的代码应该列出 MySQL 结果的所有字段 query this gt db gt query SELE
  • Android OpenGLES 2 从触摸坐标拾取光线,非投影计算略有关闭

    我正在尝试通过相交光线测试来实现基于触摸坐标的对象拾取 我无法找到有关将触摸坐标转换为世界上使用的坐标系以构造这条射线的信息 到目前为止 我的理解是应用于场景中每个顶点的矩阵是 projectionMatrix viewMatrix mod
  • Swift 字典错误?

    所以我在 Swift 中开始了一个项目 我遇到了这个问题 这段代码有效 var dictionary a valueOfA b valueOfB c valueOfC println dictionary dictionary c newV
  • Spring组件扫描的性能取决于扫描包的大小吗?

    在我们的应用程序中 我们遇到了组件扫描的性能问题 它非常慢 并且其性能不依赖于扫描包中的类数量 我们的 spring 配置文件中的每一行都是这样的
  • 多个小查询与单个长查询。哪一种效率更高?

    以下哪一种方法更有效 单个较长查询 SELECT COUNT AS num FROM SELECT users UID cnumber FROM users JOIN identity ON users UID identity UID W
  • 与多个 Chrome Docker 容器的 Websocket 通信

    我有一个 Chrome 容器 使用这个 Dockerfile 根据应用程序容器的请求呈现页面 基本流程是 应用程序向 Chrome 发送 http 请求 并作为响应接收要使用的 websocket url 例如ws chrome examp
  • 标签位置应固定在右侧并向左增长

    即使标签长度不同 如何将标签设置为右侧对齐 我有一组标签 它们彼此相邻 也彼此下方 现在的问题是它们总是从标签行的左侧对齐 但我需要它们在右侧对齐 因为它们显示其他行的总和 只是为了验证我不是在谈论文本对齐 我正在寻找一种对齐标签的解决方案
  • 单击取消按钮 showInputDialog

    我有一个关于按输入对话框的取消按钮的问题 我以前曾问过类似的问题 所以如果我似乎重复了自己的话 我深表歉意 我遇到的主要问题是 无论我按下取消键 我的代码都会执行 并且即使我不添加任何输入 也会建立套接字连接 为什么会发生这种情况以及如何避
  • Xcode 5 和phonegap:为设备构建链接器错误,但不为模拟器构建链接器错误

    我们的phonegap应用程序对于iPhone模拟器构建得很好 但在iPhone上构建应用程序时会生成链接器错误 唯一改变的是安装 testflight 和测试应用程序 我们已经删除了 testflight 和测试应用程序 但链接器错误仍然
  • Apache Shiro 和 SSO

    Apache Shiro 是一个 Java 安全框架 支持 SSO 我有多个子域 每个子域都有单独的应用程序运行 我如何使用 Apache Shiro Web 过滤器 或任何其他过滤器 来提供单点登录 在使用 Apache Shiro 之前
  • 在 Oracle SQL 中删除表

    每当我尝试删除表或创建表时 它都会显示以下错误 DROP TABLE SUBURB DROP TABLE STOCKITEM DROP TABLE MANUFACTURER DROP TABLE WAREHOUSE DROP TABLE C
  • 重写规则以仅检测数字

    我正在尝试创建一个重写规则 该规则将仅检测数字并相应地转发它们 我希望如果出现除数字以外的任何内容 则忽略重写规则 index php OK OK 42365 重写为view php id 42365 到目前为止我所拥有的 RewriteE
  • 我正在做正确的事情将分贝从 -120 - 0 转换为 0 - 120

    我想测量周围的音量 不太确定我做的是否正确 我想创建一个范围从 0 安静 到 120 非常吵闹 的 VU 表 我得到了峰值功率和平均功率 但在正常安静环境中非常高 请给我一些指示 void viewDidLoad super viewDid
  • 如何最好地消毒 ruby​​ on Rails 中的字段

    我目前有一个控制器从前端的 TinyMCE 捕获一些 html 如果我修补萤火虫 就可以提交脚本标签并将警报消息等注入到屏幕上 编辑 目前我正在使用清理助手在模型中修复此问题 require action view class NotesC