نظرت بسرعة بدافع الفضول. يبدو أنها مشكلة في مكتبة 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 تستخدم محلل HTML4 الخاص بـ Nokogiri.
يمكن إصلاح هذا باستخدام Loofah.html5_fragment طالما أن Nokogiri >= 1.14.0 و Loofah >= 2.21.0. تستخدم Discourse بالفعل Nokogiri::HTML5.fragment؛ سيكون ذلك منطقيًا.
ملاحظة: Loofah 2.21.0 لم يتم إصداره بعد؛ حاليًا في RC1.
11 إعجابًا