query string verschluesseln
Andreas
- php
Hallo,
ich versuche gerade den Query-String in einer URL zu verschluesseln und am Anfang einer PHP-Datei zu entschluesseln.
Ich ueberpruefe Formulardaten in einer Datei wasauchimmer.php. Wurde alles korrekt eingegeben, gibt es einen Redirect zur naechsten Seite via
header("Location: xyz.php?var1=wert1...")
Allerdings soll der Querystring unleserlich gemacht werden. Also dachte ich, verschluessele ich den Querystring uebergebe den verschluesselten String als eine Variable der Zieldatei:
header("Location: xyz.php?var1=xlsmdlfjqspdifoze2342323...")
Mein Problem ist aber, dass ich es nicht schaffe, anhand des entschluesselten Querystrings Variablen mit den korrekten Namen und Werten zu erzeugen. Hat jemand eine Idee?
Vielleicht gibt es auch noch einen anderen Weg, um einen verschluesselten Query-String zu erhalten.
Danke fuer jeden Hinweis,
Andreas.
Hi,
Mein Problem ist aber, dass ich es nicht schaffe, anhand des entschluesselten Querystrings Variablen mit den korrekten Namen und Werten zu erzeugen. Hat jemand eine Idee?
entweder nimmst Du den zur Verschlüsselung gehörenden Entschlüsselungs-Algorithmus (was eine Verschlüsselung impliziert, für die eine Umkehrung existiert), oder Du arbeitest mit Sessions.
Cheatah
Moin,
Hi,
Mein Problem ist aber, dass ich es nicht schaffe, anhand des entschluesselten Querystrings Variablen mit den korrekten Namen und Werten zu erzeugen. Hat jemand eine Idee?
entweder nimmst Du den zur Verschlüsselung gehörenden Entschlüsselungs-Algorithmus (was eine Verschlüsselung impliziert, für die eine Umkehrung existiert), oder Du arbeitest mit Sessions.
das Ergebnis einer Entschluesselung des query-strings ist doch immer ein string, oder? Rufe ich eine php-Datei auf und uebergebe einen Query-String (z.B. "vasistas.php?var1=wert1"), ist das Tolle, dass ich in der php Datei sofort eine Variable mit dem Namen "var1" und dem Wert "wert1" habe.
Wenn ich aber zuvor den querystring verschluesselt habe und ihn als Wert einer Variablen uebergebe und ihn in der php Datei anfangs entschluessele, bekomme ich einen String in der Form "var1=wert1".
Mein eigentliche Frage ist - sorry, wenn ich mich vielleicht etwas missverstaendlich ausgedrueckt haben sollte - wie ich anhand dieses Strings eine Variable mit dem Namen "var1" und dem Wert "wert1" erzeugen kann.
Gruss,
Andreas.
Cheatah
Hi,
das Ergebnis einer Entschluesselung des query-strings ist doch immer ein string, oder?
sollte man meinen, ja.
Rufe ich eine php-Datei auf und uebergebe einen Query-String (z.B. "vasistas.php?var1=wert1"), ist das Tolle, dass ich in der php Datei sofort eine Variable mit dem Namen "var1" und dem Wert "wert1" habe.
Nein, das ist eine Sicherheitslücke, die in neueren PHP-Versionen standardmäßig nicht geöffnet wurde. Die Werte stehen in $_GET['var1'] bzw. bei POST-Parametern in $_POST['var1'].
Mein eigentliche Frage ist - sorry, wenn ich mich vielleicht etwas missverstaendlich ausgedrueckt haben sollte - wie ich anhand dieses Strings eine Variable mit dem Namen "var1" und dem Wert "wert1" erzeugen kann.
Im Zweifel aufsplitten, aufsplitten, dekodieren, speichern. PHP traue ich zwar zu, dafür eine Funktion bereitzustellen, aber die kenne ich nicht - wenn es sie gibt, wirst Du in der Doku unter http://www.php.net/ fündig.
Cheatah
Hallo,
ich versuche gerade den Query-String in einer URL zu verschluesseln und am Anfang einer PHP-Datei zu entschluesseln.
das ist allerdings keine Verschlüsselung sondern nur ein Verstecken *g*
sieht sehr lustig aus
mit enbarcode, verschlüsselst du
mit debarcode entschlüsselst du
$s= var1=3&var2=5;
$s = enbarcode($s);
d.h. <a href="index.php?<?php echo $s;?>">link</a>
und auf der seite wo es hingehen soll
nimmst du dir die servervariablen her und genau die mit dem querystring
$s = debarcode($_Server["querystring"])
und dann steht dir in $s der querystring zur Verfügung, damit du dann noch auf die Variablen zugreifen kannst, müsstest du den string immer am & - Zeichen
trennen in ein neues array schrieben, dann jedes einzelne am = zeichen trennen und den vorderen Teil in eine $$var schreiben und dann = den wert (also das dahinter)
ist aber mehr spielerei, sieht aber äußerst lustig aus
////////////////////////// barcode in querystring ////////////////////////////
define('ZERO','l'); // lowercase L
define('ONE','|'); // pipe symbol -- I made sure this worked using phpinfo()
define('DELIM','i');
function enBarCode($inStr){
$bc='';
$x=0;
while($inStr[$x]!=''){ // characters in a string can be accessed like a zero-based array
$bc.=str_replace('1',ONE,str_replace('0',ZERO,decbin(ord($inStr[$x])-32))).DELIM;
$x++;
}
return substr($bc,0,-1);
}
function deBarCode($inBCStr){
$bcArray=explode(DELIM,$inBCStr);
$str='';
foreach($bcArray as $bcChar){ // foreach() is php4+ only; for php3 use list...each
$str.=chr(bindec(str_replace(ZERO,'0',str_replace(ONE,'1',$bcChar)))+32);
}
return $str;
}
////////////////////////////////////////////////////////////////////////
Danke fuer jeden Hinweis,
Andreas.
Vielen Dank,
Verstecken ist auch gut!
eine Frage noch...
Hallo,
ich versuche gerade den Query-String in einer URL zu verschluesseln und am Anfang einer PHP-Datei zu entschluesseln.
das ist allerdings keine Verschlüsselung sondern nur ein Verstecken *g*
sieht sehr lustig aus
mit enbarcode, verschlüsselst du
mit debarcode entschlüsselst du$s= var1=3&var2=5;
$s = enbarcode($s);
d.h. <a href="index.php?<?php echo $s;?>">link</a>und auf der seite wo es hingehen soll
nimmst du dir die servervariablen her und genau die mit dem querystring
$s = debarcode($_Server["querystring"])
und dann steht dir in $s der querystring zur Verfügung, damit du dann noch auf die Variablen zugreifen kannst, müsstest du den string immer am & - Zeichen
trennen in ein neues array schrieben, dann jedes einzelne am = zeichen trennen und den vorderen Teil in eine $$var schreiben und dann = den wert (also das dahinter)
... d.h. ich muss die Anzahl der uebergebenen Variablen wissen, um genuegend $$-Variablen bereitzuhalten. Ist das korrekt, oder kann ich dynamisch $$-Variablen erzeugen?
ist aber mehr spielerei, sieht aber äußerst lustig aus
////////////////////////// barcode in querystring ////////////////////////////
define('ZERO','l'); // lowercase L
define('ONE','|'); // pipe symbol -- I made sure this worked using phpinfo()
define('DELIM','i');function enBarCode($inStr){
$bc='';
$x=0;
while($inStr[$x]!=''){ // characters in a string can be accessed like a zero-based array
$bc.=str_replace('1',ONE,str_replace('0',ZERO,decbin(ord($inStr[$x])-32))).DELIM;
$x++;
}
return substr($bc,0,-1);
}function deBarCode($inBCStr){
$bcArray=explode(DELIM,$inBCStr);
$str='';
foreach($bcArray as $bcChar){ // foreach() is php4+ only; for php3 use list...each
$str.=chr(bindec(str_replace(ZERO,'0',str_replace(ONE,'1',$bcChar)))+32);
}
return $str;
}////////////////////////////////////////////////////////////////////////
Danke fuer jeden Hinweis,
Andreas.
Vielen Dank,
Verstecken ist auch gut!
eine Frage noch...
... d.h. ich muss die Anzahl der uebergebenen Variablen wissen, um genuegend $$-Variablen bereitzuhalten. Ist das korrekt, oder kann ich dynamisch $$-Variablen erzeugen?
dynamisch geht!
$s = debarcode($_Server["query_string"]) //entschlüsseln
$werte = explode("&", $s); //trennen am &-Zeichen
for($i=0; $i<count($werte); $i++) { //for-schleife für jeden wert
$var = explode("=",$werte[$i]); //am und-zeichen trennen
${$var[0]} = $var[1]; // ersten wert ls variablennamen deklarieren und zweiten wert zuweisen
}
das ganze würde logischerweise auch mit deinem Verfahren funktionieren
Dir ging es ja eigentlich auch nur um das aufsplitten der daten und sie wieder als Variablen verfügbar zu machen, oder?
danach sind deine Variablen wieder mit var1 usw ansprechbar...
hoffe ich *g*
ich hoffe ich habe nichts übersehen
hope it helps
Danke fuer jeden Hinweis,
Andreas.
Vielen Dank,
Verstecken ist auch gut!
eine Frage noch...... d.h. ich muss die Anzahl der uebergebenen Variablen wissen, um genuegend $$-Variablen bereitzuhalten. Ist das korrekt, oder kann ich dynamisch $$-Variablen erzeugen?
dynamisch geht!$s = debarcode($_Server["query_string"]) //entschlüsseln
$werte = explode("&", $s); //trennen am &-Zeichen
for($i=0; $i<count($werte); $i++) { //for-schleife für jeden wert
$var = explode("=",$werte[$i]); //am und-zeichen trennen
${$var[0]} = $var[1]; // ersten wert ls variablennamen deklarieren und zweiten wert zuweisen
genau die Zeile habe ich gesucht. Cool, sehr cool!! Vielen Dank fuer die Muehe.
}
das ganze würde logischerweise auch mit deinem Verfahren funktionieren
Dir ging es ja eigentlich auch nur um das aufsplitten der daten und sie wieder als Variablen verfügbar zu machen, oder?danach sind deine Variablen wieder mit var1 usw ansprechbar...
hoffe ich *g*
ich hoffe ich habe nichts übersehenhope it helps
Danke fuer jeden Hinweis,
Andreas.
Vielen Dank,
ich hoffe du guckst nochmal hierher
wie verschluesselst du überhaupt, ich meine, wann rufst du das auf
bei jedem einzelnen link oder hast du irgendwie ne andere Variante den Querystring zu verschlüsseln
es würde ja ganz schön viel Arbeit machen, jeden einzeln link so umzuschreiben???
danke romy
Moin,
ich verschluessele nur den Querystrings, wenn ich einen redirect mache, das kommt nicht zu oft vor. Sonstige Formulardaten werden per POST ueber eine SSL-Verbindung sicher und nicht sichtbar uebertragen.
Fuer die Verschluesselung habe ich jetzt eine php-Datei querycrypt.php geschrieben, die ich sowohl auf der Verschluesselungsseite als auch der Entschluesselungsseite includiere. Die Datei enthaelt eine Funktion encryptQuery($query). Die rufe ich auf und uebergebe ihr den kompletten Query-String.
Zurueck kommt die verschluesselte Version, die ich der Variablen $x zuweise und der Zieldatei mit auf den Weg gebe.
In der Zieldatei ist querycrypt.php auch includiert. Zweiter Teil der querycrypt.php ist eine if-Abfrage à la
if($x)
{
decrypt...
}
in der if-Schleife werden dann die einzelnen Variablen erstellt. Eleganter waere eine extra Funktion fuer die Entschluesselung gewesen, aber ich wusste keine Moeglichkeit, wie ich in der Funktion erstellte Variablen global nutzbar machen koennte. Vielleicht hast du da zufaellig auch noch eine Idee :)
Habe ich deine Frage beantwortet? Wenn nicht, sag Bescheid,
Gruss,
Andreas.
Vielen Dank,
ich hoffe du guckst nochmal hierher
wie verschluesselst du überhaupt, ich meine, wann rufst du das auf
bei jedem einzelnen link oder hast du irgendwie ne andere Variante den Querystring zu verschlüsseln
es würde ja ganz schön viel Arbeit machen, jeden einzeln link so umzuschreiben???danke romy
Hi,
Eleganter waere eine extra Funktion fuer die Entschluesselung gewesen, aber ich wusste keine Moeglichkeit, wie ich in der Funktion erstellte Variablen global nutzbar machen koennte. Vielleicht hast du da zufaellig auch noch eine Idee :)
Funktionen können Werte zurückgeben. Von der Verwendung von global ist nach Kräften abzuraten; dies ist höchstens sinnvoll, um Default-Variablen wie $_GET bekantn zu machen, aber nicht um den globalen Scope zu manipulieren.
Cheatah
ja, du hast recht.
Ich werde mich mit der if-Schleife begnuegen. Aber eine in einer Funktion erstellten Variable duerfte noch nicht mal mit global ausserhalb der Funktion sichtbar gemacht werden koennen. Korrekt?
Andreas.
Hi,
Eleganter waere eine extra Funktion fuer die Entschluesselung gewesen, aber ich wusste keine Moeglichkeit, wie ich in der Funktion erstellte Variablen global nutzbar machen koennte. Vielleicht hast du da zufaellig auch noch eine Idee :)
Funktionen können Werte zurückgeben. Von der Verwendung von global ist nach Kräften abzuraten; dies ist höchstens sinnvoll, um Default-Variablen wie $_GET bekantn zu machen, aber nicht um den globalen Scope zu manipulieren.
Cheatah
Moin,
guten Morgen
Habe ich deine Frage beantwortet? Wenn nicht, sag Bescheid,
ja genau dass wollte ich wissen, es wäre halt viel Arbeit, wenn man (nur der Schönheit halber) sämtliche links, redirekts usw. verschlüsseln wollte
Damit kann ich mich glaube ich aber abfinden
in der if-Schleife werden dann die einzelnen Variablen erstellt. Eleganter waere eine extra Funktion fuer die Entschluesselung gewesen, aber ich wusste keine Moeglichkeit, wie ich in der Funktion erstellte Variablen global nutzbar machen koennte. Vielleicht hast du da zufaellig auch noch eine Idee :)
ja, dass ist halt echt problametatisch, weil man nur einen Wert zurückgeben kann in einer Funktion oder halt ein array, was aber den Hund in den Schwanz beisst!
global würde ich sie nicht nutzen, ich denke, dass es da komplikationen geben könnte!
Nun ja, irgendwie fällt mir nichts passendes ein ;)
liebe Grüsse
romy
Gruss,
Andreas.