zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden content aus der db - was tun mit php??

Antwort
 
LinkBack Themen-Optionen Ansicht
  #11 (permalink)  
Alt 22.05.2014, 03:34
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Das ist im Grunde dasselbe wie beim Escaping syntaktisch relevanter Zeichen in SQL-Queries. Du hast in einer PHP-Variablen $x den Inhalt Hallo"Welt stehen. Den willst du in eine Query einfügen:

PHP-Code:
$query 'SELECT col1 FROM table WHERE col2 = "' $x '"'
Das ergibt dann diese SQL-Query:

Code:
SELECT col1 FROM table WHERE col2 = "Hallo"Welt"
Die ist syntaktisch falsch, weil das Datenbanksystem bereits nach "Hallo" den String für beendet hält. Mit dem folgenden Welt" weiß es dann nichts mehr anzufangen. In diesem Fall führt das nur zu einem Fehler, aber statt Welt" könnten da eben auch Dinge stehen, die syntaktisch für das Datenbanksystem Sinn ergeben und somit die Logik deiner Query unerwünscht verändern. Das ist eben die klassische SQL-Injection, mit der ein Angreifer Dinge auslösen kann, die er nicht auslösen können sollte.

Allgemein bezeichnet man so was als Kontextwechsel. Der Inhalt einer PHP-Variablen wird in einen Kontext (hier den SQL-Query-String) eingefügt, der über eigene syntaktische Regeln verfügt.

Das ist auch bei unter anderem HTML der Fall, denn auch in HTML existieren syntaktisch relevante Zeichen (konkret <, >, ", ' und &). Wenn du den Inhalt einer PHP-Variablen in HTML-Code einfügst, musst du sicherstellen, dass diese Zeichen passend behandelt (escapet) werden. Ansonsten können dir Leute beispielsweise JavaScript-Code in deine Seite reinbasteln:

PHP-Code:
$data '<script>alert("Hallo");</script>';

echo 
'<div>' $data '</div>'
Damit lässt sich ein Haufen Unsinn anstellen. Es ist beispielsweise möglich, Sessions zu übernehmen:

- Session hijacking - Wikipedia, the free encyclopedia

Der wesentliche Aspekt sollte aber sein, dass es zu korrekter Programmierung gehört, Kontextwechsel richtig durchzuführen. Beim Wechsel von PHP nach HTML dient etwa die Funktion htmlspecialchars dazu.

PHP-Code:
$data '<script>alert("Hallo");</script>';

echo 
'<div>' htmlspecialchars($dataENT_QUOTES'UTF-8') . '</div>'
Code:
<div>&lt;script&gt;alert(&quot;Hallo&quot;);&lt;/script&gt;</div>
Die syntaktisch relevanten Zeichen für HTML sind nun passend escapet und der Client betrachtet sie als reinen Inhalt.
Mit Zitat antworten
Sponsored Links
  #12 (permalink)  
Alt 22.05.2014, 04:01
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mermshaus Beitrag anzeigen
Ist hier wohl eher ein Randaspekt, aber informiere dich auch mal zum Thema XSS, wenn du das nicht schon getan hast. Zumindest in #6 fehlt mir die Behandlung von Kontextwechseln.

- Artikel:Kontextwechsel
sorry ich sehe jetzt das problem nicht? ich habe doch den kontext beachtet. ich habe halt nur nicht mit \ escaped. ich verfahre eher so statt mit \ zu escapen unterbreche ich den string und führe ihn nach der variablen fort.

das dein erstes beispiel in deinem letzten post syntaktisch falsch ist weil natürlich bei anführungszeichen der string als beendet gilt, wenn nicht excaped oder irgendwie unterbrochen und verknüpft wurde, aber das habe ich doch auch nirgends so gemacht? wenn doch, dann ist das ein tippfehler.

usereingaben, die in die datenbank gehen filter ich mit htmlspecialchar und mysql_real_escape_string.

wenn ich aber intern werte übergebe, also die nicht vom user kommen, dann brauche ich nicht mit htmlspecialchars und mysql_real_escape_string filtern.

dann muss ich lediglich entweder mit \ escapen oder string unterbrechen, dann vari, und dann string fortsetzen. wie mans macht is ja egal, kann man sich aussuchen und ich arbeite halt mit string unterbrechungen.

vielleicht habe ich dich nicht richtig verstanden, aber ich weiß jetzt nicht wo das problem dabei ist?

gruß
knuff

Geändert von knuff (22.05.2014 um 04:09 Uhr)
Mit Zitat antworten
Sponsored Links
  #13 (permalink)  
Alt 22.05.2014, 04:36
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Habe ich eigentlich in #9 geschrieben. Ich sehe in #6 keine Behandlung von Kontextwechseln.

Zitat:
sorry ich sehe jetzt das problem nicht? ich habe doch den kontext beachtet. ich habe halt nur nicht mit \ escaped. ich verfahre eher so statt mit \ zu escapen unterbreche ich den string und führe ihn nach der variablen fort.
Für HTML bringt Backslash-Escaping auch nichts. Das existiert in HTML nicht.

Zitat:
das dein erstes beispiel in deinem letzten post syntaktisch falsch ist weil natürlich bei anführungszeichen der string als beendet gilt, wenn nicht excaped oder irgendwie unterbrochen und verknüpft wurde, aber das habe ich doch auch nirgends so gemacht? wenn doch, dann ist das ein tippfehler.
Das sollte lediglich ein Beispiel sein, was ein Kontextwechsel ist und warum es wichtig ist, Kontextwechsel passend zu behandeln.

Zitat:
usereingaben, die in die datenbank gehen filter ich mit htmlspecialchar und mysql_real_escape_string.
Das ist grundsätzlich schon mal gut, weil dir bewusst zu sein scheint, dass du Daten escapen musst, wenn du sie in HTML einsetzt. Das war in #6 nicht zu erkennen.

Andererseits setzt du htmlspecialchars an der falschen Stelle ein. In der Datenbank sollten die Originaldaten landen und nicht Daten, die für die Ausgabe in HTML-Code aufbereitet sind. Ansonsten müsstest du zum Beispiel das HTML-Escaping rückgängig machen, wenn du die Daten in einem Nicht-HTML-Kontext nutzen willst.

Zitat:
dann muss ich lediglich entweder mit \ escapen oder string unterbrechen, dann vari, und dann string fortsetzen. wie mans macht is ja egal, kann man sich aussuchen und ich arbeite halt mit string unterbrechungen.
Mir ist unklar, was du mit dem Backslash an der Stelle erreichen willst, aber um die String-Konkatenation geht es mir nicht. Das kann man so machen.
Mit Zitat antworten
  #14 (permalink)  
Alt 22.05.2014, 17:10
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

in der datenbank landen die originaldaten, aber natürlich gefiltert oder soll ich mir schadcode in die db holen?

die daten die ich an das form übergebe kommen vom register.php script, dort werden die daten eingelesen und für die db gefiltert und eben bei erneuten aufruf des reg forms, falls falsche daten eingegeben wurden, wieder an das form übergeben, also natürlich nur die daten die korrekt eingegeben wurden, werden wieder ans form zurückgegeben, daher brauche ich bei der übergabe ans form nicht mehr filtern, weil dies alles schon in der register.php passiert ist.

und die daten werden nicht für die ausgabe in html code aufbereitet. die daten werden einfach von der register.php für den eintrag in die db gefiltert und wiederum wenn nötig an das formular zurückgegeben.

woher weißt du ob ich htmlspecialchars an der falschen stellen einsetze? das taucht in den code teilen die ich gepostet habe gar nicht auf?

und sorry aber ich versteh beim besten willen nicht was dich an meinen kontextwechseln stört.

gruß
knuff

Geändert von knuff (22.05.2014 um 17:14 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 22.05.2014, 20:36
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

In #6 steht zum Beispiel:

PHP-Code:
<input … value="<?php echo $ruser?>" />
Dort ist keine korrekte Behandlung des Kontextwechsels von PHP nach HTML zu erkennen. Die sähe beispielsweise so aus:

PHP-Code:
<input … value="<?php echo htmlspecialchars($ruserENT_QUOTES'UTF-8'); ?>" />
Das meinte ich. Da haben wir uns wohl missverstanden.

Zitat:
Zitat von knuff
in der datenbank landen die originaldaten, aber natürlich gefiltert oder soll ich mir schadcode in die db holen?
Du musst lediglich den entsprechenden Kontextwechsel (wenn die Daten in HTML oder PDF oder TXT oder CSV oder eine Mail oder ein Bild oder… eingesetzt werden) an der Stelle passend behandeln, an der er stattfindet. Und eben nicht schon vorher, wenn du noch gar nicht weißt, auf welche Weise du die Daten ausgeben wirst.

Zitat:
und die daten werden nicht für die ausgabe in html code aufbereitet. die daten werden einfach von der register.php für den eintrag in die db gefiltert und wiederum wenn nötig an das formular zurückgegeben.
Wenn du htmlspecialchars anwendest, bevor du die Daten in die Datenbank schreibst, bereitest du sie für die Ausgabe im HTML-Kontext vor.

Zitat:
woher weißt du ob ich htmlspecialchars an der falschen stellen einsetze? das taucht in den code teilen die ich gepostet habe gar nicht auf?
Also… Ich habe gepostet, weil es nicht auftauchte. Dann hast du mir gesagt, wann du htmlspecialchars aufrufst (vor dem Eintragen der Daten in die Datenbank). Das habe ich dann als die falsche Stelle bezeichnet, weil die passende Behandlung von Kontextwechseln Sache der Ausgabe ist, da erst dort bekannt ist, in welchem Format die Daten ausgegeben werden sollen.
Mit Zitat antworten
  #16 (permalink)  
Alt 23.05.2014, 00:22
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von mermshaus Beitrag anzeigen
Wenn du htmlspecialchars anwendest, bevor du die Daten in die Datenbank schreibst, bereitest du sie für die Ausgabe im HTML-Kontext vor.
also bei diesem punkt verstehen wir uns wohl grad gar nicht. ich bereite die daten mit htmlspecialchars nicht für die ausgabe in html vor. ganz im gegenteil! ich bereite die daten mit htmlspecialchars für die datenbank vor, weil ich ja auf keinen fall html in meiner datenbank haben will. oder willst du html in deiner datenbank?

die praktischerweise schon gefilterten daten nutze ich für rückgabe an das html form, sofern nötig.

gruß
knuff
Mit Zitat antworten
  #17 (permalink)  
Alt 23.05.2014, 00:35
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von knuff Beitrag anzeigen
oder willst du html in deiner datenbank?
Ja, eigentlich schon, was spricht dagegen?
Du musst deinen Text ja auch formatieren und wenn du ihn im Kontext einer Internetseite darstellen willst, müssen die HTML Tags auch in die Datenbank. Das ist so usus.

Nachtrag: Das gilt natürlich nicht für Daten (im gegensatz zu Texten), da kommt es auf den Kontext an. Üblicherweise enthalten Daten kein HTML, aber um Daten zu validieren ist htmlspecialchars die falsche Funktion. HTML Entities will man nicht in der Datenbank.

Geändert von protonenbeschleuniger (23.05.2014 um 00:39 Uhr)
Mit Zitat antworten
  #18 (permalink)  
Alt 23.05.2014, 01:17
Benutzer
neuer user
Thread-Ersteller
 
Registriert seit: 03.05.2014
Beiträge: 72
knuff befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von protonenbeschleuniger Beitrag anzeigen
Ja, eigentlich schon, was spricht dagegen?
Du musst deinen Text ja auch formatieren und wenn du ihn im Kontext einer Internetseite darstellen willst, müssen die HTML Tags auch in die Datenbank. Das ist so usus.

Nachtrag: Das gilt natürlich nicht für Daten (im gegensatz zu Texten), da kommt es auf den Kontext an. Üblicherweise enthalten Daten kein HTML, aber um Daten zu validieren ist htmlspecialchars die falsche Funktion. HTML Entities will man nicht in der Datenbank.

jetzt weiß ich warum wir uns mißverstanden haben. ich habe es die ganze zeit so verstanden, das du dich auf das formular beziehst in dem user daten eingelesen werden und es war für mich ein rätsel dass du es nicht für nötig hielst diese daten zu filtern. aber du hast du hast dich auf content in der db bezogen. oh man haben wir lange aneinander vorbei geredet.

jetzt verstehe ich dich. aber nun musst du mir noch sagen warum htmlspecialchars die falsche funktion ist und welche denn die richtige ist?

gruß
knuff
Mit Zitat antworten
  #19 (permalink)  
Alt 23.05.2014, 02:46
Erfahrener Benutzer
XHTMLforum-Mitglied
 
Registriert seit: 13.07.2006
Beiträge: 745
mermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblickmermshaus ist ein wunderbarer Anblick
Standard

Zitat:
also bei diesem punkt verstehen wir uns wohl grad gar nicht. ich bereite die daten mit htmlspecialchars nicht für die ausgabe in html vor. ganz im gegenteil! ich bereite die daten mit htmlspecialchars für die datenbank vor, weil ich ja auf keinen fall html in meiner datenbank haben will. oder willst du html in deiner datenbank?
1 &lt; 2 ist viel mehr HTML als 1 < 2. Das &lt; wird nämlich nur bei Ausgabe als HTML passend als < dargestellt. Also: Doch, du speicherst die Daten gezielt auf eine Weise, die nur bei Ausgabe als HTML Sinn ergibt.

Geändert von mermshaus (23.05.2014 um 02:50 Uhr)
Mit Zitat antworten
Sponsored Links
  #20 (permalink)  
Alt 23.05.2014, 09:49
Benutzerbild von protonenbeschleuniger
Verbesserer
XHTMLforum-Kenner
 
Registriert seit: 06.09.2007
Beiträge: 4.977
protonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblickprotonenbeschleuniger ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von knuff Beitrag anzeigen
jetzt weiß ich warum wir uns mißverstanden haben. ich habe es die ganze zeit so verstanden, das du dich auf das formular beziehst in dem user daten eingelesen werden und es war für mich ein rätsel dass du es nicht für nötig hielst diese daten zu filtern. aber du hast du hast dich auf content in der db bezogen. oh man haben wir lange aneinander vorbei geredet.
Hm?
Ich habe mich auf beides bezogen. Je nachdem was du gesagt hast.

Du bist hier im Thread mehrmals hin und her geswitched. Anfänglich ging es um PHP in der Datenbank, das gehört da nicht hin. Auch ein HTML Forumlar gehört da nicht hin. Daten gehören natürlich in eine Datenbank und müssen je nach Kontext entsprechend gefiltert werden. Da wir bisher nur deine Ausgabe gesehen haben, hat mermshaus dich darauf hingewiesen, dass du den Kontextwechsel nicht beachtest. Daher hat auch niemand gesagt, dass du Daten nicht filtern sollst. Im gegenteil, du musst je nach Kontext deine Daten filtern. Dazu gab es auch schon Links.

htmlspecialchars ist die falsche Funktion um Daten für die Datenbank zu validieren, sie ist für die Ausgabe zuständig, wenn du kein HTML "ausführen" möchtest. z.b. in Formulafeldern oder HTML Attribute.
Manche verwenden sie als HTML Filter bei Usereingaben von aussen. Das hat aber Nachteile, weil dadurch auch Sonderzeichen und evtl. Umlaute unnötig umgewandelt werden und macht die Sache schwierig, wenn du dem User HTML teilweise erlauben möchtest.

Daher gibt es keine allgemeingültige Eingabevalidierung, was du aber in einer Datenbank immer machen musst, den Kontextwechsel beachten und schädliche Zeichen maskieren. Das steht aber alles genau in dem bereits verlinkten Artikel.
Mit Zitat antworten
Sponsored Links
Antwort


Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Probleme mit meinem content wrapper d3x CSS 10 13.10.2010 16:00
Tabellen als Div Container SpecialFighter (X)HTML 7 12.10.2010 17:40
Seite wird nicht richtig angezeigt chrissie65 CSS 9 27.06.2010 12:11
Dateien auslagern - Include und PHP ArcVieh Serveradministration und serverseitige Scripte 17 27.03.2008 18:09
Kleines Problem mit div - float:left RollingStones CSS 1 30.08.2007 18:32


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:35 Uhr.