Wenn er ohnehin mit preg_match() oder preg_replace() rangeht, wie es Kropff vorgeschlagen hat, sollte er nicht nur das Vorkommen von "http://" prüfen, sondern die ganze URL - in Anlehnung an parse_url(). Mit dem richtigen Pattern ist dann sichergestellt, dass wirklich nur eine URL vorliegt, mit oder ohne "http://", und kein XSS-Versuch.
Passende Pattern findet man im Netz.
Übrigens würde ich die Prüfung bereits bei der Eingabe, also vor dem Speichern machen, statt bei jeder Ausgabe erneut.
Url variable funktioniert nicht richtig
Collapse
X
-
Hallo,
ok, htmlspecialchars habe ich nicht erwähnt, insofern gebe ich dir Recht.
Das stimmt so nicht ganz, denn in diesem Sonderfall geht es ja um Links und da ist auch ein javascript: URL ein sehr wohl funktionsfähiger Schadcode.Originally posted by ghostgambler View PostEine Website, die ihre Ausgaben mit htmlspecialchars behandelt, liefert auch keinen funktionsfähigen Schadcode aus
Hier die korrigierte Variante:
Gruß,PHP Code:$variable = preg_replace('!^(http(s)?://)?!', 'http\2://', htmlspecialchars($variable));
Amica
Leave a comment:
-
Eine Website, die ihre Ausgaben mit htmlspecialchars behandelt, liefert auch keinen funktionsfähigen Schadcode aus, sondern wenn man es so betrachten will, höchstens ungefährlichen Schadcode (den auch ein Virenscanner beinhalten muss um etwas zu finden).Originally posted by combie View PostVirenscanner Hersteller liefern funktionsfähigen Viruscode aus?
Es ist nirgends die Rede von Akzeptieren vs. Nicht-Akzeptieren, und es wird auch in keinem Code deutlich. Es geht hier lediglich um die Problematik, dass mangelhafte Eingaben eines Benutzers zu falschen Verlinkungen auf der eigenen Website führen, und wie man diese korrigieren kann.Originally posted by AmicaNoctis View Postna weil jemand statt eines echten URL sowas wiedort reinschreiben könnte. Mit Kropffs Variante würde immer nochCode:javascript:böseFunktion()
akzeptiert werden.Code:javascript:böseFunktion();var dummy="http://"
Kropffs Variante ist in der Hinsicht tatsächlich falsch (wenn auch einfach korrigierbar).
Vor XSS-Attacken schützen jedoch beide Varianten nicht. Bsp:
Code:<a href="[B]http://example.net"/><script>alert("hier");</script> <a href="[/B]">text</a>
Leave a comment:
-
Hallo,Originally posted by ghostgambler View PostAlso hier dachte ich ja schon
Hier dachte ich dann aber schon
Kann mir mal bitte jemand erklären, wieso ihr beide hier an XSS denkt?
na weil jemand statt eines echten URL sowas wiedort reinschreiben könnte. Mit Kropffs Variante würde immer nochCode:javascript:böseFunktion()
akzeptiert werden.Code:javascript:böseFunktion();var dummy="http://"
Gruß,
Amica
Leave a comment:
-
Virenscanner Hersteller liefern funktionsfähigen Viruscode aus?
Das glaube ich dir erstmal nicht.
Und wenn ein solcher infektions Weg nachgewiesen wird, kann der Hersteller doch schon mit Stress rechen...
Würde ich zumindest mal so vermuten.
Ein Wenig wird es auch wohl die Frage sein: Wer kann sich die besseren Anwälte und Gutachter leisten?
Leave a comment:
-
Interessante Sichtweise. Würde ein Virenscanner-Hersteller auch verurteilt, weil er Schadcode ausliefert?
Was genau verbessert preg_replace statt str_replace an der (Un-)Wirksamkeit einer möglichen XSS-Attacke?
Leave a comment:
-
Vermutlich weil diese (verstümmelte) Homepage url von einem User eingegeben wird. Auch wenn man evtl. vorhanden Schadcode per htmlentities() ungefährlich macht, wird er doch ausgeliefert.Originally posted by ghostgambler View PostKann mir mal bitte jemand erklären, wieso ihr beide hier an XSS denkt?
Kein normaler Richter wird dir glauben wenn du sagst:
Ja ich lieferte Schadcode aus. Dieser ist aber total ungefährlich.
Leave a comment:
-
Also hier dachte ich ja schonOriginally posted by onemorenerd View PostNicht nur ggf. sondern unbedingt! Die zwei Zeilen da oben sind nämlich eine Einladung für XSS.
Hier dachte ich dann aber schonOriginally posted by AmicaNoctis View Postich würde es gleich so machen, das ist kürzer, XSS-sicher und schließt auch gleich noch SSL mit ein:
Kann mir mal bitte jemand erklären, wieso ihr beide hier an XSS denkt?
Leave a comment:
-
Hallo,
ich würde es gleich so machen, das ist kürzer, XSS-sicher und schließt auch gleich noch SSL mit ein:
Gruß,PHP Code:$variable = preg_replace('!^(http(s)?://)?!', 'http\2://', $variable);
Amica
Leave a comment:
-
Nicht nur ggf. sondern unbedingt! Die zwei Zeilen da oben sind nämlich eine Einladung für XSS.
Leave a comment:
-
Ggf. solltest du eine korrekte Überprüfung der URL per preg_match durchführen. Sonst kann man jeden Blödsinn eingeben.
Peter
Leave a comment:
-
Einfsch überprüfen, ob http:// angegeben wurde. Wenn nicht setze es einfach davor:
PeterPHP Code:if (false === strpos ($variable, 'http://')) {
$variable = 'http://'.$variable;
}
Leave a comment:
-
Url variable funktioniert nicht richtig
Hallo zusammen!
Ich bin php Anfänger und versuche mich gerade daran, mit Hilfe von einigen Tutorials auf dieser Seite ein Gästebuch zu schreiben.
Soweit hat auch alles geklappt, ich habe allerdings ein Problem.
Wenn ich aus der Datenbank die Variable für die Homepage url auslese und der User nur "www.xyz.de" eingegeben hat, sieht die Ausgabe so aus ->
Natürlich funktioniert dieser Link dann nicht. Meine Frage ist jetzt wie ich es anstelle, dass der Link den ich da auslese, korrekt ausgegeben wird.Code:http://www.meineseite.de/gb/www.xyz.de
Das aus der Eingabe "www.xyz.de" automatisch ein Link gemacht wird, der dann "http://www.xyz.de" ist und somit korrekt geöffnet wird.
Ich habe momentan diesen Code:
funktioniert aber nicht xDCode:<a href='$variable'>Link</a>
Hab jetzt 2 Stunden mit googlen verbracht und irgendwie nichts passendes gefunden. Ich hoffe ihr versteht was ich meine und könnt mir weiterhelfen!
Gruß
RaketTags: None

Leave a comment: