Kopfdaten und Grenzen
- Release
- 7.0.9 → 7.0.10
- Commits
- 12
- Geänderte Dateien
- 28
- Analyse
- 2026-08-14
- Schwerpunkt
- Sicherheit und Datenkorrektheit
Nicht untersucht
Verglichen wurden die Tags 7.0.9+260812 und 7.0.10+260813 mit git log --oneline 7.0.9+260812..7.0.10+260813 und git diff --stat 7.0.9+260812..7.0.10+260813; beide Tags sind im Repository vorhanden. Nicht ausgewertet wurden die binären Übersetzungskataloge unter locale/ und die daraus abgeleitete Vorlagendatei, weshalb keine Aussage darüber möglich ist, ob eine der neuen Übersetzungen bestehende Zeichenketten inhaltlich verschiebt. Es wurde nichts ausgeführt: weder die Testsuite noch ein Update gegen eine reale Datenbank, sodass alle Aussagen über Laufzeitverhalten aus dem Quelltext abgeleitet sind. Indirekte Effekte über transitive Drittabhängigkeiten sind durch reine Diff-Analyse nicht vollständig erfassbar. Ob das offizielle Release-Archiv über den Repository-Stand hinaus Bündel neu baut, ist aus dem Repository nicht bestimmbar. Die Kurzliste musste keine Einträge auslassen.
Executive Summary
Dieses Release ist ein Wartungs-Release mit drei ausdrücklich als Sicherheitsfix gekennzeichneten Änderungen und einer Reihe von Korrekturen an der Datenkorrektheit. Es bringt keine Datenbankmigration, keine neue Konfigurationsdatei und keine Änderung an den Abhängigkeitsdateien mit sich, sodass das Update selbst risikoarm ist. Die eine Sache, die unbemerkt ungelöst bleibt: Antworten auf verschlüsselte Fragen, die vor dem Update über die Antwortbearbeitung gespeichert wurden, liegen weiterhin im Klartext in der Antworttabelle und werden beim Lesen als Fehler auffallen — das Update korrigiert den Schreibpfad, nicht die bereits geschriebenen Daten. Unbemerkt verändert sich außerdem das Aussehen von Links in allen ausgelieferten Umfrage-Themes.
- Antworten werden beim Bearbeiten wieder verschlüsselt gespeichert
- Reflektiertes Cross-Site-Scripting im Editor-Popup
- SQL-Injection in den Statistikfiltern
- SQL-Injection beim Abgleich der zentralen Teilnehmerdatenbank
- Links in Umfrage-Themes erben Schriftgröße und Schriftstärke
- Fragenattribute überleben den TXT-Export
- Authorization-Header wird unabhängig von der Schreibweise ausgewertet
Upgrade-Empfehlung
✅ Sofort installieren
Das Release schließt drei Schwachstellen, ohne eine Migration oder eine Konfigurationsanpassung zu verlangen. Der Aufwand beschränkt sich auf eine Sichtprüfung eigener Theme-Anpassungen und, bei aktivierter Fragenverschlüsselung, auf die Prüfung bereits gespeicherter Antworten.
Lesepfad
| Zielgruppe | Relevante Kennungen und Kapitel |
|---|---|
| Administratoren | A1, A2, A3, A4, A5, A6, A7, Weitere relevante Änderungen, Empfehlung |
| Plugin-Entwickler | A4, Empfehlung |
| Theme-Entwickler | A5, Weitere relevante Änderungen, Empfehlung |
| Integratoren | A1, A6, A7, Empfehlung |
| API-Nutzer | A1, A7, Empfehlung |
Die wichtigsten Änderungen
A1: Antworten werden beim Bearbeiten wieder verschlüsselt gespeichert
Hintergrund — Der Dienst, der eine bestehende Antwort aktualisiert, hat die Werte über die gewöhnliche Speichermethode des Antwortmodells geschrieben. Diese Methode kennt die pro Frage konfigurierte Verschlüsselung nicht; sie legt den übergebenen Wert unverändert in der Spalte ab. Der Lesepfad entschlüsselt dieselbe Spalte jedoch, sodass ein im Klartext geschriebener Wert beim nächsten Zugriff nicht als Klartext erkannt, sondern als fehlerhafter Chiffretext behandelt wird. Der Dienst wird von den Aktualisierungs- und Löschbefehlen der REST-Schnittstelle unter application/libraries/Api/Command/V1/SurveyResponses/patch/ verwendet, also von dem Weg, über den der neue Editor eine Antwort manuell bearbeitet.
Konsequenz — Wer Fragenverschlüsselung nutzt und eine Antwort über die Antwortbearbeitung ändert, speichert ab diesem Release wieder verschlüsselt; der Folgefehler beim erneuten Öffnen der Antwort entfällt. Die Änderung wirkt ausschließlich auf den Schreibpfad: Werte, die vor dem Update über diesen Weg gespeichert wurden, liegen unverändert im Klartext in der Antworttabelle und werden weiterhin als fehlerhaft entschlüsselt. Wie viele Datensätze das betrifft und wie sie sich reparieren lassen, ist aus dem Diff nicht bestimmbar; die Prüfung muss auf der Datenbank erfolgen. Installationen ohne aktivierte Fragenverschlüsselung sind nicht betroffen, weil der neue Aufruf für unverschlüsselte Fragen denselben Wert schreibt wie zuvor.
Vorher / Nachher
// Vorher (application/models/services/SurveyResponseService.php)
$response->setAllAttributes($responseData);
if (!$response->save()) {
throw new PersistErrorException();
}
// Nachher
$response->setAllAttributes($responseData);
// Use encryptSave() so values for questions with encryption enabled are encrypted before persisting.
if (!$response->encryptSave(true)) {
throw new PersistErrorException();
}
Nach dem Update testen — Eine Frage mit aktivierter Verschlüsselung anlegen, eine Antwort erfassen, sie anschließend über die Antwortbearbeitung ändern und den Rohwert der zugehörigen Spalte direkt in der Datenbank ansehen: Er muss Chiffretext sein, während die Oberfläche den Klartext zeigt. Für Bestandsdaten stichprobenartig prüfen, ob Antworten, die zwischen der Einführung des Fehlers und diesem Update bearbeitet wurden, beim Öffnen einen Entschlüsselungsfehler auslösen.
Betroffene Dateien — application/models/services/SurveyResponseService.php
Relevante Commits — 5218111a98
A2: Reflektiertes Cross-Site-Scripting im Editor-Popup
Hintergrund — Das Popup des HTML-Editors wird über die Administrationsroute htmleditorpop aufgerufen und übernimmt die Parameter name und text aus der Query-Zeichenkette. Der Controller application/controllers/admin/HtmlEditorPop.php reicht beide nach einem Filterdurchlauf an die Ansicht weiter, die sie bisher unmaskiert in den Seitentitel und an vier Stellen direkt in erzeugtes JavaScript geschrieben hat — dreimal als Bezeichner innerhalb einfacher Anführungszeichen, einmal als Zeichenkette für die Statuszeile. Aus dem Feldnamen leitet der Controller zusätzlich zwei weitere Bezeichner ab, die auf demselben Weg in das Skript gelangen. Die Ansicht maskiert nun den Titel über die HTML-Kodierung und erzeugt alle vier JavaScript-Werte über die JavaScript-Kodierung von Yii, die die Anführungszeichen selbst mitliefert.
Konsequenz — Ein präparierter Link auf das Editor-Popup kann keinen Skriptcode mehr in den Kontext der Administrationsoberfläche einschleusen. Die Lücke war reflektiert, das heißt sie setzte voraus, dass eine angemeldete Person den präparierten Link öffnet; ohne gültige Sitzung ist die Route nicht erreichbar. Für den regulären Betrieb ändert sich nichts, da die kodierten Werte im Normalfall zeichengleich zu den bisherigen sind. Auffällig ist, dass die Übersetzungsfunktion für die Statuszeile nicht mehr im Modus js, sondern im Modus unescaped aufgerufen wird — die Maskierung übernimmt jetzt vollständig die JavaScript-Kodierung.
Vorher / Nachher
// Vorher (application/views/admin/htmleditor/pop_editor_view.php)
<title><?php printf(gT('Editing %s'), $sFieldText); ?></title>
...
editor.setData(window.opener.document.getElementById("<?php echo $sFieldName; ?>").value);
editor.execCommand('maximize');
window.status='<?php echo sprintf(gT('Editing %s', 'js'), javascriptEscape($sFieldText, true)); ?>';
// Nachher
<title><?php printf(gT('Editing %s'), CHtml::encode($sFieldText)); ?></title>
...
editor.setData(window.opener.document.getElementById(<?php echo CJavaScript::encode($sFieldName, true); ?>).value);
editor.execCommand('maximize');
window.status=<?php echo CJavaScript::encode(sprintf(gT('Editing %s', 'unescaped'), $sFieldText)); ?>;
Nach dem Update testen — Aus der Fragen- oder Textbausteinbearbeitung heraus das Editor-Popup öffnen, Text eingeben und über die Übernahme-Schaltfläche zurückschreiben; der Wert muss unverändert im Ausgangsfeld landen. Zusätzlich einen Feldnamen mit Sonderzeichen über die Query-Parameter name und text aufrufen und prüfen, dass Titel und Statuszeile den Text darstellen, statt ihn auszuführen.
Betroffene Dateien — application/views/admin/htmleditor/pop_editor_view.php
Relevante Commits — a8993bfd05
CVE / Advisory — Der Commit ist in der Commit-Nachricht und in docs/release_notes.txt ausdrücklich als [security] markiert und nennt die Issue-Nummer 20652 sowie den Pull Request 5231. Eine CVE-Kennung ist im Repository nicht auffindbar.
A3: SQL-Injection in den Statistikfiltern
Hintergrund — Die Funktion buildSelects baut aus den übermittelten Formularfeldern die WHERE-Bedingungen der Statistikabfrage zusammen. Sie hat die Feldnamen bisher nur durch quoteColumnName() geschickt; der hinzugefügte Kommentar hält fest, dass diese Methode Anführungszeichen innerhalb eines Bezeichners nicht maskiert und für sich genommen nicht injektionssicher ist. Die vorgelagerte Prüfung, ob ein Feldname zur Umfrage gehört, verglich gegen eine Liste, die im Administrationspfad ihrerseits aus der Anfrage stammt: application/controllers/admin/Statistics.php befüllt sie über returnGlobal('summary') und übergibt sie unverändert als Feldliste an die Statistikerzeugung. Neu werden alle Bezeichner gegen die tatsächlichen Spalten der Antworttabelle geprüft; wer nicht in dieser Liste steht, löst eine Ausnahme aus, die pro Filterfeld abgefangen wird.
Konsequenz — Ein angemeldetes Konto mit Statistikzugriff kann über die Filterfelder keine eigenen SQL-Fragmente mehr in die Abfrage einbringen. Filter, die sich auf eine reale Spalte der Antworttabelle beziehen, verhalten sich unverändert; Filter auf einen unbekannten Bezeichner werden ab jetzt still übergangen, statt einen Datenbankfehler auszulösen. Dieselbe Härtung erhielt die Variante in application/helpers/userstatistics_helper.php, die laut application/controllers/StatisticsUserController.php die öffentliche Ergebnisanzeige bedient. Dort leitet der Controller die Feldliste aus den Fragen mit gesetztem Attribut für öffentliche Statistik ab, also serverseitig; ob der Angriff über diesen Weg erreichbar war, ist aus dem Diff nicht bestimmbar.
Vorher / Nachher
// Neu (application/helpers/admin/statistics_helper.php)
$quoteColumn = function ($column) use ($validColumns) {
$key = strtolower((string) $column);
if (!isset($validColumns[$key])) {
throw new InvalidArgumentException('Statistics filter references an unknown column.');
}
return Yii::app()->db->quoteColumnName($validColumns[$key]);
};
// Vorher (application/helpers/admin/statistics_helper.php)
$thisquestion = Yii::app()->db->quoteColumnName($pv) . " IN (";
// Nachher
$thisquestion = $quoteColumn($pv) . " IN (";
Nach dem Update testen — In der Statistik einer Umfrage mit Antwortdaten nacheinander einen Filter auf eine Auswahlfrage, auf eine numerische Frage und auf ein Datumsfeld setzen und die Trefferzahl gegen die ungefilterte Auswertung prüfen. Anschließend eine Umfrage mit aktivierter öffentlicher Statistik aufrufen und kontrollieren, dass die Ergebnisseite weiterhin Werte ausgibt.
Betroffene Dateien — application/helpers/admin/statistics_helper.php, application/helpers/userstatistics_helper.php
Relevante Commits — a628daa5dc
CVE / Advisory — Der Commit ist als [security] markiert und nennt die Issue-Nummer 20648 sowie den Pull Request 5225; die hinzugefügten Kommentare verweisen ebenfalls auf bug #20648. Eine CVE-Kennung ist im Repository nicht auffindbar.
A4: SQL-Injection beim Abgleich der zentralen Teilnehmerdatenbank
Hintergrund — Beim Abgleich zwischen der zentralen Teilnehmerdatenbank und der Teilnehmertabelle einer Umfrage schrieb updateTokenAttributeValue die Teilnehmerkennung direkt in die WHERE-Bedingung und die Umfragekennung direkt in den Tabellennamen. Die Kennung stammt aus dem Teilnehmerdatensatz, der beim Kopieren aus der Teilnehmertabelle gelesen wird; die Commit-Nachricht bezeichnet den Weg als Injektion „through a token". Beide Werte werden jetzt gebunden beziehungsweise als Ganzzahl gecastet. Zusätzlich prüft updateAttributeValueToken die übergebene Attributkennung und den Feldnamen, bevor überhaupt eine Abfrage entsteht, und copyToCentral verwirft Zuordnungen, deren Schlüssel keiner echten Attributspalte der Umfrage entspricht.
Konsequenz — Der Abgleich in beide Richtungen verhält sich für Zuordnungen auf reguläre Teilnehmerattribute unverändert. Zuordnungen, deren Schlüssel nicht dem Muster einer Attributspalte folgt oder die in der Attributbeschreibung der Umfrage nicht vorkommen, werden ab jetzt kommentarlos übersprungen; ob die Oberfläche solche Zuordnungen überhaupt erzeugen kann, ist aus dem Diff nicht bestimmbar. Für Plugin-Entwickler ändert sich ein Vertrag: updateAttributeValueToken gibt nun in mehreren Prüffällen false und im Erfolgsfall true zurück, während die Methode zuvor keinen Rückgabewert am Ende hatte. Im Kern gibt es keinen Aufrufer dieser Methode, sie ist also nur aus fremdem Code erreichbar.
Vorher / Nachher
// Vorher (application/models/Participant.php)
->update("{{tokens_$surveyId}}", $data, "participant_id = '$participantId'");
// Nachher
->update(
"{{tokens_" . intval($surveyId) . "}}",
$data,
'participant_id = :participant_id',
array(':participant_id' => $participantId)
);
// Neu (application/models/Participant.php)
protected static function isValidTokenAttributeFieldname($survey, $tokenFieldname)
{
if (!is_string($tokenFieldname) || !preg_match('/^attribute_[0-9]+$/', $tokenFieldname)) {
return false;
}
return array_key_exists($tokenFieldname, $survey->getTokenAttributes());
}
Nach dem Update testen — Teilnehmer aus einer Umfrage in die zentrale Teilnehmerdatenbank kopieren, dabei ein bestehendes Attribut zuordnen und ein neues anlegen lassen, anschließend in der zentralen Datenbank prüfen, dass beide Werte angekommen sind. Danach den umgekehrten Weg gehen, Teilnehmer in eine Umfrage übernehmen und die Werte in der Teilnehmertabelle vergleichen.
Betroffene Dateien — application/models/Participant.php
Relevante Commits — 7735ce31ce
CVE / Advisory — Der Commit ist als [security] markiert und nennt die Issue-Nummer 20651 sowie den Pull Request 5226. Eine CVE-Kennung ist im Repository nicht auffindbar.
A5: Links in Umfrage-Themes erben Schriftgröße und Schriftstärke
Hintergrund — Die Typografieregeln des Themes fruity_twentythree haben jedem Anker eine feste Schriftstärke und eine feste, kleinere Schriftgröße zugewiesen. Dadurch wich ein Link innerhalb einer Überschrift, einer Fragestellung oder eines Umfragegruppentexts sichtbar von seiner Umgebung ab — das ist der als Fehler 20181 beschriebene Effekt. Beide Deklarationen stehen jetzt auf inherit. Die Änderung liegt sowohl in der SCSS-Quelle als auch in den acht ausgelieferten Variationsdateien vor, wird also mit dem Release tatsächlich ausgeliefert und nicht erst durch einen Neubau wirksam.
Konsequenz — Links in Umfragen übernehmen ab diesem Release Größe und Stärke des umgebenden Texts. Wo bisher die feste kleinere Größe das Layout getragen hat, verschieben sich Zeilenumbrüche und Abstände, ohne dass eine Fehlermeldung erscheint. Betroffen sind alle Themes, die von fruity_twentythree erben und die Variationsdateien unverändert nutzen; eigene Themes mit eigener Typografiedatei sind es nicht. Eigene CSS-Anpassungen, die sich bislang darauf verlassen haben, die Vorgabe zu überschreiben, wirken weiterhin, greifen aber jetzt gegen einen anderen Ausgangswert. Die im selben Release angehobene Asset-Version sorgt dafür, dass die geänderten Stylesheets über die Auslieferungs-URL neu bezogen werden.
Vorher / Nachher
/* Vorher (assets/survey_themes/fruity_twentythree/typography/typography.scss) */
a {
font-weight: $font-weight-500;
font-size: $font-size-sm;
text-decoration: none;
...
/* Nachher */
a {
font-weight: inherit;
font-size: inherit;
text-decoration: none;
...
// Vorher (application/config/version.php)
$config['versionnumber'] = '7.0.9';
$config['dbversionnumber'] = 710;
$config['buildnumber'] = '';
$config['updatable'] = true;
$config['templateapiversion'] = 3;
$config['assetsversionnumber'] = '30497';
// Nachher
$config['versionnumber'] = '7.0.10';
$config['dbversionnumber'] = 710;
$config['buildnumber'] = '';
$config['updatable'] = true;
$config['templateapiversion'] = 3;
$config['assetsversionnumber'] = '30498';
Nach dem Update testen — Eine Umfrage mit Links in der Umfragebeschreibung, in einem Gruppentext und innerhalb einer Fragestellung in jeder der vier Variationen einmal hell und einmal rechtsläufig aufrufen und mit einem Bildschirmfoto vor dem Update vergleichen. Eigene Stylesheets gezielt nach Regeln durchsuchen, die auf der bisherigen festen Schriftgröße von Ankern aufbauen.
Betroffene Dateien — assets/survey_themes/fruity_twentythree/typography/typography.scss, themes/survey/fruity_twentythree/css/variations, application/config/version.php
Relevante Commits — 4f337fd15e
A6: Fragenattribute überleben den TXT-Export
Hintergrund — Der TXT-Export einer Umfrage bildete seine Spaltenliste aus einer festen Menge Basisfelder und den global definierten Fragenattributen. Attribute, die eine Umfrage tatsächlich gespeichert hat, die aber in dieser globalen Definitionsliste fehlen — etwa Attribute eines Fragen-Themes —, fielen dabei ersatzlos weg. Neu sammelt der Export die tatsächlich vorhandenen Attributnamen aus der XML-Zwischenstruktur ein und hängt sie an die Spaltenliste an. Ergänzend verhindert eine zweite Bedingung, dass ein gleichnamiges Fragenattribut eine Basisspalte der Frage überschreibt, und der Importpfad in application/helpers/admin/import_helper.php überspringt leere Zeilen, ermittelt die Sprachabhängigkeit eines Attributs zusätzlich aus den globalen Definitionen und entfernt beim Wiedereinlesen doppelte Zeilen je Frage, Attribut und Sprache.
Konsequenz — Ein Umlauf aus Export nach TXT und anschließendem Import verliert die Attribute eines Fragen-Themes nicht mehr. Die Spaltenzahl der exportierten Datei hängt ab diesem Release vom Inhalt der Umfrage ab und nicht mehr allein von der globalen Attributliste: Wer den TXT-Export maschinell weiterverarbeitet und dabei eine feste Spaltenanordnung oder Spaltenzahl voraussetzt, bekommt zusätzliche Spalten, ohne dass ein Fehler gemeldet wird. Zum selben Commit gehört eine Ergänzung in editor/src/components/QuestionSettings/attributes/getOtherAttributes.js, die zwei Kopfzeilen-Attribute als sprachabhängig kennzeichnet; das gebaute Editor-Bündel unter editor/build ist an beiden Tags identisch, die Änderung ist also nur im Quelltext enthalten und wirkt erst nach einem Neubau.
Vorher / Nachher
// Neu (application/helpers/export_helper.php)
if (array_key_exists('question_attributes', $xmlData)) {
$attributeRows = $xmlData['question_attributes']['rows']['row'];
if (!array_key_exists('0', $attributeRows)) {
$attributeRows = array($attributeRows);
}
foreach ($attributeRows as $attributeRow) {
if (isset($attributeRow['attribute']) && !is_array($attributeRow['attribute']) && !in_array($attributeRow['attribute'], $fields, true)) {
$fields[] = $attributeRow['attribute'];
}
}
}
// Vorher (application/helpers/export_helper.php)
if (array_key_exists($attributeName, $fields)) {
// Nachher
// Never let a stray same-named question attribute overwrite a base question column (e.g. 'encrypted').
if (array_key_exists($attributeName, $fields) && !in_array($attributeName, $aBaseFields, true)) {
Nach dem Update testen — Eine Umfrage mit mindestens einer Frage aus einem Fragen-Theme nach TXT exportieren, die Kopfzeile auf die zusätzlichen Attributspalten prüfen und die Datei anschließend als neue Umfrage importieren; die Theme-Attribute müssen in der importierten Frage gesetzt sein. Danach eine mehrsprachige Umfrage exportieren und kontrollieren, dass jedes nicht sprachabhängige Attribut nur einmal je Frage im Import ankommt.
Betroffene Dateien — application/helpers/export_helper.php, application/helpers/admin/import_helper.php, editor/src/components/QuestionSettings/attributes/getOtherAttributes.js
Relevante Commits — b5346776bd
A7: Authorization-Header wird unabhängig von der Schreibweise ausgewertet
Hintergrund — Die Fabrik, die eingehende Anfragen an die REST-Endpunkte verteilt, suchte im Kopfzeilenfeld exakt nach dem Schlüssel Authorization. Der hinzugefügte Kommentar hält fest, dass Kopfzeilennamen laut RFC 7230 ohne Rücksicht auf Groß- und Kleinschreibung zu behandeln sind und dass manche Server oder Proxys — namentlich unter HTTP/2 — sie in Kleinschreibung weiterreichen. Die Kopfzeilen werden nun einheitlich in Kleinbuchstaben überführt, bevor der Träger-Token entnommen wird.
Konsequenz — In Aufbauten, die den Kopfzeilennamen kleingeschrieben durchreichen, wird das Zugriffstoken wieder erkannt; die als Fehlerbild genannte Folge war, dass der neue Editor nicht arbeitete. Installationen, die den Namen bereits in der üblichen Schreibweise erhalten, verhalten sich unverändert, denn deren Schlüssel wird durch die Umwandlung ebenfalls getroffen. Die Änderung greift nicht, wenn der Header vom Webserver gar nicht an PHP weitergereicht wird — das betrifft typischerweise CGI- und FastCGI-Aufbauten ohne entsprechende Umschreiberegel; in diesem Fall kommt der Wert unabhängig von der Schreibweise nicht an.
Vorher / Nachher
// Vorher (application/libraries/Api/Rest/Endpoint/EndpointFactory.php)
$headers = getAllHeaders();
...
if (
isset($headers['Authorization'])
&& strpos(
$headers['Authorization'],
'Bearer '
) === 0
) {
$token = substr($headers['Authorization'], 7);
}
// Nachher
// HTTP header field names are case-insensitive (RFC 7230), so lowercase
// all keys. Some servers or proxies (e.g. HTTP/2) send them lowercased.
$headers = array_change_key_case(getAllHeaders(), CASE_LOWER);
...
if (
isset($headers['authorization'])
&& strpos($headers['authorization'], 'Bearer ') === 0
) {
$token = substr($headers['authorization'], 7);
}
Nach dem Update testen — Eine REST-Anfrage mit dem Kopfzeilennamen in Kleinschreibung und eine zweite in der üblichen Schreibweise gegen denselben Endpunkt senden; beide müssen mit demselben Ergebnis antworten. Anschließend den neuen Editor über denselben Zugangsweg öffnen, über den er zuvor nicht startete.
Betroffene Dateien — application/libraries/Api/Rest/Endpoint/EndpointFactory.php
Relevante Commits — f720a9bbf5
Weitere relevante Änderungen
Spaltenname der Kommentarfelder in der Statistikausgabe korrigiert
Survey Runtime · Kein Bruch · Administratoren
Die Statistikausgabe nach PDF und Excel liest die Kommentarspalte von Mehrfachauswahl-Fragen mit Kommentar nun unter dem tatsächlichen Spaltennamen und bricht dadurch nicht mehr ab. (3417265aa3)
Aria-Beschriftungen der Modal-Schaltflächen übersetzbar gemacht
Themes und Rendering · Kein Bruch · Theme-Entwickler, Administratoren
Die Schließen-Schaltflächen im Datenschutz- und im Abbruchdialog des ausgelieferten Umfrage-Themes tragen ihre Beschriftung jetzt in der Umfragesprache. (aac057adb1)
Zuordnung nach Bereich
| Bereich | Vollständig beschrieben | Weitere Einträge |
|---|---|---|
| Sicherheit | A2, A3, A4 | – |
| Datenbank | keine | – |
| RemoteControl API | keine | – |
| Survey Runtime | A1, A3 | ja |
| Themes und Rendering | A5 | ja |
| Plugin-Kompatibilität | A4 | – |
| Performance | keine | – |
Nicht betroffene Bereiche
Der Diff enthält keine Datei unterhalb von application/helpers/update/, insbesondere weder updatedb_helper.php noch das Verzeichnis application/helpers/update/updates; die interne Datenbank-Versionsnummer steht vor und nach dem Update auf demselben Wert, wie das Zitat aus application/config/version.php unter A5 zeigt. Eine Schema-, Spalten-, Index- oder Constraint-Änderung ist damit im Diff nicht erkennbar.
application/helpers/remotecontrol/remotecontrol_handle.php ist im Diff nicht enthalten; die JSON-RPC-Schnittstelle behält damit ihre Methodensignaturen und Rückgabefelder.
Die Dateien unterhalb von application/libraries/PluginManager/, darunter PluginEvent.php, PluginManager.php und LimesurveyApi.php, sind im Diff nicht enthalten; an der Ereignisverteilung und an den Ereignisparametern ist im Diff keine Änderung erkennbar.
composer.json, composer.lock und package.json sind im Diff nicht enthalten; die deklarierten Abhängigkeiten und Mindestanforderungen bleiben damit auf dem Stand der Ausgangsversion.
Der Verzeichnisbaum editor/build ist an beiden Tags derselbe; die ausgelieferten Editor-Bündel sind unverändert.
Empfehlung
Administratoren
Vor dem Update: Eine Sicherung von Datenbank und Dateibaum anlegen. Prüfen, ob in der Installation Fragen mit aktivierter Verschlüsselung vorkommen und ob deren Antworten seit der Einführung des neuen Editors manuell bearbeitet wurden (A1). Eigene Anpassungen an den Stylesheets der ausgelieferten Umfrage-Themes zusammenstellen, damit die Sichtprüfung danach gezielt erfolgen kann (A5).
Unmittelbar nach dem Update: Die Statistik einer Umfrage mit Filtern aufrufen und einen Export nach PDF oder Excel anstoßen (A3, Kurzeintrag „Spaltenname der Kommentarfelder in der Statistikausgabe korrigiert"). Einen Abgleich mit der zentralen Teilnehmerdatenbank in beide Richtungen durchführen (A4). Eine Umfrage in jeder Variation des ausgelieferten Themes ansehen und die Linkdarstellung mit dem vorherigen Stand vergleichen (A5). Bei aktivierter Fragenverschlüsselung eine Antwort bearbeiten und den Rohwert in der Datenbank prüfen (A1).
Rollback: Das Release legt keine Konfigurationsdatei an und bringt keine Migration mit; die interne Datenbank-Versionsnummer ist vor und nach dem Update dieselbe, belegt durch das Zitat unter A5. Ein Rückschritt auf den vorherigen Dateibaum ist damit ohne Eingriff in das Schema möglich. Nicht rückgängig gemacht werden dadurch Antwortwerte, die zwischenzeitlich verschlüsselt geschrieben wurden — ob die alte Fassung diese Werte korrekt liest, ist aus dem Diff nicht bestimmbar und in einer Testumgebung zu prüfen. Ebenso nicht bestimmbar ist, ob Browser und vorgelagerte Caches nach dem Zurücksetzen der Asset-Version wieder die alten Stylesheets ausliefern.
Plugin-Entwickler
Eigenen Code darauf durchsehen, ob er die Methode zum Zurückschreiben eines Teilnehmerattributs in die zentrale Datenbank aufruft; sie liefert jetzt einen booleschen Rückgabewert und verwirft Feldnamen, die keiner Attributspalte der Umfrage entsprechen (A4). Der Rückgabewert sollte ausgewertet werden, weil ein abgewiesener Aufruf keine Meldung erzeugt.
Theme-Entwickler
Eigene Stylesheets nach Regeln durchsehen, die auf der bisherigen festen Schriftstärke und Schriftgröße von Ankern aufsetzen, und die Linkdarstellung in Fragestellungen, Gruppentexten und Fußbereichen erneut abnehmen (A5). Wer die Schließen-Schaltflächen der Dialoge im eigenen Theme nachgebaut hat, kann die Beschriftung analog zum Kurzeintrag „Aria-Beschriftungen der Modal-Schaltflächen übersetzbar gemacht" durch die Übersetzungsfunktion führen.
Integratoren
Verarbeitungsschritte, die den TXT-Export einer Umfrage einlesen, auf eine feste Spaltenzahl oder feste Spaltenpositionen prüfen und auf die Auswertung über die Kopfzeile umstellen (A6). Bei Anbindungen, die Antworten über die REST-Schnittstelle aktualisieren, den Zugangsweg mit kleingeschriebenem Kopfzeilennamen gegentesten (A7) und bei aktivierter Fragenverschlüsselung stichprobenartig prüfen, ob zuvor geschriebene Werte lesbar sind (A1).
API-Nutzer
Bestehende Clients müssen nichts ändern; die Erkennung des Zugangstokens wurde ausschließlich erweitert (A7). Wer Antworten über die Aktualisierungsbefehle der REST-Schnittstelle schreibt und Fragenverschlüsselung nutzt, sollte einen Schreib-Lese-Umlauf gegen eine verschlüsselte Frage durchführen (A1).