Skip to content

Commit 97e67bc

Browse files
committed
handle data mediatypes better
1 parent ff9364e commit 97e67bc

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

lib/rails/html/scrubbers.rb

+7
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,13 @@ def scrub_attribute(node, attr_node)
144144
val_unescaped = CGI.unescapeHTML(attr_node.value).gsub(Loofah::HTML5::Scrub::CONTROL_CHARACTERS,'').downcase
145145
if val_unescaped =~ /^[a-z0-9][-+.a-z0-9]*:/ && ! Loofah::HTML5::SafeList::ALLOWED_PROTOCOLS.include?(val_unescaped.split(Loofah::HTML5::SafeList::PROTOCOL_SEPARATOR)[0])
146146
attr_node.remove
147+
elsif val_unescaped.split(Loofah::HTML5::SafeList::PROTOCOL_SEPARATOR)[0] == "data"
148+
# permit only allowed data mediatypes
149+
mediatype = val_unescaped.split(Loofah::HTML5::SafeList::PROTOCOL_SEPARATOR)[1]
150+
mediatype, _ = mediatype.split(";")[0..1] if mediatype
151+
if mediatype && !Loofah::HTML5::SafeList::ALLOWED_URI_DATA_MEDIATYPES.include?(mediatype)
152+
attr_node.remove
153+
end
147154
end
148155
end
149156
if Loofah::HTML5::SafeList::SVG_ATTR_VAL_ALLOWS_REF.include?(attr_name)

0 commit comments

Comments
 (0)