Gestern erhielt ich meinen ersten Pingback-SPAM (nur einen aber von einem bekannten Spammer) und habe mir deswegen im Rahmen meiner aktuellen Anti-SPAM-Strategie Gedanken über dieses Problem gemacht.
Nach einem Blick in den Code des Pingback-Moduls wurde mir leider schnell klar, daß derzeit nur Lösungsansätze im Rahmen von Aktionen und Triggern möglich sind. Diese greifen mir persönlich aber zu spät in den Ablauf ein, da ich zu diesem Zeitpunkt längst eine E-Mail-Benachrichtigung über einen neuen Kommentar erhalten habe.
Das Problem
Das Pingback-Modul verwendet zwar Kommentare, umgeht aber alle Validierungen. Für die Speicherung wird die Funktion comment_save() benutzt, welche auf vorhandene Validierungs-Probleme reagieren würde, diese jedoch nicht selbst feststellen kann.
Die Lösung
Meiner Meinung nach wäre es am sinnvollsten, einen Aufruf von comment_validate() vor dem eigentlichen Speichern durchzuführen und dann gegebenenfalls mit einem Aufruf von xmlrpc_server_error() auf den Rückgabewert FALSE der Speichern-Funktion zu reagieren.
Vorher:
comment_save($edit);
Nachher:
// Validate pingbacks and allow hooking this validation with hook_comment() comment_validate($edit); // Pingbacks with errors won't be saved (return value FALSE) if (!comment_save($edit)) { // not sure about the error code and the message return xmlrpc_server_error(0, t('Validation error.')); }
Fazit
So weit ich das sehe, sollte mit der obigen Änderung eine Nutzung von hook_comment() zur Validierung der Pingback-Innhalte möglich sein. Somit sollte nun die Entwicklung von Modulen möglich sein, die auf Basis einer schwarzen Liste von URLs Kommentare (oder sogar nur Pingbacks) schon vor der Moderations-Warteschlange abfangen. Derzeit bin ich mir nur über den passenden Fehler-Code unsicher, da ein solcher Fall derzeit nicht vorgesehen scheint.
Ich hoffe der derzeitige Maintainer des Moduls reagiert auf meinen eingereichten Patch, aber die Chancen stehen relativ schlecht, da das Modul (in der Version 6.x-2.x-dev) zuletzt am 14. August 2008 angepackt wurde.




Kommentar hinzufügen