[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
rex-values escapen? - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
_kweso
Beiträge: 164
Registriert: 11. Dez 2006, 20:05
Wohnort: wien/regensburg
Kontaktdaten: Website

rex-values escapen?

22. Feb 2007, 16:32

hello,
ich hab in meinem modul in der ausgabe zb sowas hier:

Code: Alles auswählen

<?
if ("REX_VALUE[1]" != ""){
  echo "<strong>REX_VALUE[1]</strong><br>";
}
?>
wenn nun allerdings in REX_VALUE[1] ein anfuehrungszeichen steht, gibts natuerlich eine php-fehlermeldung, weil ja offensichtlich die rex-values vor der php-ausfuehrung umgewandelt werden.
kann ich die rex-values vor der ausgabe bearbeiten?
danke
kws

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

22. Feb 2007, 21:07

Hi.

Du könntet Dir das REX_VALUE in eine Variable speichern und dann bearbeiten ;)

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!

Benutzeravatar
_kweso
Beiträge: 164
Registriert: 11. Dez 2006, 20:05
Wohnort: wien/regensburg
Kontaktdaten: Website

22. Feb 2007, 22:05

thx, aber wie soll ich das machen?
wenn ichs so mache:

Code: Alles auswählen

<? 
$var1 = "REX_VALUE[1]";
if ($var1 != ""){ 
  echo "<strong>$var1</strong><br>"; 
} 
?>
gibts auch eine fehlermeldung, weil ja REX_VALUE[x] vorher ausgetauscht wird, wo dann zb folgendes stehen koennte:

Code: Alles auswählen

<? 
$var1 = "<a href="http://google.com" target="blank">'google' gir einen</a>";
if ($var1 != ""){ 
  echo "<strong>$var1</strong><br>"; 
} 
?>
was ja offensichtlich nicht funktionieren kann.
kann ich die variable irgendwie anders festlegen?
oder kann ich die anfuehrungszeichen in den
rex-values (nachtraeglich!) irgendwie \"escapen\" ?
thx

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

22. Feb 2007, 22:11

Du veränderst den Inhalt der Variablen via replace. welche methode/funktion da die richtige ist kann ich dir grad nicht sagen.

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!

Benutzeravatar
Andreas.Eberhard
Beiträge: 653
Registriert: 4. Dez 2006, 17:03
Wohnort: Kirchheim bei München
Kontaktdaten: Website

22. Feb 2007, 23:06

Probier mal

echo '<strong>REX_VALUE[1]</strong><br>';

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

23. Feb 2007, 00:45

Dafür gibt es IMHO zwei Lösungen:

1. Heredoc Syntax

$str = <<<EOD
REX_VALUE[1]
EOD;

Problem hier: Variablen werden expandiert (birgt gewisses Risikopotential in Umgebungen mit eingeschränkten Backend-Nutzern)

2. Anpassen der entsprechenden Stellen im Core an denen die REX_VALUE Bezeichner mittels htmlspecialchars behandelt werden.
Dort müsste der zweite Parameter ENT_QUOTES lauten (erzeugt quote Entities für beide relevanten Anführungszeichen (einfach ' und doppelt ")

Bei verwendung von 1. solltest Du alle Variablen, die sicherheitsrelevante Informationen enthalten, welche ein eingeschränkter Benutzer in den ihm verfügbaren Modulen theo. ausgeben lassen könnte, temp. löschen.

$variablennamendengarantiertkeinererratenkann = $totalgeheim;
unset($totalgeheim);
modulAusgabe();
$totalgeheim=sieheoben.)

PS: $REX ist als total geheim einzustufen!)

PS-2: Allerdings solltest Du wenn Du konsequent die REX_VALUES mit doppelten Anführungszeichen einschliesst kein Problem haben. Die sollten von htmlspecialchars per se in Entities umgewandelt werden.

Benutzeravatar
_kweso
Beiträge: 164
Registriert: 11. Dez 2006, 20:05
Wohnort: wien/regensburg
Kontaktdaten: Website

23. Feb 2007, 12:51

thx zehbaeh.
zu 1: was heisst "expandiert"? wieso risiko?

zu 2: 'quote entities' heisst html-entities? das waer aber viel zu umstaendlich, weil in dem am ende ausgegeben text auch auch noch quotes sind, die ja schon encoded sind. ich braucht eher sowas: \"

und wo die "entsprechenden Stellen im Core" sind, weisst du nicht zufaellig? :D

lg
kws


ps: zu ps-2: hab die probleme aber. hab ja in meiner modul-ausgabe sogar schon alle ' mit " ersetzt. das problem taucht auf, weil dieses tiniMCE eben auch doppelte fuer die attribut-werte in den tags macht. die werden nicht umgewandelt und stehen dann als solche in der datenbank.

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

23. Feb 2007, 14:40

Zu 1. "Expandiert"

irgendwo:
$jahr = date('Y');
unset($jaja);

Moduleingabe:
Eingabe in ein Eingabfeld: 'wir schreiben das Jahr "$jahr" $jaja'

Modulausgabe:
$eingabe1 = <<<ENDL
REX_HTML_VALUE[1]
ENDL;

Inhalt der Variablen $eingabe1:
'wir schreiben das Jahr "2007" '

$eingabe2 = <<<ENDL
REX_VALUE[1]
ENDL;

Inhalt der Variablen $eingabe2:
'wir schreiben das Jahr "2007" '

2. Änderungen im Core:
class.article.inc.php

alle Stellen an denen htmlspecialchars mit einem Parameter aufgerufen wird, um einen zweiten Parameter ENT_QUOTES erweitern.
Bei neueren Php-Versionen ist die Angabe des dritten Parameters, speziell
bei Verwendung von UTF-8 für die Ausgabe, sicher auch nicht verkehrt.
Für UTF-8 also:
$allespassendgequotet = htmlspecialchars($ungequotet,ENT_QUOTES,'UTF-8');

Nach diesem Vorgang:

Modulausgabe:
$eingabe2 = 'REX_VALUE[1]';

Inhalt der Variablen $eingabe2:
& #039;wir schreiben das Jahr "$jahr" $jaja& #039;

(Das leerzeichen zwischen dem "Und" und der "Raute" # ist notwendig, da sonst der Forumscode selbst quotet, ist in "Echt" also nicht dort.)

Auf jeden Fall ist ein Blick in die angebene Core-Datei für ein Verständis der "Innereien" empfehlenswert.

PS: Da ich das jetzt alles aus der Erinnerung und einem flüchtigen Blick in die class.article.inc.php geschrieben habe, sind alle Angaben komplett ohne Gewähr.)

PS-EDIT: Korrektur für Angabe von Wert für $eingabe2 nach Änderung im Core. Variablen werden in einfachen Anführungszeichen nicht expandiert/ausgewertet. Sprich statt des Inhalts der Variablen $jahr und $jaja erscheinen die Bezeichner selbst.
Zuletzt geändert von zehbaeh am 23. Feb 2007, 16:01, insgesamt 1-mal geändert.

Benutzeravatar
_kweso
Beiträge: 164
Registriert: 11. Dez 2006, 20:05
Wohnort: wien/regensburg
Kontaktdaten: Website

23. Feb 2007, 15:41

zehbaeh hat geschrieben:...sind alle Angaben komplett ohne Gewähr.)
werd dich nicht verklagen... :P
vielen dank fuer deine ausfuehrlichen erklaerungen. damit werd ich schon mal weiterkommen.
lg
kws

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

23. Feb 2007, 16:27

Änderungen in der Redaxo-Core/Kern-Dateien sind natürlich
grundsätzlich nicht wirklich empfehlenswert.

Für deinen Fall wäre folglich die Verwendung von
1. inkl. REX_HTML_VALUE anstelle von REX_VALUE
und das "Verstecken" der relevanten Variablen sinnvoll
(zb. in einer statischen Variable innerhalb einer Funktion).

Wenn Du kein Problem damit hast das ein Backend-Benutzer DB-Daten und anderes (zb. durch Eingabe von {$REX[DB][1][PSW]}) auslesen kann, ist der zusätzliche Aufwand mit dem verbergen der Variablen natürlich nicht notwendig.

Benutzeravatar
_kweso
Beiträge: 164
Registriert: 11. Dez 2006, 20:05
Wohnort: wien/regensburg
Kontaktdaten: Website

23. Feb 2007, 18:23

danke, bin grad mit was anderem beschaeftigt. wer mir am montag nommal ansehen.
der einzige datenbankbenutzer ist in diesem fall mein chef. da ist das mit der sicherheit nicht so ein problem. evtl wollen wir aber sowas fuer andere machen, dann sollts schon geschuetzt sein.
aber wie gesagt. montag abend weiss ich mehr.
nochmal vielen dank...
kws

Zurück zu „Allgemeines [R3]“