<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Das WordPress-Buch &#187; Sicherheit</title>
	<atom:link href="http://wordpress-buch.bueltge.de/tag/sicherheit/feed/" rel="self" type="application/rss+xml" />
	<link>http://wordpress-buch.bueltge.de</link>
	<description>Das Blog zum Buch: Das WordPress-Buch – Vom Blog zum Content-Management-System</description>
	<lastBuildDate>Thu, 25 Aug 2011 09:00:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Neue Schlüssel für die wp-config.php ab WordPress 3.0</title>
		<link>http://wordpress-buch.bueltge.de/neue-schluessel-fuer-die-wp-config-php-ab-wordpress-3-0/107/</link>
		<comments>http://wordpress-buch.bueltge.de/neue-schluessel-fuer-die-wp-config-php-ab-wordpress-3-0/107/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:55:12 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Mehrwert]]></category>
		<category><![CDATA[Link]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wordpress-buch.bueltge.de/?p=107</guid>
		<description><![CDATA[Mit WordPress 3.0 werden WordPress µ und WordPress eine Applikation, ein großer und wichtiger Schritt. In diesem Zusammenhang wird es vier weitere Schlüssel geben, die man in der wp-config.php ablegen sollte. Dies kann man jetzt schon tun, sie haben keinen &#8230; <a href="http://wordpress-buch.bueltge.de/neue-schluessel-fuer-die-wp-config-php-ab-wordpress-3-0/107/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Mit WordPress 3.0 werden WordPress µ und WordPress eine Applikation, ein großer und wichtiger Schritt. In diesem Zusammenhang wird es vier weitere Schlüssel geben, die man in der <code>wp-config.php</code> ablegen sollte. Dies kann man jetzt schon tun, sie haben keinen Nachteil und werden so nicht vergessen.</p>
<p>Mit Hilfe des Services, der aktuell unter der URL <a href="https://api.wordpress.org/secret-key/1.1/salt/">https://api.wordpress.org/secret-key/1.1/salt/</a> zu erreichen ist, kann man sich 8 neue Schlüssel erstellen lassen und nutzt diese bzw. auch nur die letzten vier. Die neue Schlüssel sind vorrangig für die Multiuser-Funktionalität und werden klassisch wenig genutzt - ein Nachteil sind sie aber nicht und werden auch in der Funktion <code>wp_salt()</code> genutzt, die sich um die Sicherheit kümmert und diverse Hashes erstellt.</p>
<pre><code class="php">
define('AUTH_KEY',         'q]ntdiiS9%&amp;amp;y%W&amp;amp;. M%JH+mUK=!j_CL|TZ ]0X$/cO]HrL6jMdc$0tx1|o+R.J#2');
define('SECURE_AUTH_KEY',  'Y}qq3FZH+~;,{H5w;jW=&amp;gt;s$hB,P^kra#U?HtP]32w^5r*h|]|yTc~D?78M +z&lt;HR&gt;/qZ +FTi&amp;gt;iKhudd');
define('LOGGED_IN_KEY',    '4i&gt;/~Ox[JG0O|AK`vt@Vh5#D;r=E@Xsl-SR&gt;XXgz0Np/&amp;b;)|c(@t9yPtKaxj%N&amp;');
define('NONCE_KEY',        ' j2H|0N[q%q||[mB1V;pj4v TO6I&amp;amp;-NqEc=J&amp;gt;G|!t#wZI |v+Q=d[@9@heM!I[d[');
// die neuen Schluessel
define('AUTH_SALT',        'yce=M 5@R^3q!`v_`o1[hh05kMY2l=k=|7Xdvg+zj`-bcw2qu;d*37?');
define('SECURE_AUTH_SALT', ';3^JS^3d-4JaX@{-~t*L');
define('LOGGED_IN_SALT',   'G#whJOmaws-PsnY/i8(G!gq)A?:elIE8cPTYL[0H]OX^&amp;gt;-f.0#7+V82)J]&amp;amp;] }b+');
define('NONCE_SALT',       '!yl]=f1]vrB mwtr|?#_-KvCIM}kBR&amp;gt;rq:CV/MnTQb(!X/|;LB&amp;gt;.3qhU:(Xni/{L');
</code></pre>
<hr /><small>Author des Beitrags: Frank, <a href="http://wordpress-buch.bueltge.de/neue-schluessel-fuer-die-wp-config-php-ab-wordpress-3-0/107/#comments" title="to the comments">1 Kommentare</a> zum Beitrag<br />&copy; <a href="http://www.wordpressbuch.de">WordPress-Buch</a>, All rights reserved / Alle Rechte vorbehalten. (ID: WPB3a6Be6Da38)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress-buch.bueltge.de/neue-schluessel-fuer-die-wp-config-php-ab-wordpress-3-0/107/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Plugins für eine erhöhte Sicherheit</title>
		<link>http://wordpress-buch.bueltge.de/wordpress-plugins-fuer-eine-erhoehte-sicherheit/35/</link>
		<comments>http://wordpress-buch.bueltge.de/wordpress-plugins-fuer-eine-erhoehte-sicherheit/35/#comments</comments>
		<pubDate>Thu, 17 Apr 2008 12:58:55 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Mehrwert]]></category>
		<category><![CDATA[Berechtigung]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://wordpress-buch.bueltge.de/?p=35</guid>
		<description><![CDATA[In zwei vergangen Artikeln habe ich schon eine ganze Reihe von Punkten zum Thema Sicherheit erläutert. WordPress sicherer machen WordPress Templates sicherer machen Die WordPress-Community ist sehr groß und es gibt viele gute Entwickler in diesen Bereich. Dementsprechend gibt es &#8230; <a href="http://wordpress-buch.bueltge.de/wordpress-plugins-fuer-eine-erhoehte-sicherheit/35/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://wordpress-buch.bueltge.de/wp-content/uploads/2007/04/wp-security.png" alt="WP Security" /><br />
In zwei vergangen Artikeln habe ich schon eine ganze Reihe von Punkten zum Thema Sicherheit erläutert.</p>
<ul>
<li><a href="http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/">WordPress sicherer machen</a></li>
<li><a href="http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/">WordPress Templates sicherer machen</a></li>
</ul>
<p>Die WordPress-Community ist sehr groß und es gibt viele gute Entwickler in diesen Bereich. Dementsprechend gibt es nun eine ganze Reihe an Plugins, die die Sicherheit auf verschiedene Art und Weise erhöhen. Im Beitrag "<a href="http://bueltge.de/wordpress-plugin-mehr-sicherheit/637/">WordPress Plugins für mehr Sicherheit</a>" sind diese Plugins nachzulesen. Sie sind zum Teil sehr nützlich und leicht einzusetzen, in jedem Fall einen Blick wert.<br />
<hr /><small>Author des Beitrags: Frank, <a href="http://wordpress-buch.bueltge.de/wordpress-plugins-fuer-eine-erhoehte-sicherheit/35/#comments" title="to the comments">1 Kommentare</a> zum Beitrag<br />&copy; <a href="http://www.wordpressbuch.de">WordPress-Buch</a>, All rights reserved / Alle Rechte vorbehalten. (ID: WPB3a6Be6Da38)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress-buch.bueltge.de/wordpress-plugins-fuer-eine-erhoehte-sicherheit/35/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Templates sicherer machen</title>
		<link>http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/</link>
		<comments>http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 10:45:59 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Mehrwert]]></category>
		<category><![CDATA[Sicherheit]]></category>

		<guid isPermaLink="false">http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/</guid>
		<description><![CDATA[Egal ob die Verwendung eines freien, kommerziellen oder selbst erstellten Themes in deinem Weblog zur Verwendung kommt, man kann mittels PHP viele schöne und nützliche Funktionen einbauen. Aber durch diese Mächtigkeit kann man ebenso einfach und unbewusst Sicherheitslücken in das &#8230; <a href="http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src='http://wordpress-buch.bueltge.de/wp-content/uploads/2007/04/wordpress-theme-backend-128.png' alt='WP Theme im Backend' /></p>
<p>Egal ob die Verwendung eines freien, kommerziellen oder selbst erstellten Themes in deinem Weblog zur Verwendung kommt, man kann mittels PHP viele schöne und nützliche Funktionen einbauen. Aber durch diese Mächtigkeit kann man ebenso einfach und unbewusst Sicherheitslücken in das System holen.</p>
<p>Damit soll keine Angst vor dem Erstellen und Ändern von Themes und Templates geschürt werden, sondern Bewusstsein und Verantwortung für das Verwenden von Themes und Templates erzogen werden.</p>
<p>Daher in wenigen Punkten, einige Tipps und Tricks, die es gilt zu beachten bzw. zu prüfen.<br />
<span id="more-31"></span></p>
<ol>
<li>
<h3><code>echo $_SERVER</code> prüfen</h3>
<p>Die direkte Ausgabe von Variablen, welche durch ungeprüfte Eingabe/ Übergabe gefüllt werden, is t nicht mit den PHP-Sicherheitsregeln in Einklang zu bringen.</p>
<p>Eine ganze Reihe von Themes nutzen den folgenden Syntax:</p>
<pre>
&lt;?php echo $_SERVER['REQUEST_URI']; ?&gt;
</pre>
<p>Beispielsweise in der <code>searchform.php</code></p>
<pre><code>
&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php echo $_SERVER['REQUEST_URI']; ?&gt;&quot;&gt;
</code></pre>
<p>Diese Ausgabe gehört da nicht hin, die Übergabe gehört gefiltert. Daher ist folgender Syntax zu nutzen.</p>
<pre><code>
&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php bloginfo('url'); ?&gt;/&quot;&gt;
</code></pre>
<p>Muss unbedingt mir <code>$_SERVER</code> gearbeitet werden, dann ist die Filterung der Daten anzuraten.</p>
<pre><code>
&lt;form method=&quot;get&quot; id=&quot;searchform&quot; action=&quot;&lt;?php echo htmlspecialchars($_SERVER['REQUEST_URI']); ?&gt;&quot;&gt;
</code></pre>
</li>
<li>
<h3><code>echo $s</code> prüfen</h3>
<p>Ähnlich verhält es sich mit der Ausgabe des Suchsyntax. Dabei handelt es sich um eine Übergabe von Nutzerwerten, die schnell zu einer <a href="http://bueltge.de/cross-site-scripting-xss/477/">XSS</a>-Lücke werden. Daher gilt auch hier das Filtern der Eingabe.</p>
<p>Vielfach in der <code>searchform.php</code> einiger Themes zu finden.</p>
<pre><code>
&lt;input type=&quot;text&quot; value=&quot;&lt;?php echo $s; ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; /&gt;
</code></pre>
<p>Die Lösung könnte, mit Sicherheitsmöglichkeiten von WordPress genutzt, wie folgt aussehen.</p>
<pre><code>
&lt;input type=&quot;text&quot; value=&quot;&lt;?php echo attribute_escape($s, 1); ?&gt;&quot; name=&quot;s&quot; id=&quot;s&quot; /&gt;
</code></pre>
<p>Alternativ kann auch die Verwendung der Funktion <code>the_search_query()</code> genutzt werden.</p>
<pre><code>
&lt;?php the_search_query(); ?&gt;
</code></pre>
</li>
<li>
<h3>Konstanten nutzen</h3>
<p>Es empfiehlt sich die Nutzung von Konstanten und nicht die Übergabe einer Variable als Pfadangabe. WordPress stellt dafür im Standard eine ganze Reihe von Möglichkeiten zur Verfügung.</p>
<ul>
<li><code>TEMPLATEPATH</code><br />
Ordner des aktiv genutzten Theme</li>
<li><code>STYLESHEETPATH</code><br />
Ordner des Stylesheets des aktiv genutzten Themes</li>
<li><code>ABSPATH</code><br />
Order der WP-Installation, dort, wo die <code>wp-config.php</code> liegt</li>
<li><code>WPINC</code><br />
Ordner <code>wp-includes</code></li>
<li><code>PLUGINDIR</code><br />
Ordner <code>wp-content/plugins</code></li>
</ul>
</li>
<li>
<h3>Prüfen</h3>
<p>Der <a href="http://blogsecurity.net/cgi-bin/wp-scanner.cgi">WP-Scanner</a> von BlogSecurity prüft die genannte Sicherheitslücke aus Punkt 1. Es empfiehlt sich diesen Scanner zu nutzen.</p>
<p>Um das eigene Blog zu scannen, muss lediglich ein Kommentar in der <em>header.php</em> bzw. <em>index.php</em>, falls es keine <em>header.php</em> gibt, hinterlegt werden.<br />
<code>&lt;!-- wpscanner --&gt;</code></p>
</li>
</ol>
<h3>Weitere Artikel und Referenzen</h3>
<ul>
<li>BlogSecurity: <a href="http://blogsecurity.net/wordpress/article-070607/">Common WP Theme Vulnerabilities</a></li>
<li><a href="http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/">WordPress Installation und Betrieb sicherer machen</a></li>
<li><a href="http://bueltge.de/wordpress-plugin-sicherheitsmoeglichkeiten/539/">WordPress Sicherheitsmöglichkeiten und PHP</a></li>
</ul>
<hr /><small>Author des Beitrags: Frank, <a href="http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/#comments" title="to the comments">9 Kommentare</a> zum Beitrag<br />&copy; <a href="http://www.wordpressbuch.de">WordPress-Buch</a>, All rights reserved / Alle Rechte vorbehalten. (ID: WPB3a6Be6Da38)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress-buch.bueltge.de/wordpress-templates-sicherer-machen/31/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>WordPress sicherer machen</title>
		<link>http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/</link>
		<comments>http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 10:53:55 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[Mehrwert]]></category>
		<category><![CDATA[Sicherheit]]></category>

		<guid isPermaLink="false">http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/</guid>
		<description><![CDATA[Ein Thema, welches ich im Buch leider vernachlässigt habe, ist das Thema Sicherheit. Dieses Thema ist aber immer relevanter, gerade weil WordPress immer populärer wird und damit auch immer interessanter für Hacker und Andere, die sich unbefugt Zutritt zu einer &#8230; <a href="http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://wordpress-buch.bueltge.de/wp-content/uploads/2007/07/wordpress-login-128.png" alt="WP Login" /></p>
<p>Ein Thema, welches ich im Buch leider vernachlässigt habe, ist das Thema Sicherheit. Dieses Thema ist aber immer relevanter, gerade weil WordPress immer populärer wird und damit auch immer interessanter für Hacker und Andere, die sich unbefugt Zutritt zu einer Web-Applikationen geben wollen.</p>
<p>Nicht zuletzt ist der Artikel also eine Aufforderung vieler Leser, die mir per E-Mail oder Online-Rezension, einen Hinweis darauf hinterlassen habe und denen ich mit diesem Artikel ein wenig helfen möchte, ihre WordPress-Installation sicherer zu machen.</p>
<p>Kurz &amp; Knapp - so werde ich also im folgenden einige Tipps für ein sicheres Weblog mit WordPress geben.<span id="more-30"></span></p>
<blockquote><p>Sicherheit - einen Zustand, der frei von unvertretbaren Risiken der Beeinträchtigung ist oder als gefahrenfrei angesehen wird.</p></blockquote>
<p><cite><a href="http://de.wikipedia.org/wiki/Sicherheit">Wikipedia</a></cite></p>
<p>Aber Achtung, damit will und kann ich nicht die Eigenverantwortung des jeweiligen Administrators herabsetzen oder abnehmen. Das Thema wird immer wieder präsent sein und die Sicherheitsregeln werden sich ändern. Nichtsdestotrotz kann man mit einigen wenigen Schritten die Installation recht sicher gestallten.</p>
<ol>
<li>
<h3>User-Name</h3>
<p>Nach jeder Installation ist der Standard-User-Name des Administrators <em>admin</em>. Diese Login-Name gehört als erstes geändert. Dieser Login-Name ist bekannt und sorgt dafür, dass eine unberechtigte Person nur noch an einem Wort tüfteln muss - dem Zugangspasswort. Mit einem eigenen Login-Namen erhöht man die Sicherheit des Systems.</p>
<p>Ist der Blog schon eine weile im Betrieb, so hat das Login sicher einiges an Daten - Artikel, Kommentare. Aber keine Angst, WordPress erlaub beim Löschen eines Users die Übernahme aller Daten auf einen anderen User.</p>
<h4>1.1. User ID</h4>
<p>Wer sich nicht vor dem Zugriff und dem Ändern in der Datenbank scheut, dem sei das Ändern der ID zu empfehlen. Die Standard-IDs 1 und 2 werden am ehesten von Hackern genutzt.<br />
Achtung, dazu muss die <code>user_id</code> in den Tabellen <code>_users</code> und <code>_usermeta</code> gleich sein! Ebenso gilt es die Tabelle <code>_posts</code>, <code>_links</code> mit dem neuen ID zu versehen, Spalte <code>post_author</code>.<br />
<code>UPDATE `wp_users` SET `ID` = “815″ WHERE `wp_users`.`ID` = 1;</code><br />
<code>UPDATE `wp_usermeta` SET `user_id` = '815' WHERE `wp_usermeta`.`user_id` = 1;</code><br />
<code>UPDATE `wp_posts` SET `post_author` = '815' WHERE `wp_posts`.`post_author` = 1;</code><br />
<code>UPDATE `wp_links` SET `link_owner` = '815' WHERE `wp_links`.`link_owner` = 1;</code></p>
<h4>Tipp</h4>
<p>Ich habe das Plugin <a href="http://wordpress.org/extend/plugins/search-and-replace/">Search &amp; Replace</a> erweitert und nun kann man mit einem Klick die User-Id und das User-Login einfach ändern, Kenntnisse im Bereich SQL sind nicht erforderlich.</li>
<li>
<h3>Tabellen-Präfix</h3>
<p>Der Tabellen-Präfix von WordPress ist im Standard <code>wp_</code>. Dieser ist in der <em>wp-config.php</em> hinterlegt.</p>
<h4>Neuinstallation</h4>
<p>Bevor WordPress installiert wird, sollte dieser Präfix geändert werden, in einen beliebigen Präfix, der nicht einfach auch das System schließen lässt.<br />
In der Regel hat WordPress bei vielen Anwendern sicher eine eigene Datenbank und so muss der Präfix nicht auf das System schließen lassen.</p>
<pre><code class="php">
// Wenn du verschiedene Präfixe benutzt kannst du innerhalb einer Datenbank
// verschiedene WordPress Installationen betreiben
$table_prefix  = 'wp_';   // Nur Zahlen, Buchstaben und Unterstriche bitte!
</code></pre>
<p><code>$table_prefix  = '08xyz15_';   // Nur Zahlen, Buchstaben und Unterstriche bitte!</code></p>
<h4>Bestehende Installation</h4>
<p>Was nun aber, wenn das Blog schon aufgesetzt und in Betrieb ist. Auch dann empfiehlt sich die Änderung des Präfix in eine kryptische Variante.</p>
<p>Natürlich muss auch dazu der Präfix in der <em>wp-config.php</em> geändert werden. Nun weis WordPress zwar, wie der neue Präfix lautet, aber die bestehenden Tabellen in der Datenbank haben diesen neuen Präfix noch nicht und das Blog kann somit nicht funktionieren.</p>
<p>Mit Hilfe eines SQL-Kommandos ist aber auch dies recht schnell zu beheben. Dazu nutzt man am besten phpMyAdmin, welches bei vielen Webhostern vorinstalliert ist.<br />
Die folgende SQL-Anweisung benennt die Tabelle <em>links</em> um.<br />
<code>RENAME TABLE wp_links to 08xyz15_links;</code></p>
<p>Diese Anweisung führt man für jede bestehende Tabelle aus. Dabei hat WordPress, ab Version 2.3, im Standard 10 Tabellen: <em>comments</em>, <em>links</em>, <em>options</em>, <em>postmeta</em>, <em>posts</em>, <em>terms</em>, <em>term_relationships</em>, <em>term_taxonomy</em>, <em>usermeta</em>, <em>users</em>.</p>
<pre><code>
RENAME TABLE wp_comments to 08xyz15_comments;
RENAME TABLE wp_links to 08xyz15_links;
RENAME TABLE wp_options to 08xyz15_options;
RENAME TABLE wp_postmeta to 08xyz15_postmeta;
RENAME TABLE wp_posts to 08xyz15_posts;
RENAME TABLE wp_terms to 08xyz15_terms;
RENAME TABLE wp_term_relationships to 08xyz15_term_relationships;
RENAME TABLE wp_term_taxonomy to 08xyz15_term_taxonomy;
RENAME TABLE wp_usermeta to 08xyz15_usermeta;
RENAME TABLE wp_users to 08xyz15_users;
</code></pre>
<p>Im Anschluss ist man nicht fertig! In den Tabellen options und usermeta müssen noch 4 Felder geändert werden. Dazu kann man folgenden Ql-Syntax nutzen.<br />
<code>UPDATE 08xyz15_options SET option_name = REPLACE(option_name, 'wp_', '08xyz15_');</code><br />
<code>UPDATE 08xyz15_usermeta SET meta_key = REPLACE(meta_key, 'wp_', '08xyz15_');</code></p>
<p>Sollte es aus irgendwelchen Gründen, z.B. ein Plugin, noch weitere Felder mit dem alten Präfix geben, dann kann man diese mit der folgenden Anweisung finden.<br />
<code>SELECT * FROM 08xyz15_options WHERE option_name LIKE 'wp_%';</code><br />
<code>SELECT * FROM 08xyz15_usermeta WHERE meta_key LIKE 'wp_%';</code></p>
<p>Handelt es sich um eine Installation kleiner WordPress Version 2.3, dann müssen folgenden 10 Tabellen berücksichtigt werden:  <em>categories</em>, <em>comments</em>, <em>link2cat</em>, <em>links</em>, <em>options</em>, <em>post2cat</em>, <em>postmeta</em>, <em>posts</em>, <em>usermeta</em>, <em>users</em>.</p>
<p>Natürlich gibt es auch für diese Arbeit ein Plugin, welches einem Anwender die Arbeit erleichtert und die Ändern schnell durchführt: <a href="http://blogsecurity.net/wordpress/wp-prefix-changer-v11-released/">WP Prefix Table Changer</a>.</li>
<li>
<h3>Plugin Verzeichnis schützen</h3>
<p>Das WordPress-Entwickler-Team empfiehlt die Sicherung durch einen einfachen Schutz, kopiere eine leere <em>index.html</em> in das Plugin-Verzeichnis <em>/wp-content/plugins/</em>. Damit ist man auf der sicheren Seite, falls der Apache das Anzeigen von leeren Verzeichnissen zulässt.</li>
<li>
<h3>WordPress Version verschleiern</h3>
<p>WordPress hinterlegt in den Core-Daten die Version der Installation und der Datenbank. Bisher hat man in der Regel im Theme die Version eingepflegt. Diese dient lediglich statistischen Erhebungen, denn darüber konnte man ein wenig die jeweils aktuell verfügbaren Installationen recht einfach erkennen.</p>
<p>Die Entwickler von WordPress empfehlen seit geraumer Zeit, dass man diesen Tag aus dem Theme entfernt um die Identifizierung zu erschweren. Dazu ist im Theme in der Regel die <em>header.php</em> zu ändern, in einigen Themes auch die <em>index.php</em>.</p>
<pre>&lt;meta name="generator"
content="WordPress &lt;?php bloginfo('version'); ?&gt;" /&gt;</pre>
<p>Die obige Zeile also entfernen.</p>
<p>Allerdings sollte man nicht verschweigen, dass man trotzdem die Version von WordPress in der einen oder anderen Funktion benötigt und das man die Version beispielsweise im Feed auslesen kann. Einige Plugins beispielsweise greifen auf die Version zu und können so auf unterschiedliche Installationen reagieren. Die Version der WordPress-Installation und der Datenbank ist immer in <em>/wp-includes/version.php</em> zu finden. Wer also die Version komplett verschleiern will, der ändert den Eintrag in dieser Datei. Sollte es dann aber zu Problemen mit dem einen oder anderen Plugin oder Theme kommen, dann sollte man sich zumindest an diesen Eingriff erinnern.</p>
<pre>
$wp_version = '2.2.3';

$wp_db_version = 5183;
</pre>
<p>Ebenso ist darauf zu achten, nach jedem Update der Installation ist diese Datei wieder hergestellt.</p>
<p>Mit dem Löschen bzw. Ändern des Eintrags funktioniert außerdem der automatische Hinweis auf eine neue Version und der Hinweis auf neue Plugin-Versionen, der seit WordPress Version 2.3.1 vorhanden ist, nicht mehr zuverlässig bzw. gar nicht.</p>
<h4>Tipp</h4>
<p>Ich habe ein Plugin erstellt, was die Version von WordPress ersetzt, entweder mit einer Zufallszahl oder ab Version 2.4 wird der komplette Tag gelöscht. Damit werden keine Informationen nach außen getragen und man muss nach einem WP-Update nicht die Core-Dateien ändern.<br />
Weitere Information und Download des Plugins sind auf meinem Privaten Blog im Artikel <a href="http://bueltge.de/wordpress-version-verschleiern-plugin/602/">WordPress Version verschleiern (Plugin)</a> zu finden.</li>
<li>
<h3>WordPress User-Logins reduzieren</h3>
<p>Im Normalfall hat das Backend nur so viele User, wie man auch wirklich Personen hat, die im System arbeiten. Test-User oder Überbleibsel gehören gelöscht.<br />
Ein Augenmerk gehört den Rechten. Es ist zu überprüfen, welche Rechte jeder User hat und ob diese wirklich notwendig sind. Es ist kein Zeichen von Angst oder Geiz, wenn die Rechte der User eingeschränkt sind, auf die jeweiligen Anforderungen und Bedürfnisse zugeschnitten.</p>
<h4>Ein Tipp</h4>
<p>Mit Hilfe des Plugins <del datetime="2010-12-10T18:36:25+00:00"><a href="http://www.im-web-gefunden.de/wordpress-plugins/role-manager/">Role Manager</a></del> <a href="http://wordpress.org/extend/plugins/members/">Members</a> lassen sich hervorragend Benutzerrechte erstellen. So lassen sich einfach und übersichtlich entsprechend zugeschnittene Rollen für die jeweiligen Nutzer-Aufgaben erstellen, falls die Rollen im Standard nicht ausreichen.</li>
<li>
<h3>WordPress aktualisieren</h3>
<h4>WordPress Core</h4>
<p>Nicht zu letzt ist es wichtig, dass die Installation immer auf dem aktuellen Sicherheitsstand ist, das heißt: Spiele immer das aktuelle Release ein! Die aktuelle Release-Version sichert die Sicherheit von WordPress.<br />
Das heißt nicht, dass man immer die aktuellste Version von WordPress installiert haben muss. Aber das aktuellste Release der verwendeten Version sollte eingespielt sein.</p>
<p>Um auf dem aktuellen Stand zu bleiben, bietet es sich an, den <a href="http://wordpress.org/development/feed/">Feed von WordPress</a> zu abonnieren bzw. immer mal den Tellerrand des eigenen Blogs zu lesen, denn dort wird der Feed-Inhalt dargestellt.<br />
Ab der Version WP 2.3.1 weist das System darauf hin, dass es eine neue Revision/ Version gibt.  Wer den Zugriff nicht ermöglich will, der findet eine Reihe von Plugins im <a href="http://wordpress.org/extend/plugins/">offiziellen Plugin-Verzeichnis</a>, die diese Verbindung unterbrechen.</p>
<h4>WordPress Plugins</h4>
<p>Gleiches gilt für Plugins. Plugins stellen neue Funktionalitäten innerhalb des Systems und können damit neue Sicherheitslücken einbringen. Vertraue nicht jedem Plugin und versuche die Plugins immer auf dem aktuellen Stand zu halten, auch wenn meist neue Versionen neue Funktionalitäten einbringen.</p>
<p>Im weiteren gehören nicht genutzte Plugins nicht in das laufende System. Werden sie nicht benötigt, dann gehören sie entfernt.</p>
<h4>WordPress Theme</h4>
<p>Auch Themes können Sicherheitsprobleme aufweisen! Themes mit ihren Templates nutzen PHP-Funktionen und können neue Funktionen im Bauch haben. Damit können Sicherheitslücken auftauchen. Es gilt also ebenfalls, auch Updates des Autors achten.</li>
<li>
<h3>WP Plugins minimieren</h3>
<p>Wie schon im vorherigen Punkt erwähnt, Plugins können neue Sicherheitslücken in das System einbringen. Daher sollte immer die Überlegung gelten, muss es wirklich dieses Plugin sein. Bringt es Mehrwert und eventuell sollte man prüfen, wie gut ist das Plugin. Natürlich ist es schwer, vor allem wenn man keine PHP-Kenntnisse hat, den Code zu inspizieren und damit ein eventuell bestehendes Problem zu finden. Aber trotzdem kann man ein wenig die Seriosität des Plugin-Autors prüfen. Hat der Autor eine Anleitung zum Plugin, gibt es negative Schlagzeilen bzw. Blogeinträge und Kommentare und ist das Impressum des Autors gepflegt? Kleinigkeiten, die aber einiges über den Autor und das Plugin aussagen können.</p>
<ol>
<li>Die Grundregel lautet jedoch: <strong>Verwende so wenig wie nötig Plugins.</strong></li>
<li>Un die zweite Regel: <strong>Teste Plugins nicht im Live-System, ein Vorabtest in einer lokalen Installation kann viele Probleme verhindern.</strong></li>
</ol>
</li>
<p>Auch der zweite Punkt hat wichtige Relevanz. Immer wieder holen sich User Problem und unnötige Daten in ihr System. Viele Plugins benötigen Einstellungen, die in der Tabelle <em>options</em> abgelegt werden. Diese Daten bleiben bei den meisten Plugins auch nach dem deaktivieren des Plugins in der Tabelle bestehen!</p>
<li>
<h3>Eingeschränkter Login auf <em>wp-admin</em></h3>
<p>Ist der Zugriff auf das Backend nur von einem oder wenigen Rechnern gesichert, so kann man den Zugriff einschränken und damit die Sicherheit weiter steigern. Der Zugriff ist einfach per <em>.htaccess</em> zu beschränken. Information zu <em>.htaccess</em> gibt es viele im Internet. Die Zugriffssperre könnte zum Beispiel für zwei IPs wie folgt aussehen.</p>
<pre>
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "Access Control"
AuthType Basic
Order deny,allow
Deny from all
# Whitelist IP Adresse
Allow from 255.08.15.1
Allow from 255.08.15.2
</pre>
<p>Diese Syntax in eine leere Datei ablegen und die eigenen IPs hinterlegen und die Datei als <em>.htaccess</em> speichern. Die Datei im Anschluss im Ordner <em>/wp-admin/</em> ablegen.</p>
<p>Ob man den Zugriff einschränken muss und will, das muss jeder Anwender selbst entscheiden.</p>
<p>Aber es damit ist natürlich die schöne Funktionalität einer Web-Applikation dahin, von überall auf das System zugreifen zu können.</p>
<h4>via Plugin</h4>
<p>Alternativ kann man dies auch per Plugin realisieren, was einfacher und schneller für den Laien zu bewerkstelligen ist. Als Plugin dient das <a href="http://bad-neighborhood.blogsblogsblogs.com/2007/08/29/login-lockdown-a-new-wordpress-security-plugin/">Login Lockdown Plugin</a> oder <a href="http://www.askapache.com/wordpress/htaccess-password-protect.html">AskApache Password Protect</a>.</li>
<li>
<h3>Eingeschränkter Zugriff auf <em>wp-content</em> und <em>wp-includes</em></h3>
<p>Mit Hilfe einer <em>.htaccess</em> kann man ein ganze Reihe von Daten schützen. Mit Hilfe dieser Methode empfiehlt es sich den Zugriff nur auf bestimmte Datei-Formate, wie Bilder, Stylesheets und JavaScript zu beschränken.</p>
<pre>Order deny,allow
Deny from all
&lt;Files ~ ".(xml|css|jpe?g|png|gif|js)$"&gt;
Allow from all
&lt;/Files&gt;</pre>
<p>Der obige Syntax wird wieder in einer<em> .htaccess</em> gespeichert und die Ordner <em>/wp-content/</em> und <em>/wp-includes/</em> kopiert. Die Datei-Endungen im Syntax müssen natürlich angepasst werden, je nach dem, auf was für Dateien man zugreifen muss.</p>
<p><strong>Aufpassen</strong>, das eine oder andere Plugin benötigt den Zugriff auf php-Dateien. Daher den Syntax in dem Fall um <code>php</code> erweitern. Zumindest für die <em>.htacces</em> in <em>/wp-content/</em> empfiehlt sich die Aufnahme von <code>php</code>. Ähnlich verhält es sich, wenn man den Cache von WordPress aktiv hat, dann muss man den Zugriff auf <code>lock</code> erlauben.</p>
<pre>
# Allow only css,jpe*g,png,gif,js
Order deny,allow
Deny from all
&lt;Files ~ ".(php|lock|xml|css|jpe?g|png|gif|js)$"&gt;
Allow from all
&lt;/Files&gt;
</pre>
<p>Im weiteren ist darauf zu achten, dass man nur eine <em>.htaccess</em>-Datei im Ordner hat. Sollte man also ebenfalls den Zugriff per <em>.htaccess</em> aus Punkt 8 nutzen, so muss der Syntax in einer Datei untergebracht werden.</li>
<li>
<h3>Schütze die <em>wp-config.php</em></h3>
<p>Ein weiterer Schutz ist der Zugriff auf die <em>wp-config.php</em>, in der alle Daten zum einloggen in die Datenbank hinterlegt sind. Im Grunde gibt es diesen Zugriff nicht, aber mit dieser kleinen Erweiterung in der <em>.htaccess</em> im root-Verzeichnis der Installation, geht man auf Nummer sicher.</p>
<pre>
# protect wp-config.php
&lt;files wp-config.php&gt;
Order deny,allow
Deny from all
&lt;/files&gt;
</pre>
<p>Viele weitere Informationen dazu mit einigen Beispielen und Diskussionen findet man im <a href="http://bueltge.de/schuetze-deine-wp-configphp/547/">zugehörigen Artikel</a> auf meinem privaten Blog.</li>
<li>
<h3>Sicherheit prüfen</h3>
<p>Das Team von BlogSecurity bietet die <a href="http://blogsecurity.net/cgi-bin/wp-scanner.cgi">Online-Version des WP-Scanners</a> schon eine geraume Zeit an und aktualisiert diesen auch immer wieder.</p>
<p>Nicht immer liegt es an den Dateien von WordPress, auch das Theme kann Sicherheitslücken enthalten.</p>
<p>Um das eigene Blog zu scannen, muss lediglich ein Kommentar in der <em>header.php</em> bzw. <em>index.php</em>, falls es keine <em>header.php</em> gibt, hinterlegt werden.<br />
<code>&lt;!-- wpscanner --&gt;</code></p>
<p>Der Scan ist kritisch zu sehen aber er hilft und erleichtert die Arbeit.</li>
</ol>
<hr /><small>Author des Beitrags: Frank, <a href="http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/#comments" title="to the comments">115 Kommentare</a> zum Beitrag<br />&copy; <a href="http://www.wordpressbuch.de">WordPress-Buch</a>, All rights reserved / Alle Rechte vorbehalten. (ID: WPB3a6Be6Da38)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress-buch.bueltge.de/wordpress-sicherer-machen/30/feed/</wfw:commentRss>
		<slash:comments>115</slash:comments>
		</item>
		<item>
		<title>Userlevel bezogene Ausgabe im Template</title>
		<link>http://wordpress-buch.bueltge.de/userlevel-bezogene-ausgabe-im-template/28/</link>
		<comments>http://wordpress-buch.bueltge.de/userlevel-bezogene-ausgabe-im-template/28/#comments</comments>
		<pubDate>Wed, 10 Oct 2007 13:09:39 +0000</pubDate>
		<dc:creator>Frank</dc:creator>
				<category><![CDATA[FAQ]]></category>
		<category><![CDATA[Mehrwert]]></category>
		<category><![CDATA[Berechtigung]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[User Level]]></category>

		<guid isPermaLink="false">http://wordpress-buch.bueltge.de/userlevel-bezogene-ausgabe-im-template/28/</guid>
		<description><![CDATA[Soll die Ausgabe von einigen Inhalten auf dem Blog nur Personen zugänglich sein, die entsprechende Rechte in Ihrem Weblog haben, so kann man innerhalb des Templates eine Abfrage hinterlegen. Mit folgendem Code wird geprüft, ob der User eingeloggt ist und &#8230; <a href="http://wordpress-buch.bueltge.de/userlevel-bezogene-ausgabe-im-template/28/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" src="http://wordpress-buch.bueltge.de/wp-content/uploads/2007/07/roles_128.png" alt="Roles" /></p>
<p>Soll die Ausgabe von einigen Inhalten auf dem Blog nur Personen zugänglich sein, die entsprechende Rechte in Ihrem Weblog haben, so kann man innerhalb des Templates eine Abfrage hinterlegen.</p>
<p>Mit folgendem Code wird geprüft, ob der User eingeloggt ist und ob er die entsprechende Berechtigung hat, dabei stehen die User_Level 0-10 zur Verfügung.<br />
<span id="more-28"></span><br />
Wie sich die einzelnen Berechtigungen auswirken ist im <a title="zum WordPress Codex-Roles_and_Capabilities" href="http://codex.wordpress.org/Roles_and_Capabilities">Codex</a> ausführlich nachzulesen.</p>
<pre>&lt;?php if (intval($userdata-&gt;user_level) &gt;= 9 ) {
function();
. . .
?&gt;</pre>
<p><strong>Update:</strong><br />
Tobias weist mich darauf hin, Danke. Ich bringe gleich mal ein Update, denn WordPress gibt den Nutzer dafür seit geraumer Zeit eine Funktion in die Hand.</p>
<pre>&lt;?php if( current_user_can('level_10') ) {
function();
. . .
?&gt;</pre>
<p>In einem Template könnte man es dann wie folgt nutzen.</p>
<pre><code>
&lt;?php if( current_user_can('level_10') ) { echo 'Level 10'; } else { echo '&lt; LEVEL 10'; } ?&gt;
</code></pre>
<p>Das obige Beispiel gibt <em>Level 10</em> aus, wenn der angemeldete User über Adminrechte verfügt, alternativ wird <em>&lt; LEVEL 10</em> ausgegeben.</p>
<p>Benötigt man zusätzlich das User-ID, dann ist es wie folgt zu lösen. Die obige Version sollte aber in den meisten Fällen ausreichen.</p>
<pre>&lt;?php global $user_ID; if( $user_ID ) : ?&gt;

&lt;?php if( current_user_can('level_10') ) : ?&gt;

&lt;p&gt;Inhalt, nur fuer den Admin (Level 10)&lt;/p&gt;

&lt;?php else : ?&gt;

&lt;?php endif; ?&gt;

&lt;?php endif; ?&gt;</pre>
<p>Folgende Tabelle stellt eine Übersicht der Berechtigungen in WordPress dar.</p>
<table id="tab" class="center" border="0" summary="User_Level Zuordnung Benutzerrolle">
<tbody>
<tr class="alt">
<th>Rolle</th>
<th>User Level</th>
</tr>
<tr>
<td>Administrator</td>
<td>0 - 10</td>
</tr>
<tr class="alt">
<td>Herausgeber</td>
<td>0 - 7</td>
</tr>
<tr>
<td>Autor</td>
<td>0 - 2</td>
</tr>
<tr class="alt">
<td>Mitarbeiter</td>
<td>0 - 1</td>
</tr>
<tr>
<td>Registrierter Leser</td>
<td>0</td>
</tr>
</tbody>
</table>
<hr /><small>Author des Beitrags: Frank, <a href="http://wordpress-buch.bueltge.de/userlevel-bezogene-ausgabe-im-template/28/#comments" title="to the comments">4 Kommentare</a> zum Beitrag<br />&copy; <a href="http://www.wordpressbuch.de">WordPress-Buch</a>, All rights reserved / Alle Rechte vorbehalten. (ID: WPB3a6Be6Da38)</small></p>
]]></content:encoded>
			<wfw:commentRss>http://wordpress-buch.bueltge.de/userlevel-bezogene-ausgabe-im-template/28/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

