| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

20-09-2009, 13:29
|
|
Raket
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 2
|
|
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 ->
Code:
http://www.meineseite.de/gb/www.xyz.de
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.
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:
Code:
<a href='$variable'>Link</a>
funktioniert aber nicht xD
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ß
Raket
|

20-09-2009, 13:36
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Einfsch überprüfen, ob http:// angegeben wurde. Wenn nicht setze es einfach davor:
PHP-Code:
if (false === strpos ($variable, 'http://')) { $variable = 'http://'.$variable; }
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

20-09-2009, 18:06
|
|
Raket
Registrierter Benutzer
|
|
Registriert seit: Sep 2009
Beiträge: 2
|
|
Super besten Dank. Funktioniert wunderbar
Gruß
|

20-09-2009, 19:15
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.310
|
|
Ggf. solltest du eine korrekte Überprüfung der URL per preg_match durchführen. Sonst kann man jeden Blödsinn eingeben.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|

21-09-2009, 01:14
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
Nicht nur ggf. sondern unbedingt! Die zwei Zeilen da oben sind nämlich eine Einladung für XSS.
|

21-09-2009, 02:30
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
ich würde es gleich so machen, das ist kürzer, XSS-sicher und schließt auch gleich noch SSL mit ein:
PHP-Code:
$variable = preg_replace('!^(http(s)?://)?!', 'http\2://', $variable);
Gruß,
Amica
|

21-09-2009, 08:35
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Zitat:
Zitat von onemorenerd
Nicht nur ggf. sondern unbedingt! Die zwei Zeilen da oben sind nämlich eine Einladung für XSS.
|
Also hier dachte ich ja schon
Zitat:
Zitat von AmicaNoctis
ich würde es gleich so machen, das ist kürzer, XSS-sicher und schließt auch gleich noch SSL mit ein:
|
Hier dachte ich dann aber schon
Kann mir mal bitte jemand erklären, wieso ihr beide hier an XSS denkt?
|

21-09-2009, 09:08
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
Zitat:
Zitat von ghostgambler
Kann mir mal bitte jemand erklären, wieso ihr beide hier an XSS denkt?
|
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.
Kein normaler Richter wird dir glauben wenn du sagst:
Zitat:
|
Ja ich lieferte Schadcode aus. Dieser ist aber total ungefährlich.
|
|

21-09-2009, 09:15
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
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?
|

21-09-2009, 09:43
|
|
combie
PHP Expert
|
|
Registriert seit: May 2006
Beiträge: 2.925
|
|
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?
|

21-09-2009, 10:32
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von ghostgambler
Also 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?
|
Hallo,
na weil jemand statt eines echten URL sowas wie
Code:
javascript:böseFunktion()
dort reinschreiben könnte. Mit Kropffs Variante würde immer noch
Code:
javascript:böseFunktion();var dummy="http://"
akzeptiert werden.
Gruß,
Amica
|

21-09-2009, 12:58
|
ghostgambler
Master 
|
|
Registriert seit: Jul 2004
Ort: DE - NRW
Beiträge: 4.620
|
|
Zitat:
Zitat von combie
Virenscanner Hersteller liefern funktionsfähigen Viruscode aus?
|
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).
Zitat:
Zitat von AmicaNoctis
na weil jemand statt eines echten URL sowas wie
Code:
javascript:böseFunktion()
dort reinschreiben könnte. Mit Kropffs Variante würde immer noch
Code:
javascript:böseFunktion();var dummy="http://"
akzeptiert werden.
|
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.
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="http://example.net"/><script>alert("hier");</script> <a href="">text</a>
|

21-09-2009, 13:26
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
ok, htmlspecialchars habe ich nicht erwähnt, insofern gebe ich dir Recht.
Zitat:
Zitat von ghostgambler
Eine Website, die ihre Ausgaben mit htmlspecialchars behandelt, liefert auch keinen funktionsfähigen Schadcode aus
|
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.
Hier die korrigierte Variante:
PHP-Code:
$variable = preg_replace('!^(http(s)?://)?!', 'http\2://', htmlspecialchars($variable));
Gruß,
Amica
|

21-09-2009, 13:30
|
 |
onemorenerd
 Moderator
|
|
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.481
|
|
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.
Geändert von onemorenerd (21-09-2009 um 13:33 Uhr)
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
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.
HTML-Code ist aus.
|
|
|
|
PHP News
|