|
|||
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:
Code:
SELECT col1 FROM table WHERE col2 = "Hallo"Welt" 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:
- 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:
Code:
<div><script>alert("Hallo");</script></div> |
Sponsored Links |
|
|||
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. 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) |
Sponsored Links |
|
||||
Habe ich eigentlich in #9 geschrieben. Ich sehe in #6 keine Behandlung von Kontextwechseln.
Zitat:
Zitat:
Zitat:
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:
|
|
|||
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) |
|
|||
In #6 steht zum Beispiel:
PHP-Code:
PHP-Code:
Zitat:
Zitat:
Zitat:
|
|
|||
Zitat:
die praktischerweise schon gefilterten daten nutze ich für rückgabe an das html form, sofern nötig. gruß knuff |
|
|||
Zitat:
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 |
|
|||
Zitat:
Geändert von mermshaus (23.05.2014 um 02:50 Uhr) |
Sponsored Links |
|
||||
Zitat:
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. |
Sponsored Links |
|
|
Ä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 |