Wie sollten Links überprüft werden?
Raffi
- php
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
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
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
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
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
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
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... ;-)
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
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