PHP XML in DB reinschreiben

Ind0r

Lieutenant
Registriert
März 2008
Beiträge
585
Servus zusammen,

ich stehe zurzeit vor einem Problem, und zwar soll per Input- Text Feld, XML
Code in die DB rein geschrieben werden. So weit so gut ich habe eine sogenannte "prepareInput" Funktion die es verhindert sql Injektion zu ermöglichen.
Nun hab ich das Problem das der XML Code in die DB reingeschrieben wird aber leider escapt er logischerweise alles, damit es keinen SQL synatx Error gibt. Nun wollte ich euch fragen ob Ihr vll. eine php Funktion kennt die den XML Code korrekt in die DB schreibt also ohne escapen.


Dank.

Gruß,

Mridul
 
Zuletzt bearbeitet:
Du würdest doch komplett die Sicherheit aushebeln wenn du doch den Code in die DB schreibst.
Wozu das Ganze?
 
also ich würde sowas machen::

PHP:
for($i=1;$k<=5;$i++){
 echo"bla";
}
 
falls sie keine gescheite fragen haben dann bitte selber weiter schweigen und selber grübeln.
so ne duu***e frage eyyy.des schaffft doch sogar meine kleine sis
 
Es gibt keine dummen Fragen, sondern nur dumme Antworten. Also ich lese hier so einiges was unter diese Kategorie fällt...

Aber zurück zum Thema:
Hast du eine Tabelle die ungefähr so aufgebaut ist:

Code:
Tabelle XMLINPUT
(
  XMLINPUT_ID INTEGER, -- nur ein Identifikator, AutoIncrement
  XMLCODE VARCHAR(8000) -- wie der Name schon sagt, enthält diese den XML Code
)

... und dann versuchst du ein INSERT ala

Code:
INSERT INTO XMLINPUT(XMLCODE) VALUES('<XML><Tag1>Zorro</Tag1></XML>')

Hab ich das jetzt so richtig verstanden oder liege ich falsch?

Schau mal da nach: http://www.php.net/manual/en/mysqli-stmt.bind-param.php

Da werden Bindvariablen verwendet, statt das Statement mit Literals zu füttern. Das würde ich immer den Literals vorziehen, weil dann keine "SQL Injection verhindernde" Pseudofunktion aufgerufen werden muss, die meist eh mehr Fehler als Funktion hat und dennoch überwunden werden kann. Bindvariablen sind die sichere Alternative zu Literals.
 
Zuletzt bearbeitet:
Ehrlich gesagt verstehe ich das Problem gar nicht. Oder besser gesagt ich "sehe" kein Problem.

Was unterscheidet denn ein XML-Dokument von jeder anderen Art von String, den man in die DB schreiben will? Genau: Gar nichts.

Du haust das Ding einfach ganz gewohnt durch die mysql_real_escape_string-Funktion und fertig. Noch besser wäre es natürlich PDO zu verwenden.
 
sehe da auch garkein problem Oo
nach mysql_real_escape steht das zeug quasi im original drin und kann jederzeit problemlos ausgelesen werden
 
Jo das Problem ist einfach nur die falsche Verwendung der Escapefunktion. So ein selbst geschriebenes Escaping macht nunmal solche Probleme, mysql_real_escape_string ist das Mittel der Wahl.
Alternativ könnte man das übrigens auch (wenns größere XMLs sind und man sie nicht Durchsuchen will) per gzip komprimieren (und dann evtl. base64encoden).
 
Zurück
Oben