Raffi: Wie sollten Links überprüft werden?

Hallo Leute

ich arbeite gerade an einem CMS. Dort kann der Kunde selbst Hyperlinks erfassen. Damit er nicht irgend einen Unsinn eingeben kann, möchte ich diese Links überprüfen.

Auf was alles soll ich Links prüfen?

z.B. ein http:// voraus
ein mailto: voraus
hmmm....vielleicht noch ob eine gültige Domain-Endung
angegeben wurde etc.

Wie löst ihr dieses Problem in einem CMS?

Danke und Gruss
Raffi

  1. Holladiewaldfee,

    Auf was alles soll ich Links prüfen?

    Hier im Archiv gammelt ein regulärer Ausdruck rum, mit dem man das ziemlich genau prüfen kann, allerdings hat er ein paar (nicht ganz unbedeutende) Schwächen und ist glaube ich auch schon etwas veraltet (wenn ich mich recht erinnere kann er nichts mit Sonderzeichen in Domains anfangen). Suchbegriff: Pros_pero (ohne den Unterstrich eingeben - haltet Eure Suche sauber ;)

    An Deiner Stelle würde ich einfach nur prüfen, ob der Benutzer irgendwelchen Schwachsinn anstellen will (z.B. Eingaben wie 'bla.html"><script>...(blablubb)...</script><img src="foo.gif').

    Ciao,

    Harry

    --
      Schnee :) Skitour gefällig?
      http://harry.ilo.de/projekte/berge/
    1. Danke für Deinen Beitrag.
      Ja, dass auf Unsinn überprüfen will ich eigentlich genau.
      Aber wie und auf was soll ich die Eingabe prüfen?

      Gruss
      RAffi

      1. Hallo Raffi,

        Aber wie und auf was soll ich die Eingabe prüfen?

        Für normale Links würde ich einen HTTP-Request an den eingegebenen URI senden und die Antwort auswerten. Im Erfolgsfall ist der URI korrekt. In Perl habe ich mir da mal eine Subroutine gebastelt, wie das mit PHP funktioniert, kann ich dir aber leider nicht sagen.

        Grüße
        Siechfred

        1. Hello,

          Für normale Links würde ich einen HTTP-Request an den eingegebenen URI senden und die Antwort auswerten. Im Erfolgsfall ist der URI korrekt. In Perl habe ich mir da mal eine Subroutine gebastelt, wie das mit PHP funktioniert, kann ich dir aber leider nicht sagen.

          Da braucht man dann auch nur einen HEAD abzuschicken; muss ja kein GET werden.

          Viel wichtiger wäre mir aber, ob die Besucher dort Links auf "verbotene" Seiten auslegen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          1. Hallo Tom,

            Da braucht man dann auch nur einen HEAD abzuschicken; muss ja kein GET werden.

            Klaro ;-)
            Der Vollständigkeit halber: so sieht meine Subroutine in Perl aus:

            use LWP::UserAgent;
            ...
            sub checkuri {
              my $ua = LWP::UserAgent->new();
              my $anfrage = HTTP::Request->new('HEAD', $_[0]);
              my $response = $ua->request($anfrage);
              if( $response->is_success()) {
                return;
              }
              else {
                # fehlermeldung ausgeben;
              }
            }

            Viel wichtiger wäre mir aber, ob die Besucher dort Links auf "verbotene" Seiten auslegen.

            Jo, das geht wohl nur über eine Blacklist.

            Grüße
            Siechfred

          2. Hallo,

            Da braucht man dann auch nur einen HEAD abzuschicken; muss ja kein GET werden.

            Genau das tut das PHP-Skriptlein von Johannes Froemter (dclp-FAQ).
            http://froemter.de/php/phpLinkCheck.phps

            Viel wichtiger wäre mir aber, ob die Besucher dort Links auf "verbotene" Seiten auslegen.

            Was meinst Du mit "verboten"?
            Seiten, die einen 403er schicken?
            Oder "unerwuenschte"/"rechtswidrige" Seiten?
            => Raffi sprach von "Kunden", nicht von "Besuchern".
            Natuerlich werden Gaestebuecher, Blogs, "Free For All" Linklisten u.s.w.
            oft missbraucht, um dort (zwecks Suchmaschinenspamming) Links
            zu "schmutzigen" Seiten zu plazieren.
            Bei solchen Anwendungen, wo sich x-beliebige Besucher
            eintragen koennen, wuerde ich Links durch den Inhaber
            der Website manuell freischalten lassen. Den Rest des
            Gaestebuch-Eintrags kann man ja schonmal anzeigen lassen,
            natuerlich nach entsprechender technischer Saeuberung
            (sprich: HTML entfernen u.s.w.).

            Gruesse,

            Thomas

            P.S. Ich erwarte noch Deine Antwort auf [pref:t=70939&m=408400]
            (XHTML/doppelte Anfuehrungszeichen bei Attributen... ;-)

  2. Hallo,

    Auf was alles soll ich Links prüfen?
    z.B. ein http:// voraus

    Solange Du keine relativen Links (bzw. Links, die mit "/" anfangen)
    erlauben willst, kannst Du das schon voraussetzen.

    Bei "klassischen" Links auf Webseiten wuerde ich gleich pruefen,
    ob sie auf eine gueltige Ressource zeigen.

    dclp-FAQ: Wie überprüfe ich Hyperlinks auf ihre Gültigkeit?
    http://www.dclp-faq.de/q/q-code-links-testen.html
    http://froemter.de/php/phpLinkCheck.phps

    ein mailto: voraus

    Achso, Du willst an beliebigen Stellen beliebige Links zulassen...
    Dann wird die Sache natuerlich etwas komplexer...
    Es gibt ja nicht nur "http://" und "mailto:", sondern noch
    ein paar weitere Protokolle...
    Jedes hat sein eigenes URI-Schema.
    http://selfhtml.teamone.de/html/allgemein/referenzieren.htm#uri
    http://www.w3.org/Addressing/
    http://www.w3.org/Addressing/rfc1630.txt

    Na dann - viel Spass!

    Gruesse,

    Thomas

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
    1. Ok...ich denke, dass ich mich nur auf "normale" hyperlinks festlege...Dann kann ich das ganze mit PHP prüfen ob die Seite wirklich existiert.

      Danke und Gruss
      Raffi