호기심에 잠깐 살펴봤습니다. Nokogiri 라이브러리 관련 문제인 것으로 보입니다.
여기서 Discourse가 어떻게 사용하는지 확인해 보면:
doc = Nokogiri::HTML5.fragment(sanitized)
add_nofollow = !options[:omit_nofollow] && SiteSetting.add_rel_nofollow_to_user_content
add_rel_attributes_to_user_content(doc, add_nofollow)
strip_hidden_unicode_bidirectional_characters(doc)
sanitize_hotlinked_media(doc)
add_mentions(doc, user_id: opts[:user_id]) if SiteSetting.enable_mentions
scrubber = Loofah::Scrubber.new { |node| node.remove if node.name == "script" }
loofah_fragment = Loofah.fragment(doc.to_html)
loofah_fragment.scrub!(scrubber).to_html
end
def self.strip_hidden_unicode_bidirectional_characters(doc)
return if !DANGEROUS_BIDI_REGEXP.match?(doc.content)
doc
.css("code,pre")
.each do |code_tag|
next if !DANGEROUS_BIDI_REGEXP.match?(code_tag.content)
Loofah.fragment는 Nokogiri의 HTML4 파서를 사용합니다.
Nokogiri >= 1.14.0 및 Loofah >= 2.21.0 조건을 충족한다면 Loofah.html5_fragment를 사용하여 이 문제를 수정할 수 있습니다. Discourse는 이미 Nokogiri::HTML5.fragment를 사용하므로, 이를 사용하는 것이 합리적일 것입니다.
참고: Loofah 2.21.0 은 아직 정식 출시되지 않았으며, 현재 RC1 단계입니다.
11개의 좋아요