Tutorial: Benutzername und E-Mail Überprüfung

Ich habe ein Script gebastelt, dass alle Benutzernamen auf verbotene Usernamen und alle E-Mail-Adressen auf E-Mail-Adressen von Wegwerf-Email-Diensten überprüft.

Wer es verwenden will und nicht mehr als 25 Mal am Tag ausführt, kann es gerne nutzen:

<?php
/* Check for illegal Usernames and / or Emails
* Created: 15.02.2015 by Christoph Daniel Miksche (Wronnay)
* Uses the Wronnay Database for illegal Usernames and Emails
* More Informations: check.wronnay.net
*/
function wcms_namecheck($username, $email){
$username = str_replace(' ', '_', $username); // Wandelt Leerzeichen in _ um
$username = strtolower($username); // Wandelt alle Buchstaben in Kleinbuchstaben um
$email = str_replace(' ', '_', $email);
$email = strtolower($email);
// Nur die Domain wird benötigt
$email = substr(strrchr($email, "@"), 1);
// Wronnay E-Mail-Check API-URL
$locked_email = file_get_contents('http://check.wronnay.net/locked_email.php?domain='.$email);
// Leerzeichen raus!
$locked_email = str_replace(' ', '', $locked_email);
// Wronnay Username-Check API-URL
$locked_username = file_get_contents('http://check.wronnay.net/locked_username.php?username='.$username);
// Leerzeichen raus!
$locked_username = str_replace(' ', '', $locked_username);
// Default Wert für den Check setzen
$found = false;
// Username: Check
if($locked_username == 'true') {
$found = true;
}
// E-Mail-Check
elseif($locked_email == 'true') {
$found = true;
}
return $found;
}
?>

Update: ForenSoftware 0.7

Heute habe ich die neueste Version meiner ForenSoftware (PHP-Script für das Erstellen eines Forums) veröffentlicht. Es wurden vor allem neue Funktionen hinzugefügt, die von so manchem User gewünscht wurden.

Wichtigste Neuerungen:

  • Automatische Suche nach Aktualisierungen
  • E-Mail-Aktivierung bei Registrierung (Im Admin-Bereich aktivierbar)
  • E-Mail bei Antworten auf das Thema an den Threadersteller
  • E-Mail bei neuen Nachrichten
  • E-Mail bei neuem Passwort
  • Besucherzähler

Diese Neuheiten werden wohl auch in der nächsten Version meines Content Management Systems (des WronnayCMS) zu finden sein.

Downloaden kann man die ForenSoftware hier: http://scripts.wronnay.net/?s=php&id=3

Eigentlich wollte ich solche Neuheiten ausschließlich auf der Webseite meiner ForenSoftware veröffentlichen, aber die existiert seit meinem Problem mit Dot.tk nicht mehr.

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.

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)

Mehrsprachige Webseiten und Suchmaschinenoptimierung

Eine mehrsprachige Webseite ist etwas Schönes. Durch die Vielfalt der Sprachen kann man meist mehr als doppelt so viele Nutzer ansprechen wie vergleichbare einsprachige Webseiten. Allerdings gibt es bei mehrsprachigen Webseiten auch einen Haken: Entweder muss der Nutzer selbst die Sprache auswählen oder die Webseite liest die Daten von dem Browser aus. Das Problem ist, dass Suchmaschinen keine Sprachdaten an die Webseite übermitteln. Also wird die Webseite bei Suchmaschinen mit der Standard-Sprache ausgeliefert (meist ist dies Englisch). So wird aus einer zweisprachigen Webseite bei Google ganz schnell eine einsprachige Webseite. Ich möchte nun meine Lösung zu diesem Problem präsentieren: zwei Domains (bzw.: Subdomains). Denn wenn man zwei Domains für eine Webseite hat, dann kann man die Sprachauswahl so einstellen, dass wenn keine Sprachdaten gefunden werden, einfach die eine Webseite auf Deutsch ausgeliefert wird und die andere auf Englisch. So findet Google statt einer mehrsprachigen Webseite zwei Webseiten mit jeweils einer anderen Sprache. Dies ist optimal für die Suchmaschinenoptimierung.

Hier noch ein Beispiel in PHP:

    if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) // Sind Sprachdaten vorhanden?
    {
      $_SESSION['lang'] = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
    }
	else // Keine Sprachdaten vorhanden!
    {
if($_SERVER['SERVER_NAME'] == 'homepage-versammlung.tk') {$_SESSION['lang'] = 'de';}
elseif($_SERVER['SERVER_NAME'] == 'homepage-meeting.tk') {$_SESSION['lang'] = 'en';}	
else {$_SESSION['lang'] = 'en';} 	
    }

WronnayCMS: Closed Beta veröffentlicht

WronnayCMSIch habe vorgestern mein Content Management System in der Closed Beta veröffentlicht. Das heißt, es ist zurzeit nur einen eingeschränkten Nutzerkreis möglich, mein CMS zu testen. Der größte Unterschied zu herkömmlichen CMS ist, das man im Adminbereich des WronnayCMS PHP-Codes einfügen kann, um die Webseite um weitere Funktionen zu erweitern. Dieses Feature habe ich angelegt, da ich alle meine Webseiten mit diesem System ausstatten möchte und die Seiten trotzdem individuelle Funktionen bieten sollen. Eine weitere Besonderheit ist, dass das CMS eine eingebaute ForenSoftware besitzt, was es einfacher macht, das System für Communitys zu verwenden. Daneben besitzt es alle Standard Funktionen eines normalen Content Management Systems. Die offizielle Webseite ist: cms.wronnay.net

Start der Entwicklung des WronnayCMS

WronnayCMSIch habe heute mit der Entwicklung meines eigenen Content-Management-Systems begonnen.

Das CMS soll anders als andere Systeme aufgebaut werden und ein paar Funktionen bieten, die es bisher noch nicht gibt. Da ich es für alle meine Websites benützen will, wird es sehr flexibel sein und meine ForenSoftware unterstützen.

 

Mein Cross-Site-Scripting Problem …

Ich habe ja vor kurzem davon berichtet, dass ich ein Cross-Site-Scripting Problem habe und eine Lösung gefunden habe, das stimmt aber nicht ganz: Die Funktion schafft zwar, dass kein Cross-Site-Scripting mehr möglich ist, zeigt aber auch keine Umlaute mehr an! Da ich den Cross-Site-Scripting Fehler auf fast allen meinen Webseiten gefunden habe, setze ich jetzt alle betroffenen Webseiten auf offline und entwickle ein einheitliches CMS für alle meine Webseiten, das Cross-Site-Scripting nicht erlaubt. (Das kann aber dauern …)

Funktion gegen Cross-Site-Scripting …

Da ich eben noch ein Problem mit Cross-Site-Scripting hatte, möchte ich hier Posten, wie ich es gelöst hab: Ich habe eine neue PHP-Funktion erstellt:

<?php
function nocss($nocss) {
  $nocss = mysql_real_escape_string($nocss);
  $nocss = strip_tags($nocss);
  $nocss = htmlspecialchars($nocss);
  return $nocss;
}
?>

Aufgerufen wird sie so:

<?php
nocss($TEXT);
?>