From 6eec9ec53799a1bc82cc369fc3ec7b5f1c23f9fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Mummert?= Date: Sun, 24 May 2026 17:53:53 +0200 Subject: [PATCH] Sanitize survey frontend and PDF output --- .../frontend/member_survey_edit.html.twig | 16 ++++---- .../frontend/member_survey_list.html.twig | 6 +-- .../templates/frontend/show_survey.html.twig | 18 ++++----- .../frontend/show_survey_results.html.twig | 20 +++++----- .../views/pdf/survey_results.html.twig | 28 ++++++++------ src/Service/SurveyResultsPdfService.php | 37 +++++++++++++++++++ 6 files changed, 84 insertions(+), 41 deletions(-) diff --git a/contao/templates/frontend/member_survey_edit.html.twig b/contao/templates/frontend/member_survey_edit.html.twig index abe93d0..d37e002 100644 --- a/contao/templates/frontend/member_survey_edit.html.twig +++ b/contao/templates/frontend/member_survey_edit.html.twig @@ -1,7 +1,7 @@ {% include '@Survey/frontend/_survey_assets.html.twig' %} {% include '@Survey/frontend/_survey_branding.html.twig' %} -{% set moduleHeadline = headline is iterable ? headline.text|default('') : headline|default('') %} +{% set moduleHeadline = (headline is iterable ? headline.text|default('') : headline|default(''))|striptags|trim %}
{% if moduleHeadline %} @@ -60,8 +60,8 @@
{% for editor in editors %}
- {{ [editor.firstname, editor.lastname]|join(' ')|trim ?: editor.email }}
- {{ editor.email }} + {{ ([editor.firstname, editor.lastname]|join(' ')|trim|striptags) ?: (editor.email|striptags|trim) }}
+ {{ editor.email|striptags|trim }}
{% else %}
Keine Editoren hinterlegt.
@@ -135,8 +135,8 @@ {% if question.mandatory %}Pflicht{% endif %} {% if loop.first %}Start{% endif %}
-

{{ question.question }}

-

{{ question.description ?: 'Keine Zusatzbeschreibung.' }}

+

{{ question.question|striptags|trim }}

+

{{ (question.description|striptags|trim) ?: 'Keine Zusatzbeschreibung.' }}

{% if not locked %}
Bearbeiten @@ -169,9 +169,9 @@
{% for condition in conditions %}
-
Wenn Antwort = {{ condition.answerValue }}
-
{{ condition.sourceQuestionLabel ?: ('Frage #' ~ condition.sourceQuestion) }}
-
weiter zu {{ condition.targetQuestionLabel ?: ('Frage #' ~ condition.targetQuestion) }}
+
Wenn Antwort = {{ condition.answerValue|striptags|trim }}
+
{{ (condition.sourceQuestionLabel|striptags|trim) ?: ('Frage #' ~ condition.sourceQuestion) }}
+
weiter zu {{ (condition.targetQuestionLabel|striptags|trim) ?: ('Frage #' ~ condition.targetQuestion) }}
{% if not locked %}
Bearbeiten diff --git a/contao/templates/frontend/member_survey_list.html.twig b/contao/templates/frontend/member_survey_list.html.twig index f7a021c..bb51683 100644 --- a/contao/templates/frontend/member_survey_list.html.twig +++ b/contao/templates/frontend/member_survey_list.html.twig @@ -1,7 +1,7 @@ {% include '@Survey/frontend/_survey_assets.html.twig' %} {% include '@Survey/frontend/_survey_branding.html.twig' %} -{% set moduleHeadline = headline is iterable ? headline.text|default('') : headline|default('') %} +{% set moduleHeadline = (headline is iterable ? headline.text|default('') : headline|default(''))|striptags|trim %}
{% if moduleHeadline %} @@ -23,13 +23,13 @@ {% for survey in surveys %}
-

{{ survey.title }}

+

{{ survey.title|striptags|trim }}

{{ survey.published ? 'veroeffentlicht' : 'Entwurf' }} {% if survey.isLocked %} gesperrt {% endif %}
-

{{ survey.description ?: 'Keine Beschreibung hinterlegt.' }}

+

{{ (survey.description|striptags|trim) ?: 'Keine Beschreibung hinterlegt.' }}

{{ survey.questionCount }} Fragen {{ survey.answerCount }} Antworten diff --git a/contao/templates/frontend/show_survey.html.twig b/contao/templates/frontend/show_survey.html.twig index 638956a..e909755 100644 --- a/contao/templates/frontend/show_survey.html.twig +++ b/contao/templates/frontend/show_survey.html.twig @@ -1,7 +1,7 @@ {% include '@Survey/frontend/_survey_assets.html.twig' %} {% include '@Survey/frontend/_survey_branding.html.twig' %} -{% set moduleHeadline = headline is iterable ? headline.text|default('') : headline|default('') %} +{% set moduleHeadline = (headline is iterable ? headline.text|default('') : headline|default(''))|striptags|trim %}
{% if moduleHeadline %} @@ -13,10 +13,10 @@ {% elseif survey %}
-

{{ survey.title }}

+

{{ survey.title|striptags|trim }}

{% if progress.total > 0 %}{{ progress.current }}/{{ progress.total }}{% endif %}
-

{{ survey.description ?: 'Bitte beantworten Sie die folgenden Fragen. Jede Frage wird einzeln angezeigt.' }}

+

{{ (survey.description|striptags|trim) ?: 'Bitte beantworten Sie die folgenden Fragen. Jede Frage wird einzeln angezeigt.' }}

{% if progress.total > 0 %}
@@ -32,8 +32,8 @@ {% for answer in answers %}
{{ answer.questionType }}
-

{{ answer.question }}

-

{{ answer.value }}

+

{{ answer.question|striptags|trim }}

+

{{ answer.value|striptags|trim }}

{% endfor %}
@@ -42,8 +42,8 @@ {% elseif question %}
Frage {{ progress.current }}
-

{{ question.question }}

- {% if question.description %}

{{ question.description }}

{% endif %} +

{{ question.question|striptags|trim }}

+ {% if question.description|striptags|trim %}

{{ question.description|striptags|trim }}

{% endif %} {{ form_start(surveyForm, {attr: {class: 'survey-form-grid'}}) }} @@ -51,7 +51,7 @@
{% for child in surveyForm.answer %} {% endfor %} @@ -60,7 +60,7 @@
{% for child in surveyForm.answer %} {% endfor %}
diff --git a/contao/templates/frontend/show_survey_results.html.twig b/contao/templates/frontend/show_survey_results.html.twig index 786c575..f948d50 100644 --- a/contao/templates/frontend/show_survey_results.html.twig +++ b/contao/templates/frontend/show_survey_results.html.twig @@ -1,7 +1,7 @@ {% include '@Survey/frontend/_survey_assets.html.twig' %} {% include '@Survey/frontend/_survey_branding.html.twig' %} -{% set moduleHeadline = headline is iterable ? headline.text|default('') : headline|default('') %} +{% set moduleHeadline = (headline is iterable ? headline.text|default('') : headline|default(''))|striptags|trim %}
{% if moduleHeadline %} @@ -15,12 +15,12 @@ {% elseif survey %}
-

{{ survey.title }}

+

{{ survey.title|striptags|trim }}

{{ completedSubmissionCount }} abgeschlossene Teilnahmen {{ questionResults|length }} Fragen
-

{{ survey.description ?: 'Keine Beschreibung hinterlegt.' }}

+

{{ (survey.description|striptags|trim) ?: 'Keine Beschreibung hinterlegt.' }}

{% if downloadUrl or pdfDownloadUrl %}
@@ -38,13 +38,13 @@ {% for question in questionResults %}
-

{{ question.question }}

+

{{ question.question|striptags|trim }}

{{ question.totalAnswers }} Antworten {{ question.responseRate }}% Ruecklauf
- {% if question.description %} -

{{ question.description }}

+ {% if question.description|striptags|trim %} +

{{ question.description|striptags|trim }}

{% endif %}
@@ -62,7 +62,7 @@ {% for option in question.options %}
- {{ option.label }} + {{ option.label|striptags|trim }} {{ option.count }} {{ option.percentage }}%
@@ -92,7 +92,7 @@ {% for option in question.distribution %}
- {{ option.label }} + {{ option.label|striptags|trim }} {{ option.count }} {{ option.percentage }}%
@@ -110,7 +110,7 @@ {% for option in question.responseSummary %}
- {{ option.label }} + {{ option.label|striptags|trim }} {{ option.count }} {{ option.percentage }}%
@@ -124,7 +124,7 @@
{% for response in question.responses %} -
{{ response|nl2br }}
+
{{ response|striptags|trim|nl2br }}
{% else %}

Noch keine Freitextantworten vorhanden.

{% endfor %} diff --git a/src/Resources/views/pdf/survey_results.html.twig b/src/Resources/views/pdf/survey_results.html.twig index e82388b..3879768 100644 --- a/src/Resources/views/pdf/survey_results.html.twig +++ b/src/Resources/views/pdf/survey_results.html.twig @@ -2,7 +2,10 @@ + {{ documentTitle|striptags|trim }}