Anf.zeichen in Feldern auf der Konfigurationsseite -> Err

DerEineDa
Beiträge: 17
Registriert: Mi 30. Nov 2005, 17:31
Kontaktdaten:

Anf.zeichen in Feldern auf der Konfigurationsseite -> Err

Beitrag von DerEineDa » Do 12. Jan 2006, 09:43

Hallo,

Ich habe ein extrem einfaches Modul geschrieben, bei dem man in der Konfigurationsseite eines Artikels bereits einige kurze Texte eingeben kann. Das mache ich aus dem Grund, weil ich für meinen Betrieb Schulungsangebote ins Netz stellen will, und da gibt es viele kurze Angaben wie Kosten, Ort, Kontakt-eMail, Kooperationspartner, etc. Mehrere CMS_TEXT[]-Elemente im Output des Moduls würden jeden Redakteur zur Weißglut treiben, wenn für jede einzelne kurze Angabe extra auf einen Button geklickt werde muss und gewartet werden muss, bis sich die Seite neu lädt.

Dabei bin ich auf das Problem gestoßen, dass, sobald man Anführungszeichen in ein Textfeld auf der Konfigurationsseite schreibt, man nur noch einen PHP-Error erhält, sobald man auf die Editor- oder Vorschau-Seite wechseln möchte.

Da ich dieses Problem auch mit jedem beliebigen anderen Modul habe, gehe ich von einem Bug in Contenido aus, trotzdem hier mein Input-Code des Moduls.

Code: Alles auswählen

$var0 = nl2br(htmlentities("CMS_VALUE[0]"), ENT_QUOTES);
$var1 = nl2br(htmlentities("CMS_VALUE[1]"), ENT_QUOTES);
$var2 = nl2br(htmlentities("CMS_VALUE[2]"), ENT_QUOTES);
$var3 = nl2br(htmlentities("CMS_VALUE[3]"), ENT_QUOTES);
$var4 = nl2br(htmlentities("CMS_VALUE[4]"), ENT_QUOTES);
$var5 = nl2br(htmlentities("CMS_VALUE[5]"), ENT_QUOTES);
$var6 = nl2br(htmlentities("CMS_VALUE[6]"), ENT_QUOTES);
$var7 = nl2br(htmlentities("CMS_VALUE[7]"), ENT_QUOTES);
$var8 = nl2br(htmlentities("CMS_VALUE[8]"), ENT_QUOTES);
$var9 = nl2br(htmlentities("CMS_VALUE[9]"), ENT_QUOTES);
$var10 = nl2br(htmlentities("CMS_VALUE[10]"), ENT_QUOTES);
$var11 = nl2br(htmlentities("CMS_VALUE[11]"), ENT_QUOTES);
?>
<table>
  <tr>
    <td><?php echo mi18n("Überschrift");?></td>
    <td><input size="39" type="text" name="<?php echo "CMS_VAR[0]"; ?>" value="<?php echo $var0; ?>"></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Untertitel");?></td>
    <td><input size="39" type="text" name="<?php echo "CMS_VAR[1]"; ?>" value="<?php echo $var1; ?>"></td>
  </tr>
  <tr>
    <td><?php echo mi18n("VA.-Nr.");?></td>
    <td><input size="39" type="text" name="<?php echo "CMS_VAR[2]"; ?>" value="<?php echo $var2; ?>"></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Kooperation");?></td>
    <td><input size="39" type="text" name="<?php echo "CMS_VAR[3]"; ?>" value="<?php echo $var3; ?>"></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Ort");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[4]"; ?>"><?php echo $var4; ?></textarea></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Kosten");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[5]"; ?>"><?php echo $var5; ?></textarea></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Termin/Dauer");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[6]"; ?>"><?php echo $var6; ?></textarea></td>
  </tr>
  <tr>
  <tr>
    <td><?php echo mi18n("Teilnehmer");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[7]"; ?>"><?php echo $var7; ?></textarea></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Teilnahmevoraussetzungen");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[8]"; ?>"><?php echo $var8; ?></textarea></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Abschluss");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[9]"; ?>"><?php echo $var9; ?></textarea></td>
  </tr>
  <tr>
    <td><?php echo mi18n("Kontakt");?></td>
    <td><textarea rows="4" cols="30" name="<?php echo "CMS_VAR[10]"; ?>"><?php echo $var10; ?></textarea></td>
  </tr>
  <tr>
    <td><?php echo mi18n("E-Mail");?></td>
    <td><input size="39" type="text" name="<?php echo "CMS_VAR[11]"; ?>" value="<?php echo $var11; ?>"></td>
  </tr>
</table>

<?php
Die ausgegebene PHP-Fehlermeldung lautet
Parse error: parse error, unexpected '\"' in /is/htdocs/wp1028779_EPVQUSB3XP/www/contenido/includes/include.con_editcontent.php(644) : eval()'d code on line 294
Der Output des Moduls ist nicht wichtig, da der "Fehler" garantiert im Input liegt. Man kann den Output sogar komplett leer lassen, trotzdem kommt diese Fehlermeldung sobald man die Seite vorschauen möchte.

Wie gesagt gehe ich von einem Fehler in Contenido aus.

Kann mir das jemand bestätigen?
Mach ich einen Fehler?
Gibt es einen Workaround?

edit:
Vergessen zu erwähnen: Ich beziehe mich hier auf die momentan aktuelle Version 4.6.4
Zuletzt geändert von DerEineDa am Do 12. Jan 2006, 12:01, insgesamt 1-mal geändert.

DerEineDa
Beiträge: 17
Registriert: Mi 30. Nov 2005, 17:31
Kontaktdaten:

Beitrag von DerEineDa » Do 12. Jan 2006, 11:54

Ok, wie ich sehe gibt es das Prob schon seit über 1 1/2 Jahren, ich bin nicht der erste im Forum. Aber wie's aussieht bin ich der erste mit einer Lösung ;)

Ich habe zwei Contenido-Dateien bearbeitet um diesen Fehler zu beheben, es scheint also wirklich ein astreiner Bug zu sein. Wie es aussieht habe ich durch diese Modifikationen keine andere Funktion zerstört, also schlage ich vor diese Änderungen (oder ähnlicher Art, denn ich bin PHP-Anfänger) in der nächsten offiziellen Version zu übernehmen:

Datei "/contenido/includes/include.con_editcontent.php"
Ab Zeile 546:
Eine AddSlashes-Funktion hinzufügen. Also aus

Code: Alles auswählen

                    foreach ($varstring as $key3=>$value3){
                      $tmp = urldecode($value3);
                      $tmp = str_replace("\'", "'", $tmp);
                      $CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; ';
                      $output = str_replace("\$CMS_VALUE[$key3]", $tmp, $output);
                      $output = str_replace("CMS_VALUE[$key3]", $tmp, $output);
                    }
wird

Code: Alles auswählen

                    foreach ($varstring as $key3=>$value3){
                      $tmp = urldecode($value3);
                      $tmp = str_replace("\'", "'", $tmp);
                      $tmp = addslashes($tmp);
                      $CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; ';
                      $output = str_replace("\$CMS_VALUE[$key3]", $tmp, $output);
                      $output = str_replace("CMS_VALUE[$key3]", $tmp, $output);
                    }
Dadurch wird jeder einzelne CMS_VALUE[]-Eintrag Escaped, was den PHP-Fehler auf der Editor-Seite umgeht.

Genau das gleiche auch hier:

Datei "/contenido/includes/functions.con2.php"
Ab Zeile 290:
Aus

Code: Alles auswählen

foreach ($varstring as $key3 => $value3)
			{
				$tmp = urldecode($value3);
				$tmp = str_replace("\'", "'", $tmp);
				$CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; ';
				$output = str_replace("\$CMS_VALUE[$key3]", $tmp, $output);
				$output = str_replace("CMS_VALUE[$key3]", $tmp, $output);
			}
wird

Code: Alles auswählen

foreach ($varstring as $key3 => $value3)
			{
				$tmp = urldecode($value3);
				$tmp = str_replace("\'", "'", $tmp);
				$tmp = addslashes($tmp);
				$CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; ';
				$output = str_replace("\$CMS_VALUE[$key3]", $tmp, $output);
				$output = str_replace("CMS_VALUE[$key3]", $tmp, $output);
			}
Nach diesen Änderungen unbedingt die Tabelle con_code in der Datenbank leeren!

Durch geschicktes Ausnutzen dieses Fehlers lässt sich durch die Textfelder bestimmt auch PHP-Code einschleusen (=Sicherheitslücke), deswegen schlage ich diese Änderung für die nächste Version vor.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 12. Jan 2006, 13:53

Ähm, nicht verifiziert, aber hört sich gut an, verschoben.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag von MichFress » Do 23. Feb 2006, 14:38

danke, du einer da...

ich weiß net, ob das jemandem hilft, aber ich konnte mit obigen Angaben gerade besagtes Problem prima lösen...
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)

DerEineDa
Beiträge: 17
Registriert: Mi 30. Nov 2005, 17:31
Kontaktdaten:

Beitrag von DerEineDa » Do 6. Apr 2006, 20:14

Es sieht nicht so aus, als ob das in der neuen Version 4.6.8 übernommen wurde, zumindest nicht so, wie ich es vorgeschlagen habe. Wurde es anders wie gefixt oder muss ich bei einem Update auf 4.6.8 das gleiche nochmal machen? Und wieso wurde das nicht direkt übernommen, falls es nicht behoben wurde?

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 6. Apr 2006, 22:47

Weil die Rückmeldungen im Forum für die V4.6.8 leider praktisch keine Verwendung gefunden haben (dann wäre auch dieser Thread geschlossen).

Rezeptionist hat eine optimierte Version gebundelt, die die schlimmsten Fehler korrigiert - aber alles aus Bugs kann da nicht drin sein, da es erst auf andere Auswirkungen verifiziert werden muss.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

DerEineDa
Beiträge: 17
Registriert: Mi 30. Nov 2005, 17:31
Kontaktdaten:

Beitrag von DerEineDa » Do 6. Apr 2006, 23:06

Schade, in der Version von Rezeptionist wurde dieses Problem auch nicht angegangen.

Ich kann zwar verstehen, dass sowas erst getestet werden muss usw., aber ich bin ja nicht der erste im Forum mit diesem Problem und bei mir läuft es mit meinen Änderungen nun schon eine Weile im Einsatz. Es wäre schon irgendwie schade, wenn das nie aufgegriffen werden würde.

Aber danke für deine Antwort, ich werde das nicht länger hinterfragen und die Änderungen nach dem Update einfach wieder per Hand vornehmen.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 7. Apr 2006, 15:07

Sie werden schon übernommen. Nur für die V4.6.8 hat 4fb offensichtlich nur einige wenige Dinge korrigiert und sich die anderen nicht angesehen.

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

ronaldo
Beiträge: 42
Registriert: Fr 18. Mär 2005, 10:23
Kontaktdaten:

Beitrag von ronaldo » Mo 11. Sep 2006, 15:35

I vote for this!

Vielen Dank!

ronaldo

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 2. Okt 2006, 14:44

Dieses ganze Thema ist ein größeres Problem.

Wird jetzt in ein CMS_VALUE-Textfeld ein ' eingetragen, kommt es zu der Fehlermeldung:
Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in ...\contenido\includes\include.tplcfg_edit_form.php(423) : eval()'d code on line 84
Dies lässt sich (lustigerweise) beheben, indem man include.tplcfg_edit_form.php in diesem Abschnitt:

Code: Alles auswählen

foreach ($varstring as $key3=>$value3){
                   $tmp = urldecode($value3);
                   $tmp = str_replace("\'", "'", $tmp);
                   $CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; ';
                   $input = str_replace("\$CMS_VALUE[$key3]", $tmp, $input);
                   $input = str_replace("CMS_VALUE[$key3]", $tmp, $input);
                }
die Zeile

Code: Alles auswählen

$tmp = str_replace("\'", "'", $tmp);
auskommentiert.

Wird ein " eingegeben, wird bei der Anzeige im Feld nach dem Speichern nur ein \ angezeigt (logisch, das das input-Feld so aussieht: ... value="\"Test"...). Dies lässt sich nur beheben, indem " in " umgewandelt wird (das addslashes umgeht nur das Problem im Editor und in der Vorschau).

Das sieht dann so aus:

Code: Alles auswählen

                   $tmp = urldecode($value3);
                   //$tmp = str_replace("\'", "'", $tmp);
                   $tmp = str_replace('\"',""", $tmp); // Fix "-Problem
                   $CiCMS_VALUE .= $CiCMS_Var.'['.$key3.']="'.$tmp.'"; ';
                   $input = str_replace("\$CMS_VALUE[$key3]", $tmp, $input);
                   $input = str_replace("CMS_VALUE[$key3]", $tmp, $input);
Das wäre aber teilweise ein Pyrrhus-Sieg: Benötigt man in einem CMS_VALUE-Feld ein echtes " (warum auch immer) erhält man das später im Modul nur via Umwandlung: $value = str_replace(""", '"', "CMS_VALUE[1]"); - und dann kann man nur beten, dass niemand auf die Idee kommt, """ einzutippen (inkl. Anführungszeichen). Übrigens wird aus " in einem Feld in der Konfiguration ", man müsste also bereits die Speicherung des Feldinhalts korrigieren... :wink:

Für gute Vorschläge/Codeänderungen bin ich offen, ansonsten lasse ich es erstmal so, wie es ist (kaputt...).

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

ronaldo
Beiträge: 42
Registriert: Fr 18. Mär 2005, 10:23
Kontaktdaten:

Beitrag von ronaldo » Mo 2. Okt 2006, 15:20

Vorsicht: Halbwissen.

Was spricht gegen obige addslashes()-Variante?

Mir sind da noch keinerlei Nebenwirkungen untergekommen.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Mo 2. Okt 2006, 15:24

Probiere mal - 'Test' "Test" - in ein Eingabefeld der Konfiguration einzugeben (Vorsicht, nicht mit einem Artikel, den Du noch brauchst) und abzuspeichern. Danach kannst Du spaßenshalber nochmal auf Editor oder Vorschau gehen...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

ronaldo
Beiträge: 42
Registriert: Fr 18. Mär 2005, 10:23
Kontaktdaten:

Beitrag von ronaldo » Mo 2. Okt 2006, 15:31

...funktioniert bei mir tadellos.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Mo 2. Okt 2006, 15:45

ich sag nur das ganze könnte sich ziemlich fatal auswirken...
somit bekommt das von mir den status won't fix
*** make your own tools (wishlist :: thx)

ronaldo
Beiträge: 42
Registriert: Fr 18. Mär 2005, 10:23
Kontaktdaten:

Beitrag von ronaldo » Mo 2. Okt 2006, 16:12

also ich hab' den faden verloren und zwar irgendwo zwischen "funktioniert tadellos" und "fatal auswirken"

Gesperrt