WordPress Plugin Boilerplate

Wer mit dem Gedanken spielt ein WordPress Plugin zu entwickeln der muss nicht bei null anfangen. Mit der WordPress Plugin Boilerplate hat man ein Grundgerüst, in welches man seine gewünschten Plugin-Eigenschaften einbringen kann. Die Boilerplate bietet dabei neben dem Grundgerüst, eine Unterstützung für Internationalisierung, dokumentierte Parameter und einen nach einem Schema (Trennung von administrativen und öffentlichem Quellcode) geordneten Quellcode. Zu finden ist die Boilerplate auf GitHub. Der Quellcode steht unter der GPL2 (und höher) und ist somit freie Software.

Sichere Strings unter .NET

Manchmal möchte man eine Zeichenkette im Arbeitsspeicher nicht länger als nötig im Klartext vorhalten. Hierfür gibt es unter .NET/Mono die Klasse „SecureString“. Diese verschlüsselt den Klartext, so das dieser nicht ohne weiteres im Speicher zu finden ist. Leider ist die Nutzung der „SecureString“ etwas komplizierter:

SecureString secureString=new SecureString();
secureString.AppendChar('g');
secureString.AppendChar('e');
secureString.AppendChar('h');
secureString.AppendChar('e');
secureString.AppendChar('i');
secureString.AppendChar('m');

// in Klartext umwandeln
IntPtr secureStringPointer=Marshal.SecureStringToBSTR(secureString);
string klartext=Marshal.PtrToStringAuto(secureStringPointer);

Hier muss man abwägen, ob sich die Nutzung eines solches Konstruktes lohnt, oder man weiterhin normale Strings für sensible Daten nutzt.

Programmieren im Browser lernen

Das Entwickeln von Anwendungen, bzw. das Füttern eines Rechners mit Anweisungen, scheint für viele Leute Hexenwerk zu sein. Das dies nicht so bleiben muss zeigt die Webseite http://tomskript.webevangelisten.de/. Dort kann man in einer einfachen, auf deutsch gehaltenen Programmiersprache, seine ersten Versuche machen.

Der Tomskript Editor

Der Tomskript Editor

Im Editor schreibt man dabei einen Quelltext um eine Schildkröte über ein zweidimensionales Feld zu lotsen. Neben dem Browser werden keine zusätzlichen Komponenten benötigt. Ergänzt wird das ganze durch kleinere Beispiele und eine Beschreibung der Programmiersprache.

Mail aus einer Software heraus versenden

Manchmal möchte aus einer Desktopanwendung heraus eine Mail verschicken. Das ist insofern problematisch, da man die Zugangsdaten für einen Mailaccount nicht in einer Anwendung hinterlegen sollte. Aus Webanwendungen heraus ist das Senden von Mails dagegen eine einfache Sache. Also was liegt näher als diesen Vorteil für das Senden von Mails aus Desktopanwendungen heraus zu nutzen.

<?php
    $reciever=$_POST["reciever"];
    $allowedRecieverDomain="example.org";
    $subject=$_POST["subject"];
    $text=$_POST["message"];

    //Sender
    $senderName="Mailer";
    $sender="";

    //Additional challenge
    $challenge="abc123";
    if($challenge!=$_POST["challenge"]) return;

    //Check reciever
    $atCount=substr_count($reciever, "@");
    if($atCount>1) return;

    if(!(strpos($reciever, "@" . $allowedRecieverDomain)===FALSE))
    {
        mail($reciever, $subject . " - (" . date("d.m.y - H:m:s") . ")", $text, "From: $senderName <$sender>");
    }
?>

Ein kleines PHP Skript mit dem Namen „mailer.php“ sorgt dafür das die Mail bzw. der Text der Mail in Empfang genommen wird. Anschließend wird nachgeschaut ob die Mail an einen validen Sender adressiert ist. In diesem Beispiel werden nur Mails an @example.org weitergeleitet. Schließlich möchte man keine Spamschleuder betreiben. Nun müssen die Parameter in der Anwendung noch per POST-Request übergeben werden. Unter C# könnte das ganze so aussehen:

System.Net.ServicePointManager.Expect100Continue=false;

string url="http://example.org/mailer.php";

using(var wb=new WebClient())
{
    var data=new NameValueCollection();
    data["sendername"]="Mailer";
    data["sender"]="";
    data["reciever"]="";
    data["subject"]="Mail from Application";
    data["message"]="Message";

    var response=wb.UploadValues(url, "POST", data);
}

Der Quellcode ist dabei auf GitHub zu finden und steht unter der AGPL.

Debugger da?

Unter .NET ist es manchmal sehr nützlich zu wissen, ob an die Anwendung ein Debugger angehängt ist. Im Namespace „System.Diagnostics“ gibt es dazu auch die passende statische Eigenschaft mit dem Namen „IsAttached“. Die Nutzung könnte dabei so aussehen:

if(Debugger.IsAttached==true)
{
    //Do something
}

Der Quelltext in den Blockklammern wird dabei nur dann ausgeführt, wenn ein Debugger an die Anwendung angehangen ist. Das kann die IDE (Visual Studio und Co.) sein, es kann aber auch ein böswilliger Angreifer sein – wobei es natürlich Verfahren gibt, die Erkennung auszuhebeln.