Das erkennen einer (frech oder nett) URL oder den link in einen text-string

Wie kann ich erkennen (mit regulären Ausdrücken oder Heuristik) eine Website-Verknüpfung in einem text wie ein Kommentar?

Zweck ist um spam zu verhindern. HTML wird entfernt, so dass ich brauchen, um festzustellen, Einladungen zu kopieren-und-einfügen. Sollte es nicht wirtschaftlich für einen spammer erlaubt, links zu posten, weil die meisten Benutzer nicht erfolgreich konnte man die Seite. Ich möchte Anregungen, Referenzen und Diskussion über best-practices.

Einige Ziele:

  • Die niedrig hängende Frucht, wie die wohlgeformte URLs (http://some-fqdn/some/valid/path.ext)
  • URLs, aber ohne die http:// Präfix (D. H. einen gültigen FQDN + gültigen HTTP-Pfad)
  • Andere lustige business

Natürlich, ich bin blockiert spam, aber der gleiche Prozess verwendet werden könnte, um die automatische link-text.

Ideen

Hier sind einige Dinge, die ich mir denke.

  • Der Inhalt ist Muttersprache-die Sprache der Prosa, so kann ich trigger-happy in der Erkennung
  • Sollte ich entfernen Sie alle whitespace-ersten zu fangen "www .example.com"? Wären gemeinsame Benutzer wissen, zu entfernen, den Raum selbst, oder irgendwelche Browser "do-what-I-mean" und " strip für dich?
  • Vielleicht mehrere Pässe ist eine bessere Strategie, mit der sucht nach:
    • Wohlgeformte URLs
    • Alle nicht-whitespace-Zeichen gefolgt von '.' gefolgt von einer gültigen TLD
    • Etwas anderes?

Fragen

Ich gelesen habe diese und Sie sind jetzt hier dokumentiert, also können Sie nur Referenzen die regexes in diesen Fragen, wenn Sie wollen.

Update und Zusammenfassung

Wow, ich gibt es einige sehr gute Heuristiken, die hier aufgeführten! Für mich der beste bang-for-the-buck ist eine Synthese der folgenden:

  1. @Jon Hell ist die Technik der Erkennung von TLDs (eine gute defensive kampfpunkt)
  2. Für diejenigen, die verdächtigen Zeichenfolgen ersetzen Sie den Punkt durch einen Punkt aussehenden Charakter als pro @capar
  3. Ein guter Punkt-Suche-Charakter ist @Sharkey ' s gelesen · (d.h. "·"). · ist auch eine Wort-Grenze, so ist es schwieriger, beiläufig copy & paste.

Sollte ein spammer CPM-Wert, der niedrig genug ist für meine Bedürfnisse; die "als unangemessen Kennzeichnen" feedback der Nutzer sollte sich fangen, sonst nichts. Andere Lösungen aufgelistet sind auch sehr nützlich:

  • Streifen aus alle dotted-Quad (@Sharkey ' s Kommentar zu seiner eigenen Antwort)
  • @Sporkmonger die Anforderungen für client-side Javascript, das fügt eine erforderliche verstecktes Feld in das Formular.
  • Anpingen der URL-server-Seite, um festzustellen, ob es sich um eine Website. (Vielleicht könnte ich die HTML durch SpamAssassin oder anderen Bayes-filter als pro @Nathan..)
  • Suche bei Chrome die Quelle für seine smart address bar, um zu sehen, was für clevere tricks Google verwendet
  • Rief OWASP AntiSAMY oder andere web-Dienste für den spam - /malware-Erkennung.
InformationsquelleAutor JasonSmith | 2009-03-31
Schreibe einen Kommentar