目标 mailto:链接 Rails::Html::TargetScrubber
Target mailto: links with Rails::Html::TargetScrubber
我正在尝试清除 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
我希望在 class.
中的两种方法之一中实现一些东西
好的,我解决了。要调用这些方法,您需要设置标签和属性数组:
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
我正在尝试清除 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
我希望在 class.
中的两种方法之一中实现一些东西好的,我解决了。要调用这些方法,您需要设置标签和属性数组:
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