Commit fee681be by Calen Pennington

Escape xblock wrapper data attributes and css classes for safe html

parent 4d653d53
...@@ -7,6 +7,7 @@ import json ...@@ -7,6 +7,7 @@ import json
import logging import logging
import static_replace import static_replace
import uuid import uuid
import markupsafe
from django.conf import settings from django.conf import settings
from django.utils.timezone import UTC from django.utils.timezone import UTC
...@@ -71,7 +72,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer, ...@@ -71,7 +72,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer,
data = {} data = {}
data.update(extra_data) data.update(extra_data)
css_classes = ['xblock', 'xblock-{}'.format(view)] css_classes = ['xblock', 'xblock-{}'.format(markupsafe.escape(view))]
if isinstance(block, (XModule, XModuleDescriptor)): if isinstance(block, (XModule, XModuleDescriptor)):
if view in PREVIEW_VIEWS: if view in PREVIEW_VIEWS:
...@@ -81,7 +82,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer, ...@@ -81,7 +82,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer,
# The block is acting as an XModuleDescriptor # The block is acting as an XModuleDescriptor
css_classes.append('xmodule_edit') css_classes.append('xmodule_edit')
css_classes.append('xmodule_' + class_name) css_classes.append('xmodule_' + markupsafe.escape(class_name))
data['type'] = block.js_module_name data['type'] = block.js_module_name
shim_xmodule_js(frag) shim_xmodule_js(frag)
...@@ -100,7 +101,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer, ...@@ -100,7 +101,7 @@ def wrap_xblock(runtime_class, block, view, frag, context, usage_id_serializer,
'content': block.display_name if display_name_only else frag.content, 'content': block.display_name if display_name_only else frag.content,
'classes': css_classes, 'classes': css_classes,
'display_name': block.display_name_with_default, 'display_name': block.display_name_with_default,
'data_attributes': u' '.join(u'data-{}="{}"'.format(key, value) 'data_attributes': u' '.join(u'data-{}="{}"'.format(markupsafe.escape(key), markupsafe.escape(value))
for key, value in data.iteritems()), for key, value in data.iteritems()),
} }
......
<div class="${' '.join(classes)}" ${data_attributes}> <div class="${' '.join(classes) | n}" ${data_attributes}>
% if js_pass_parameters: % if js_pass_parameters:
<script type="json/xblock-args" class="xblock_json_init_args"> <script type="json/xblock-args" class="xblock_json_init_args">
${js_init_parameters} ${js_init_parameters}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment