Skip to content

Commit cc798e3

Browse files
authored
Merge pull request #7327 from akatsoulas/update-parser-settings
Restrict parser usage and ID handling in JS
2 parents ab3266b + 7a65d6f commit cc798e3

File tree

15 files changed

+68
-21
lines changed

15 files changed

+68
-21
lines changed

kitsune/dashboards/jinja2/dashboards/includes/macros.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@
139139
{{ pgettext('l10n dashboard', 'Subscribe...') }}
140140
</button>
141141

142-
<div id="subscribe-modal" class="mzp-u-modal-content">
142+
<div data-modal-id="subscribe-modal" class="mzp-u-modal-content">
143143
<form action="" method="POST">
144144
{% csrf_token %}
145145
<table>

kitsune/forums/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from kitsune.access.utils import has_perm
1010
from kitsune.flagit.models import FlaggedObject
1111
from kitsune.sumo.models import ModelBase
12+
from kitsune.sumo.parser import BASE_ALLOWED_ATTRIBUTES
1213
from kitsune.sumo.templatetags.jinja_helpers import urlparams, wiki_to_html
1314
from kitsune.sumo.urlresolvers import reverse
1415
from kitsune.tidings.models import NotificationsMixin
@@ -252,4 +253,4 @@ def get_absolute_url(self):
252253

253254
@property
254255
def content_parsed(self):
255-
return wiki_to_html(self.content)
256+
return wiki_to_html(self.content, attributes=BASE_ALLOWED_ATTRIBUTES)

kitsune/kbforums/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from kitsune import kbforums
77
from kitsune.sumo.models import ModelBase
8+
from kitsune.sumo.parser import BASE_ALLOWED_ATTRIBUTES
89
from kitsune.sumo.templatetags.jinja_helpers import urlparams, wiki_to_html
910
from kitsune.sumo.urlresolvers import reverse
1011
from kitsune.tidings.models import NotificationsMixin
@@ -153,4 +154,4 @@ def get_absolute_url(self):
153154

154155
@property
155156
def content_parsed(self):
156-
return wiki_to_html(self.content)
157+
return wiki_to_html(self.content, attributes=BASE_ALLOWED_ATTRIBUTES)

kitsune/questions/jinja2/questions/includes/answer.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ <h3 class="is-spam">{{ _('Marked as spam') }}</h3>
9797
<div class="content">
9898
{% if is_preview %}
9999
{# Don't use cached content_parsed #}
100-
{{ answer.content|wiki_to_html(locale=request.LANGUAGE_CODE) }}
100+
{{ answer.content|wiki_to_html_questions(locale=request.LANGUAGE_CODE) }}
101101
{% else %}
102102
{{ answer.content_parsed|safe }}
103103
{% endif %}

kitsune/questions/jinja2/questions/includes/email_subscribe.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% from "layout/errorlist.html" import errorlist %}
22
{% set title = _("Get email updates") %}
33

4-
<section id="email-subscribe" class="mzp-u-modal-content" title="{{ title }}">
4+
<section data-modal-id="email-subscribe" class="mzp-u-modal-content" title="{{ title }}">
55
<h2 class="sumo-page-subheading">{{ title }}</h2>
66
<form action="{{ url('questions.watch', question.id) }}" method="post">
77
{% csrf_token %}

kitsune/questions/jinja2/questions/question_details.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ <h3 class="sidebar-subheading sidebar-nav--heading-item is-accordion-heading">{{
516516
{% endblock %}
517517
<a id="show-more-details" href="javascript:;" data-sumo-modal="more-system-details">{{ _('More system details') }}</a>
518518

519-
<section id="more-system-details" class="mzp-u-modal-content text-body-md" title="{{ _('Additional System Details') }}" data-target="#show-more-details">
519+
<section data-modal-id="more-system-details" class="mzp-u-modal-content text-body-md" title="{{ _('Additional System Details') }}" data-target="#show-more-details">
520520
<h2 class="sumo-page-subheading">{{ _('Additional System Details') }}</h2>
521521
{% if question.metadata.crash_id %}
522522
<h3 class="sumo-card-heading">{{ crash_id_label }}</h3>

kitsune/questions/models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
from kitsune.questions.managers import AAQConfigManager, AnswerManager, QuestionManager
3131
from kitsune.sumo.i18n import split_into_language_and_path
3232
from kitsune.sumo.models import LocaleField, ModelBase
33+
from kitsune.sumo.parser import BASE_ALLOWED_ATTRIBUTES
3334
from kitsune.sumo.templatetags.jinja_helpers import urlparams, wiki_to_html
3435
from kitsune.sumo.urlresolvers import reverse
3536
from kitsune.sumo.utils import chunked
@@ -1167,7 +1168,7 @@ def _content_parsed(obj, locale):
11671168
cache_key = obj.html_cache_key % obj.id
11681169
html = cache.get(cache_key)
11691170
if html is None:
1170-
html = wiki_to_html(obj.content, locale)
1171+
html = wiki_to_html(obj.content, locale, attributes=BASE_ALLOWED_ATTRIBUTES)
11711172
cache.add(cache_key, html, settings.CACHE_MEDIUM_TIMEOUT)
11721173
return html
11731174

kitsune/sumo/parser.py

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,9 @@
1414
from kitsune.sumo.sanitize import clean, linkify
1515
from kitsune.sumo.urlresolvers import reverse
1616

17-
ALLOWED_ATTRIBUTES = {
17+
BASE_ALLOWED_ATTRIBUTES = {
1818
"a": ["href", "title", "class", "rel", "data-mozilla-ui-reset", "data-mozilla-ui-preferences"],
19-
"div": ["id", "class", "style", "data-for", "title", "data-target", "data-modal"],
20-
"h1": ["id"],
21-
"h2": ["id"],
22-
"h3": ["id"],
23-
"h4": ["id"],
24-
"h5": ["id"],
25-
"h6": ["id"],
19+
"div": ["class", "style", "data-for", "title"],
2620
"li": ["class"],
2721
"span": ["class", "data-for"],
2822
"img": ["class", "src", "data-original-src", "alt", "title", "height", "width", "style"],
@@ -37,6 +31,17 @@
3731
],
3832
"source": ["src", "type"],
3933
}
34+
35+
ALLOWED_ATTRIBUTES = {
36+
**BASE_ALLOWED_ATTRIBUTES,
37+
"div": BASE_ALLOWED_ATTRIBUTES["div"] + ["id", "data-target", "data-modal"],
38+
"h1": ["id"],
39+
"h2": ["id"],
40+
"h3": ["id"],
41+
"h4": ["id"],
42+
"h5": ["id"],
43+
"h6": ["id"],
44+
}
4045
ALLOWED_STYLES = ["vertical-align"]
4146
IMAGE_PARAMS = ["alt", "align", "caption", "valign", "frame", "page", "link", "width", "height"]
4247
IMAGE_PARAM_VALUES = {

kitsune/sumo/static/sumo/js/protocol-modal-init.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ import Modal from "protocol/js/modal";
77
if (modalLink) {
88
modalLink.forEach(function (e) {
99
var dialogLink = e.dataset.sumoModal;
10-
var content = document.getElementById(dialogLink);
10+
var content = document.querySelector('[data-modal-id="' + CSS.escape(dialogLink) + '"]');
1111
function openThisDialog(e) {
1212
Modal.createModal(e.target, content, {
1313
closeText: 'Close modal',
14-
content: document.getElementById(e.target.dataset.sumoModal),
14+
content: document.querySelector('[data-modal-id="' + CSS.escape(e.target.dataset.sumoModal) + '"]'),
1515
});
1616
e.preventDefault();
1717
};

kitsune/sumo/static/sumo/js/reportabuse.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
$(function () {
99
$('[data-sumo-modal]').each(function () {
1010
var identifier = $(this).data('sumo-modal');
11-
$('#' + identifier + ' [type="submit"]').on('click', function (ev) {
11+
$('[data-modal-id="' + identifier + '"] [type="submit"]').on('click', function (ev) {
1212
ev.preventDefault();
1313
var $this = $(this);
1414
var $form = $this.closest('form');

0 commit comments

Comments
 (0)