Url variable funktioniert nicht richtig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • onemorenerd
    antwortet
    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.
    Zuletzt geändert von onemorenerd; 21.09.2009, 12:33.

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Hallo,

    ok, htmlspecialchars habe ich nicht erwähnt, insofern gebe ich dir Recht.

    Zitat von ghostgambler Beitrag anzeigen
    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

    Einen Kommentar schreiben:


  • ghostgambler
    antwortet
    Zitat von combie Beitrag anzeigen
    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 von AmicaNoctis Beitrag anzeigen
    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="[B]http://example.net"/><script>alert("hier");</script> <a href="[/B]">text</a>

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    Zitat von ghostgambler Beitrag anzeigen
    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

    Einen Kommentar schreiben:


  • combie
    antwortet
    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?

    Einen Kommentar schreiben:


  • ghostgambler
    antwortet
    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?

    Einen Kommentar schreiben:


  • combie
    antwortet
    Zitat von ghostgambler Beitrag anzeigen
    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:
    Ja ich lieferte Schadcode aus. Dieser ist aber total ungefährlich.

    Einen Kommentar schreiben:


  • ghostgambler
    antwortet
    Zitat von onemorenerd Beitrag anzeigen
    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 von AmicaNoctis Beitrag anzeigen
    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?

    Einen Kommentar schreiben:


  • AmicaNoctis
    antwortet
    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

    Einen Kommentar schreiben:


  • onemorenerd
    antwortet
    Nicht nur ggf. sondern unbedingt! Die zwei Zeilen da oben sind nämlich eine Einladung für XSS.

    Einen Kommentar schreiben:


  • Kropff
    antwortet
    Ggf. solltest du eine korrekte Überprüfung der URL per preg_match durchführen. Sonst kann man jeden Blödsinn eingeben.

    Peter

    Einen Kommentar schreiben:


  • Raket
    antwortet
    Super besten Dank. Funktioniert wunderbar

    Gruß

    Einen Kommentar schreiben:


  • Kropff
    antwortet
    Einfsch überprüfen, ob http:// angegeben wurde. Wenn nicht setze es einfach davor:
    PHP-Code:
    if (false === strpos ($variable'http://')) {
      
    $variable 'http://'.$variable;

    Peter

    Einen Kommentar schreiben:


  • Raket
    hat ein Thema erstellt Url variable funktioniert nicht richtig.

    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
Lädt...
X