【问题标题】:Target mailto: links with Rails::Html::TargetScrubber目标邮件:与 Rails::Html::TargetScrubber 的链接
【发布时间】:2021-08-18 01:55:30
【问题描述】:

我正在尝试清除 mailto 链接,同时允许其他人使用 Rails::HTML Scrubbers。

见:https://github.com/rails/rails-html-sanitizer

我有一个像这样的Loofah 片段:

Loofah.fragment('<a href="mailto:e@example.test">tis but a scratch</a>')

我的 Scrubber 是这样的:

class TargetedHtmlScrubber < Rails::Html::TargetScrubber
  def initialize
    super
    self.tags = %w[a]
  end

  def allowed_node?(node)
    ...
  end

  def scrub_attribute?(name)
    ...
  end
end

但是当我在我的规范中运行scrub! 时,我看不到任何allowed_node?scrub_attribute 方法被按照documentation 调用。

我的规格是这样的。它擦洗一切..,.

require 'rails_helper'

RSpec.describe TargetedHtmlScrubber do
  describe 'targeting html tags' do
    it 'ignores <a>' do
      fragment = html_fragment('<a href="http://example.test">Greg! the stop sign!!</a>')
      expect(
        fragment.scrub!(subject).to_s
      ).to eq '<a href="http://example.test">Greg! the stop sign!!</a>'
    end

    it 'targets <a href=mailto:>' do
      fragment = html_fragment('<a href="mailto:e@example.test">tis but a scratch</a>')
      expect(
        fragment.scrub!(subject).to_s
      ).to eq 'tis but a scratch'
    end
  end
end

我希望在我的类中的两种方法之一中实现一些东西。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-6


    【解决方案1】:

    好的,我解决了。要调用这些方法,您需要设置标签和属性数组:

      def initialize
        super
        self.tags = %w[a]
        self.attributes = %w[href]
      end
    

    然后它将调用allowed_node?(node)scrub_attribute?(name)。所以在这种情况下,我只需要标签。

    清除mailto: 链接:

    class TargetedHtmlScrubber < Rails::Html::TargetScrubber
      def initialize
        super
        self.tags = %w[a]
      end
    
      def allowed_node?(node)
        href(node) !~ /^mailto:/
      end
    
      private
    
      def href(node)
        node.try(:attributes)['href'].try(:value)
      end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2010-10-04
      • 2011-02-06
      • 2023-04-04
      • 2017-09-22
      • 2019-03-22
      • 2012-11-28
      相关资源
      最近更新 更多