Url variable funktioniert nicht richtig

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

  • 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

  • #2
    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

    Kommentar


    • #3
      Super besten Dank. Funktioniert wunderbar

      Gruß

      Kommentar


      • #4
        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

        Kommentar


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

          Kommentar


          • #6
            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
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              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?

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                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.
                Wir werden alle sterben

                Kommentar


                • #9
                  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?

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    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?
                    Wir werden alle sterben

                    Kommentar


                    • #11
                      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
                      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                      Super, danke!
                      [/COLOR]

                      Kommentar


                      • #12
                        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>

                        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                        Wie man Fragen richtig stellt

                        Kommentar


                        • #13
                          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
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #14
                            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, 13:33.

                            Kommentar

                            Lädt...
                            X