So… heute hatte ich ein Problem. Wie verschlüssle ich meinen geheimen WordPress-Blog?
Die Idee: PHP 5, MySQL, Cookies und strtr
Zuerst interpretieren wir den Inhalt des SQL-Querys in den entschlüsselten Text. Dazu schreiben wir:
$content = strtr($content, "abcdefghijklmnopqrstuvwxyz", $_COOKIE['access']);
… in die Datei functions/functions-formatting.php in die Funktion convert_chars($content, $flag = 'obsolete') in die Zeile 388 vor return $content;
OK…. als Nächstes müssen wir den Blog mit dem Passwort versehen. Dazu gehen wir in die Datei index.php. Dort schreiben wir nach <?php dazu:
if (!isset($_COOKIE['access']) && $_GET['mode'] != "schluessel") {
echo '<form action="index.php?mode=schuessel" method="post"> <input type="password" name="password" value="Password" /> <input type="submit" value="Send" /> </form>'; die();
}
if (!isset($_COOKIE['access']) && $_GET['mode'] == "schuessel") {
if ($_POST['passwd'] == "beliebiges Passwort") {
$cookie = setcookie("access", "irgendeine andere Reihenfolge des Alphabets", time()+3600);
if ($cookie) echo "Cookie gesetzt";
}
}
OK… das Letzte ist noch das Schreiben in die Datenbank. Dazu gehen wir in die Datei functions/functions-post.php. Dort schreiben wir in die Funktion wp_insert_post($postarr = array()) in die Zeile 145:
$post_content = strtr($post_content, $_COOKIE['access'], "abcdefghijklmnopqrstuvwxyz");
$post_title = strtr($post_title, $_COOKIE['access'], "abcdefghijklmnopqrstuvwxyz");
Danach schreiben wir das selbe noch in die Zeile 322 jeweils vor $wpdb->query(...);
OK… das war’s. Die Verschlüsselung ist geglückt. Wie funktioniert das?
Wir versuchen auf die Startseite zu gehen. Fehlanzeige, weil kein Cookie namens access gesetzt ist. Darum erscheint eine Input-Box. In diese geben wir unser Passwort (in dem Fall “beliebiges Passwort”) ein und drücken “Send”. Dann wird ein Cookie gesetzt. Das steht auch am Anfang der Seite (ganz oben). In diesem Cookie ist der strtr-Schlüssel gesetzt, welcher uns erlaubt, den Text zu lesen. Fertig!
Bug: Bei der Edit-Funktion von WP wird der Text neu verschlüsselt. Bugfix: Text kopieren und als neuen Post speichern.
Info: strtr ersetzt Zeichen gegen Zeichen. $addr = strtr("Hällö Übi", "äüö", "aao"); echo $addr; ergibt also "Hallo Ubi".
time()+3600 bedeutet, dass das Cookie eine Stunde lang gesetzt ist (danach wird es gelöscht). Du kannst es mit einfachen Matheoperationen bearbeiten (zB time()+3600*24 = 1 Tag).
Bei einem falschen Passwort wird der Inhalt falsch dargestellt (verschlüsselt). Noobs – die nicht Cookies löschen können – müssen dann 1 Stunde (bzw. die angegebene Cookie-Zeit) warten bis sie ein neues Passwort ausprobieren können.
Ich bin ein bisschen selbst fasziniert, dass das funktioniert (meine erste Arbeit mit Cookies). Naja… Eigenlob stinkt
Recent Comments