Url variable funktioniert nicht richtig

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • onemorenerd
    replied
    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.
    Last edited by onemorenerd; 21-09-2009, 12:33.

    Leave a comment:


  • AmicaNoctis
    replied
    Hallo,

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

    Originally posted by ghostgambler View Post
    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

    Leave a comment:


  • ghostgambler
    replied
    Originally posted by combie View Post
    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).

    Originally posted by AmicaNoctis View Post
    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>

    Leave a comment:


  • AmicaNoctis
    replied
    Originally posted by ghostgambler View Post
    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

    Leave a comment:


  • combie
    replied
    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:


  • ghostgambler
    replied
    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:


  • combie
    replied
    Originally posted by ghostgambler View Post
    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.

    Leave a comment:


  • ghostgambler
    replied
    Originally posted by onemorenerd View Post
    Nicht nur ggf. sondern unbedingt! Die zwei Zeilen da oben sind nämlich eine Einladung für XSS.
    Also hier dachte ich ja schon

    Originally posted by AmicaNoctis View Post
    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?

    Leave a comment:


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

    Leave a comment:


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

    Leave a comment:


  • Kropff
    replied
    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:


  • Raket
    replied
    Super besten Dank. Funktioniert wunderbar

    Gruß

    Leave a comment:


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

    Peter

    Leave a comment:


  • Raket
    started a topic 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
Working...
X