AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PHP: Problem mit serialize() und unserialize()
Thema durchsuchen
Ansicht
Themen-Optionen

PHP: Problem mit serialize() und unserialize()

Ein Thema von alcaeus · begonnen am 22. Jul 2005 · letzter Beitrag vom 22. Jul 2005
 
Panthrax

Registriert seit: 18. Feb 2005
286 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: PHP: Problem mit serialize() und unserialize()

  Alt 22. Jul 2005, 15:00
Salut.

In der Tat; Unserialize verhält sich schon unerwartet, aber man kann es nachvollziehen. (Übrigens ist es in PHP 5 dasselbe wie in PHP 4.) Aber das Paar Serialize und Unserialize versteht seine Rückgaben als gegenseitigen Parameter. Die Problematik ist, die richtigen Escapesequenzen für die SQL-Statements zu generieren.

Hier der Vorschlag "Text entschärfen":

Code:
$StringWithQuotes = 'Ich zitiere: "Ich zitiere: \'...\'"';

// Text entschärfen
$StringWithQuotes = serialize(base64_encode($StringWithQuotes));

print($StringWithQuotes); // testhalber ausgeben

// ab damit in die Datenbank
mysql_connect('localhost','user','password');
mysql_select_db('test');
mysql_query('INSERT INTO alcaeus (TextColumn) VALUES (\''.$StringWithQuotes.'\')');

// und wieder raus aus der Datenbank
$L = mysql_query('SELECT * FROM alcaeus');
while($Row = mysql_fetch_row($L))
{
   print_r($Row);
   $StringWithQuotes = $Row[1];
   print($StringWithQuotes);
   // Text scharf machen
   print(base64_decode(unserialize($StringWithQuotes)));
   print('
');
}
Der wesentliche Punkt ist: Der Text enthält Zeichen bzw. Zeichenkombinationen die Nebeneffekte haben. Es würde genügen diese zu maskieren. Im Vorschlag werden rigeros alle maskiert; mit Base64. Ein anderer Algorithmus, der die Zeichen auf eine Zeichenmenge abbildet, bei der besagte Zeichen bzw. Zeichenkombinationen nicht auftreten würde den selben Zweck erfüllen. Natürlich muss die Abbildung eineindeutig sein.

Alternativ könnte man unter Berücksichtigung des MySQL-Dialekts '`' (accent grave, backtick) als Delimiter verwenden. Also: `Ich zitiere "Ich zintiere '...'"`. Letzteres ist spekulativ. Ich habe es nicht getestet.

Ich hoffe geholfen zu haben.

Panthrax.

P.S.: Ich halte den Missbrauch von Akzenten als Stringdelimiter für eine der schwachsinnigsten Erfindungen. Solch eine Erfindung kann nur aus der anglophonen Welt kommen, wo man wahrscheinlich nicht einmal weiß das "Backtick" und "Fronttick" eigentlich "accent grave" und "accent acute" heißen, um als selbige eingesetzt zu werden. Es gibt und gab genug andere Delimiter und Delimitersysteme die sich bereits etabliert hatten und es noch immer uneingeschränkt sind. Da lob' ich mir Delphi...
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz