Spam unter WordPress ohne Plugins verhindern!

Ich habe bei einem meiner Projekte das Problem, dass ich WordPress verwende, allerdings keine Plugins oder Themes verwenden kann. Wie verhindert man also bei so einem Projekt Kommentar-Spam?

Es ist eigentlich ganz einfach: Man baut in die functions.php ein paar neue Funktionen gegen Spam ein:

1. Webseiten-Feld entfernen!

Spammer / Spam-Bots wollen ihre Webseite bekannter machen, gibt es kein -Webseiten-Feld ist das Risiko niedriger, dass Spam gepostet wird.

PHP-Code:

function remove_comment_fields($fields) {
    unset($fields['url']);
    return $fields;
}
add_filter('comment_form_default_fields','remove_comment_fields');
 
function rkv_url_spamcheck( $approved , $commentdata ) {
   return ( strlen( $commentdata['comment_author_url'] ) > 1 ) ? 'spam' : $approved;
}
 
add_filter( 'pre_comment_approved', 'rkv_url_spamcheck', 99, 2 );

Diese Funktion entfernt das Webseiten-Feld und markiert Kommentare mit Webseite automatisch als Spam. (Quelle: catswhocode.com)

2. Kommentare mit Links entfernen

Als Nächstes weist man die Besucher des Blogs darauf hin, dass Links in den Kommentaren verboten sind und baut die folgende von mir erstellte Funktion ein, die Kommentare mit Links erkennt.

PHP-Code:

// BBCodes und HTML-Links erkennen - Wronnay.net
function wy_link_on_comment() {
if(stristr($_POST['comment'],"[link=") || stristr($_POST['comment'],"[url=") || stristr($_POST['comment'],"a href=") || stristr($_POST['comment'],"http://")){
wp_die( __('Bitte keine Links posten!') );
}
}
add_action('pre_comment_on_post', 'wy_link_on_comment');

Die Funktion erkennt sogenannte BBCodes, die eigentlich gar nicht in WordPress verwendet werden und normale HTML-Links und weist den Autor darauf hin, dass Links nicht erlaubt sind.

Update (23.04): Ich habe jetzt „ || stristr($_POST[‚comment‘],“http://“)“ hinzugefügt. Der Code erkennt jetzt alle Links.

Wronnay News: Überarbeitet!

Das Portal „Wronnay News„, das ich vor Kurzem erstellt habe, wurde von mir komplett überarbeitet: Es hat jetzt komplett neue Funktionen und ein neues Design.

Wer sich nicht registrieren will, findet in verschiedenen Kategorien die besten News des jeweiligen Bereiches – von verschiedenen Newsquellen, chronologisch geordnet.

Wer bereit ist, einen Account zu erstellen, kann RSS Feeds hinzufügen und diese in verschiedene Gruppen ordnen und sich so seine eigenen Feeds seiner Lieblingsseiten zusammenstellen.

CSS Tutorial: Personalisierte Checkboxen

Wie ich bereits berichtet habe, nutze ich seit Kurzem personalisierte Checkboxen. In diesem Tutorial möchte ich zeigen, wie das funktioniert.

Zuerst der HTML-Teil:

<span>
  <input type="checkbox" name="channel[]" id="channel1" class="checkbox" value="wronnaysblog">
  <label id="lbl1" for="channel1"> Wronnays (B)log</label>
</span>
<span>
  <input type="checkbox" name="channel[]" id="channel2" class="checkbox" value="wronnaycms">
  <label id="lbl2" for="channel2"> WronnayCMS</label>
</span>
<span>
  <input type="checkbox" name="channel[]" id="channel3" class="checkbox" value="forenhosting">
  <label id="lbl3" for="channel3"> ForenHosting.net</label>
</span>
<span>
  <input type="checkbox" name="channel[]" id="channel4" class="checkbox" value="webpage4me">
  <label id="lbl4" for="channel4"> WebPage4.Me</label>
</span>
<span>
  <input type="checkbox" name="channel[]" id="channel5" class="checkbox" value="cdm">
  <label id="lbl5" for="channel5"> C D Ms Blog</label>
</span>

Nachfolgend der CSS-Teil:

span {
  margin-bottom:1em;
}
input[type="checkbox"],
label[for] {
  display:inline-block;
}
label[for] {
  margin-left:1em;
  cursor:pointer;
}
input[type="checkbox"] {
  visibility:hidden;
}
input[type="checkbox"] + label[for] {
  margin-left:-1em;
}
input[type="checkbox"] + label[for]:before {
  content:"\2713";
  color:white;
  background:white;
  border:1px solid grey;
}
input[type="checkbox"]:checked + label[for]:before {
  color:black;
}
input[type="checkbox"] + label[for]:hover:before,
input[type="checkbox"] + label[for]:focus:before {
  color:grey;
}

content:“\2713″; zeigt das eigentliche Checkbox-Symbol. Das verstecken wir mit „color:white;“ und „background:white;“. Da wir mit „input[type=“checkbox“]:checked“ definieren, wie die Checkbox angeklickt aussehen soll und da „color:black;“ angegeben wurde, wird das Checkbox-Symbol nach dem Anklicken schwarz. Mit „label[for]:hover:before“, „label[for]:focus:before“ und „color:grey;“ geben wir dann noch an, dass das Checkbox-Symbol bei einem Hover- und Focus-Effekt grau sein soll.

Neuer Dienst: Wronnay News

Unter news.wronnay.net kann man jetzt auswählen, von welchen meiner Dienste man die Neuigkeiten angezeigt haben möchte und bekommt dann alle News der ausgewählten Dienste angezeigt.

In dem Projekt habe ich ein paar neue Funktionen und Tricks ausprobiert: Zum Beispiel habe ich die Checkboxen mit CSS3 personalisiert. Ein paar dieser neuen Erfahrungen möchte ich auch in Zukunft in meinen Projekten nutzen.

Um an die News aller Dienste zu kommen, kann man alternativ auch einfach den folgenden Link klicken: fh4.me/news

Hoher RAM-Verbrauch

In den letzten Tagen waren meine Webprojekte nicht so gut erreichbar. Das lag an einem sehr hohen RAM-Verbrauch meines Servers.

Woran das genau lag, weiß ich nicht. Trojaner / Rootkits und Viren habe ich keine gefunden. Es könnten einfach zu viele Besucher gewesen sein. (Da ich nicht von allen Webseiten Statistiken anlege, weiß ich bei manchen Projekten von mir die Besucherzahlen gar nicht)

Da meine Dienste auch in Zukunft gut erreichbar sein sollen, habe ich meinen Anbieter kontaktiert und ich werde wahrscheinlich entweder auf einen leistungsfähigeren Server wechseln oder meine Projekte auf mehrere Server aufteilen.

Update: Ich habe das Problem ermittelt: Mein Virenscanner (ClamAV) sorgte für den hohen Verbrauch meines Arbeitsspeichers. – Ich werde wohl einen anderen Virenscanner nutzen und ClamAV nur manchmal nutzen …

Server-Status

Da ich in letzter Zeit immer wieder mit Ausfällen zu kämpfen hatte, habe ich jetzt eine Webseite bei einem anderen Webhoster erstellt, die anzeigt, ob meine Projekte online sind oder nicht.

Die Webseite prüft meinen vServer und meine einzelnen Projekte und zeigt deren Status an. Der Server wird mit einer anderen Methode geprüft wie die einzelnen Webseiten.

Die Seite ist unter Status.Wronnay.net erreichbar. Allerdings gibt es auch ein kleines Problem: sollte mein DNS-Server ausfallen, ist auch die Status-Seite nicht mehr erreichbar.

Vielleicht baue ich auch eine kleine Funktion zum Zählen von den Ausfällen an – so könnte ich ermitteln, ob ich vielleicht zu einem anderen Hoster wechseln sollte. Sollte es vermehrt zu Ausfällen kommen, werde ich wohl meine Projekte auf verschiedene Webhoster aufteilen. Allerdings bin ich derzeit mit meinem Server zufrieden, außerdem will ich (frühestens) ab Mai einen zweiten Server in Österreich betreiben. (Dieser wird dann natürlich auch von der Status-Webseite überwacht)