<?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>mein gott und meine welt &#187; myQuellcode</title>
	<atom:link href="http://meingottundmeinewelt.de/category/computer/myquellcode/feed/" rel="self" type="application/rss+xml" />
	<link>http://meingottundmeinewelt.de</link>
	<description>nichts für leute die aus ihren dogmen nicht ausbrechen können</description>
	<lastBuildDate>Tue, 07 Feb 2012 10:02:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Einmalig g&#252;ltiger Downloadlink mit PHP</title>
		<link>http://meingottundmeinewelt.de/2011/01/29/einmalig-gueltiger-downloadlink-mit-php/</link>
		<comments>http://meingottundmeinewelt.de/2011/01/29/einmalig-gueltiger-downloadlink-mit-php/#comments</comments>
		<pubDate>Sat, 29 Jan 2011 18:33:20 +0000</pubDate>
		<dc:creator>ich</dc:creator>
				<category><![CDATA[myQuellcode]]></category>

		<guid isPermaLink="false">http://meingottundmeinewelt.de/?p=5716</guid>
		<description><![CDATA[Mal wieder etwas PHP-Gefrickel von mir: if &#40;isset&#40;$_GET&#91;'tan'&#93;&#41;&#41;&#123; $tan = preg_replace&#40;'/[^a-f0-9]/', '', $_GET&#91;'tan'&#93;&#41;; $check = @unlink&#40;'tan/'.$tan&#41;; if &#40;$check === true&#41; &#123; $basedir = '/home/downloads/'; $datei = 'datei.zip'; $filename = sprintf&#40;'%s/%s', $basedir, $datei&#41;; header&#40;'Content-Type: application/octet-stream'&#41;; $save_as_name = basename&#40;$datei&#41;; header&#40;'Content-Disposition: attachment; filename='.$save_as_name&#41;; readfile&#40;$filename&#41;; &#125; else &#123; echo 'TAN war FALSCH!'; &#125; exit; &#125; Dazu noch in das [...]]]></description>
			<content:encoded><![CDATA[<p>Mal wieder etwas PHP-Gefrickel von mir:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tan'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$tan</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/[^a-f0-9]/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tan'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$check</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tan/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$check</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$basedir</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/home/downloads/'</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$datei</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'datei.zip'</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$filename</span> <span style="color: #339933;">=</span> <span style="color: #990000;">sprintf</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'%s/%s'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$basedir</span><span style="color: #339933;">,</span> <span style="color: #000088;">$datei</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Type: application/octet-stream'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$save_as_name</span> <span style="color: #339933;">=</span> <span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$datei</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Disposition: attachment; filename='</span><span style="color: #339933;">.</span><span style="color: #000088;">$save_as_name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">readfile</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$filename</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'TAN war FALSCH!'</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #990000;">exit</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Dazu noch in das Verzeichnis <code>tan</code> einige leere Dateien mit den Dateinamen<br />
<code>246e238a14fcbe127c16add83492f2ff63ea63d8<br />
b7c39fd38a24e8c5a79f89b22c890bc36b480528<br />
ea072e3a66c938ff2a23aff99c28a11606487ca4<br />
...</code><br />
kopieren und schon k&#246;nnen Downloadlinks nach dem folgenden Muster verteilt werden:<br />
<code>http://download/?tan=246e238a14fcbe127c16add83492f2ff63ea63d8</code><br />
<br style="clear:both" /><br />
Die Aufgabenstellung war die folgende: Da m&#246;chte jemand digitale Inhalte verkaufen, diese aber erst nach erfolgreicher Bezahlung zur Verf&#252;gung stellen. Da pro Jahr nur mit einer Handvoll Bestellungen zu rechnen ist, ist eine automatische Abwicklung viel zu aufw&#228;ndig. Der Versand eines Downloadlinks per E-Mail ist eine durchaus praktikable L&#246;sung.</p>
<p>Meine Idee dazu ist das TAN-Verfahren wie es beim Online-Banking Verwendung findet.<br />
<br style="clear:both" /><br />
Meine TAN besteht einfach aus einer leeren Datei, deren Dateiname ein Hash ist, also Ziffern von 0 bis 9 und Buchstaben von a bis f. Das <code>preg_replace</code> sorgt daf&#252;r, dass nichts anderes angenommen wird, als diese Zeichen. Per <code>unlink</code> wird die TAN bzw. die Datei gel&#246;scht. Konnte die Datei erfolgreich gel&#246;scht werden, so war die TAN korrekt, wenn nicht, dann eben nicht &mdash; ganz einfach. War die TAN korrekt, startet automatisch der Download. Damit der Link zur Datei zum einen nicht in dem Download-Manager des Browsers erkennbar ist und zum zweiten die Datei au&#223;erhalb von htdocs liegen kann und nur mit Script runtergeladen werden kann, habe ich mich hiervon inspirieren lassen, bzw. den gr&#246;&#223;en Teil daraus entnommen: <a target="_blank" href="http://www.php-faq.de/q-datei-download.html" >http://www.php-faq.de/q-datei-download.html</a><br />
<br style="clear:both" /><br />
Wenn in ein paar Jahren die TANs aufgebraucht sind, dann m&#252;ssen nur Dateien mit entsprechendem Dateinamen in das <code>tan</code>-Verzeichnis kopiert werden. :O)<br />
<br style="clear:both" /><br />
<strong>Update: 04.02.2011 &#8211; 13:43 Uhr</strong></p>
<p>Konstruktive Kritik und etwas Nachdenken hat nun die preAlpha-Version zur 1xDownloadLink-V.2011.02 erhoben. ;O)</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tan'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   <span style="color: #000088;">$tan</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/[^a-f0-9]/'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'tan'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$check</span> <span style="color: #339933;">=</span> <span style="color: #990000;">file_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tan/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$check</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">FALSE</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'TAN war FALSCH!'</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">unlink</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tan/'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tan</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Type: application/octet-stream'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Disposition: attachment; filename=datei.zip'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Content-Length: 2330'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #990000;">readfile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/Applications/MAMP/downloads/datei.zip'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">exit</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://meingottundmeinewelt.de/2011/01/29/einmalig-gueltiger-downloadlink-mit-php/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Website laden: GET- und POST-Request</title>
		<link>http://meingottundmeinewelt.de/2010/05/29/website-laden-get-und-post-request/</link>
		<comments>http://meingottundmeinewelt.de/2010/05/29/website-laden-get-und-post-request/#comments</comments>
		<pubDate>Sat, 29 May 2010 12:12:50 +0000</pubDate>
		<dc:creator>ich</dc:creator>
				<category><![CDATA[myQuellcode]]></category>

		<guid isPermaLink="false">http://meingottundmeinewelt.de/?p=4724</guid>
		<description><![CDATA[Es kann verschiedene Gr&#252;nde geben weshalb der Download einer Website gew&#252;nscht wird. Bei mir hat es meist damit zutun dass ich eine Schwachstelle in einer Website gefunden habe und die anfallenden Daten speichern muss , um diese einfacher auswerten zu k&#246;nnen. GET-Request Eine Website zu laden, deren URL komplett mit allen &#252;bertragenen Parametern in der [...]]]></description>
			<content:encoded><![CDATA[<p>Es kann verschiedene Gr&#252;nde geben weshalb der Download einer Website gew&#252;nscht wird. Bei mir hat es meist damit zutun dass ich eine Schwachstelle in einer Website gefunden habe und die anfallenden Daten speichern muss , um diese einfacher auswerten zu k&#246;nnen.<br />
<br class="clearboth" /></p>
<h2>GET-Request</h2>
<p>Eine Website zu laden, deren URL komplett mit allen &#252;bertragenen Parametern in der Adresszeile des Browsers angezeigt wird, ist mit PHP sehr einfach m&#246;glich.</p>
<p><code>$seite = file_get_contents('http://sld.tld/?x=1&amp;y=2');<br />
$datei = fopen('file.txt', 'w');<br />
fputs($datei, $seite);<br />
fclose($datei);</code></p>
<p>Die Website <code>http://sld.tld/?x=1&amp;y=2</code>, bzw. der Quellcode der im Browser angezeigt werden w&#252;rde, wird in der Datei <code>file.txt</code> gespeichert.<br />
<br class="clearboth" /></p>
<h2>POST-Request</h2>
<p>Werden in der Adresszeile allerdings nicht alle &#252;bertragenen Parameter angezeigt, dann muss schon etwas mehr Aufwand betrieben werden, um die Seite speichern zu k&#246;nnen.</p>
<p><code>$post = array(<br />
&nbsp;&nbsp;'var1' =&gt; 'a',<br />
&nbsp;&nbsp;'var2' =&gt; 'b',<br />
&nbsp;&nbsp;'var3' =&gt; 'c'<br />
);</p>
<p>$context_options = array (<br />
&nbsp;&nbsp;'http' =&gt; array (<br />
&nbsp;&nbsp;'method' =&gt; 'POST',<br />
&nbsp;&nbsp;'header' =&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;Content-type: application/x-www-form-urlencoded\r\n&quot;.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;Content-length: &quot;.strlen(http_build_query($post)).&quot;\r\n&quot;.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;Referer: http://sld.tld \r\n&quot;.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&quot;User-Agent:  Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)\r\n&quot;,<br />
&nbsp;&nbsp;'content' =&gt; http_build_query($post)<br />
&nbsp;&nbsp;)<br />
);</p>
<p>$context = stream_context_create($context_options);<br />
$seite = file_get_contents(<br />
&nbsp;&nbsp;'http://sld.tld/page',false,$context<br />
);</p>
<p>$datei = fopen('file.txt', 'w');<br />
fputs($datei, $seite);<br />
fclose($datei);<br />
</code></p>
<p>Auch dieses Beispiel speichert die Website in der Datei <code>file.txt</code> ab. Die einzelnen zu &#252;bertragenen Parameter werden in dem Array der Variable <code>$post</code> hinterlegt. Da manchmal der Referer, also die aufrufende Seite, f&#252;r die korrekte Funktion einer Seite erforderlich ist, kann auch dies hinterlegt werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://meingottundmeinewelt.de/2010/05/29/website-laden-get-und-post-request/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Men&#252;-Sonderanfertigung f&#252;r Website Baker</title>
		<link>http://meingottundmeinewelt.de/2008/04/04/menue-sonderanfertigung-fuer-website-baker/</link>
		<comments>http://meingottundmeinewelt.de/2008/04/04/menue-sonderanfertigung-fuer-website-baker/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 21:59:50 +0000</pubDate>
		<dc:creator>ich</dc:creator>
				<category><![CDATA[myQuellcode]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://meingottundmeinewelt.de/2008/04/04/menue-sonderanfertigung-fuer-website-baker/</guid>
		<description><![CDATA[F&#252;r nicht zu umfangreiche WebSites benutze ich gerne das CMS Website Baker, da das Backend auch von Usern bedient werden kann, durch deren Adern keine Bits &#38; Bytes flie&#223;en. ;O) Einen Haken hat Website Baker: Wenn ein Men&#252; verschachtelt ist, mit Sub- und SubSubMen&#252;s, dann ist die eingebaute Funktion show_menu relativ unbrauchbar und das Modul [...]]]></description>
			<content:encoded><![CDATA[<p>F&#252;r nicht zu umfangreiche WebSites benutze ich gerne das CMS <a href="http://start.websitebaker2.org/de/einfuehrung.html" title="Link zur offiziellen deutschen Seite zu Website Baker"  target="_blank">Website Baker</a>, da das Backend auch von Usern bedient werden kann, durch deren Adern keine Bits &amp; Bytes flie&#223;en. ;O)</p>
<p>Einen Haken hat Website Baker: Wenn ein Men&#252; verschachtelt ist, mit Sub- und SubSubMen&#252;s, dann ist die eingebaute Funktion show_menu relativ unbrauchbar und das Modul <a href="http://addons.websitebaker.org/pages/modules/code-snippets.php" title="Link zur Downloadseite"  target="_blank">show_menu2</a>, welches man nachinstallieren kann, taugt leider auch nicht viel. Die Doku zu show_menu2 ist grottig und die Beispiele zeigen nicht das was ich haben m&#246;chte.</p>
<p>Mit der eingebauten show_menu-Funktion sieht ein Men&#252; z.B. so aus:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="518" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="scale" value="exactfit" /><param name="menu" value="true" /><param name="bgcolor" value="#ffffff" /><param name="src" value="../../../../../wp-content/videos/gghwbmenue-1.swf" /><embed type="application/x-shockwave-flash" width="425" height="518" src="../../../../../wp-content/videos/gghwbmenue-1.swf" bgcolor="#ffffff" menu="true" scale="exactfit" quality="high"></embed></object></p>
<p>Da diese Darstellung sehr unbefriedigend ist und immer nur der gerade aktive Men&#252;punkt hervorgehoben wird, habe ich an einer Systemdatei des CMS etwas rumgefingert und dann sieht das gleiche Men&#252; folgenderma&#223;en aus:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="420" height="518" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="quality" value="high" /><param name="scale" value="exactfit" /><param name="menu" value="true" /><param name="bgcolor" value="#ffffff" /><param name="src" value="../../../../../wp-content/videos/gghwbmenue-2.swf" /><embed type="application/x-shockwave-flash" width="420" height="518" src="../../../../../wp-content/videos/gghwbmenue-2.swf" bgcolor="#ffffff" menu="true" scale="exactfit" quality="high"></embed></object></p>
<p>In die class.frontend.php von Website Baker 2.6.7 habe ich ab Zeile 367 (V 2.7: Zeile 381) folgendes eingef&#252;gt:</p>
<p><code>if (ROOT_PARENT==$page['page_id'] and $class==' class=&quot;menu_default&quot;') {<br />
$class = str_replace('menu_default&quot;', 'menu_default level0&quot;', $class);<br />
} elseif (PARENT==$page['page_id'] and $class==' class=&quot;menu_default&quot;') {<br />
$class = str_replace('menu_default&quot;', 'menu_default level1&quot;', $class);<br />
} elseif (LEVEL==0 and $class==' class=&quot;menu_current&quot;') {<br />
$class = str_replace('menu_current&quot;', 'menu_current level0&quot;', $class);<br />
}<br />
</code><br />
Und das CSS dazu enth&#228;lt folgendes:</p>
<p><code>#menue { font-size: 0.8em; line-height: 25px;}<br />
#menue ul { margin: 0; padding: 0; }<br />
#menue ul li { list-style: none; display: inline; margin: 0; padding: 0;}<br />
#menue ul li a { color: #222222; text-decoration: none; display: block; padding-left: 5px; background-image: url(../img/menu-bg.jpg); border-bottom: 1px solid #aeaeae; }<br />
#menue ul li a:hover {background-color: #cccccc; }<br />
#menue ul li a.menu_current { background-color: #cccccc; color: #000000; }<br />
#menue ul ul li a {padding-left: 20px; background: #ebebeb; }<br />
#menue ul ul ul li a { padding-left: 35px; }<br />
#menue ul ul ul ul li a { padding-left: 45px; }<br />
#menue ul li a.level0 { background-image: url(../img/menu-activ-bg.jpg); color: #FFF;}<br />
#menue ul li a.level1 { background-color: #ebebeb; color: #066a38;}</code></p>
<p>Vielleicht bin ich auch nur zu dumm, um das Modul show_menu2 richtig zu benutzen, aber nach mehreren Stunden t&#252;fteln, Googlesuche und Doku lesen, war es f&#252;r mich sehr viel einfacher (und schneller) etwas am Website Baker Quellcode abzu&#228;ndern, was nun genau das macht was ich will. Bei solchen Aktionen lernt man auch etwas &#252;ber das Innenleben einer Open Source Software. :O)</p>
]]></content:encoded>
			<wfw:commentRss>http://meingottundmeinewelt.de/2008/04/04/menue-sonderanfertigung-fuer-website-baker/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress sicherer machen</title>
		<link>http://meingottundmeinewelt.de/2008/02/08/wordpress-sicherer-machen/</link>
		<comments>http://meingottundmeinewelt.de/2008/02/08/wordpress-sicherer-machen/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 12:59:48 +0000</pubDate>
		<dc:creator>ich</dc:creator>
				<category><![CDATA[myQuellcode]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://meingottundmeinewelt.de/2008/02/08/wordpress-sicherer-machen/</guid>
		<description><![CDATA[Die Berichte &#252;ber die Probleme mit den Supportforen haben hoffentlich auch die WP-Entwickler erreicht. Das Problem von normalen/einfachen/ungesalzener MD5-Hashes sind die Rainbow Tables, also vorausberechnete Hashwerte. Wenn man als Passwort zum Beispiel &#8220;password&#8221; benutzt, so wird immer der gleiche MD5-Hash erzeugt: md5(password) =&#62; 5f4dcc3b5aa765d61d8327deb882cf99 Google kennt z.Zt. 4630 Ergebnisse f&#252;r diesen Hash und wenn man [...]]]></description>
			<content:encoded><![CDATA[<p>Die Berichte &#252;ber die <a href="http://www.heise.de/newsticker/meldung/103049"  target="_blank" title="Link zu heise">Probleme</a> mit den Supportforen haben hoffentlich auch die WP-Entwickler erreicht.</p>
<p>Das Problem von normalen/einfachen/<a href="http://de.wikipedia.org/wiki/Salted_Hash"  target="_blank" title="Link zu Wikipedia">ungesalzener</a> MD5-Hashes sind die <a href="http://de.wikipedia.org/wiki/Rainbow_Table"  target="_blank" title="Link zu Wikipedia">Rainbow Tables</a>, also vorausberechnete Hashwerte. Wenn man als Passwort zum Beispiel &#8220;password&#8221; benutzt, so wird immer der gleiche MD5-Hash erzeugt:</p>
<p>md5(password) =&gt; 5f4dcc3b5aa765d61d8327deb882cf99</p>
<p>Google kennt z.Zt. 4630 Ergebnisse f&#252;r diesen Hash und wenn man die Suche weiter einschr&#228;nkt findet man auch SQL-Dumps, in denen dieser Hash vorkommt. Mit anderen Worten: Auch hier hilft Google dem Hacker und das zu geringe Sicherheitsbewu&#223;tsein der Softwareentwickler verst&#228;rkt das Problem enorm.</p>
<p>Fast jede Software benutzt MD5 zum Erzeugen von Hashwerten, WordPress ebenfalls. Im Quellcode von WP kommt zwar auch</p>
<p>&raquo;md5($data . $salt)&laquo; oder auch &raquo;md5( md5($password) )&laquo;</p>
<p>vor, aber der Passworthash in der wp_users ist nur ein einfacher MD5-Hash. Das hei&#223;t wer die Datenbank auslesen kann hat die Hashwerte f&#252;r die Passworte der User. Da viele User immer wieder die gleichen Passworte benutzen&#8230; das Passwortproblem und User hatte ich bereits <a href="http://meingottundmeinewelt.de/2007/10/14/user-und-passwoerter/"  target="_blank">hier</a> und <a href="http://meingottundmeinewelt.de/2007/07/10/ignoranz-der-webmaster/"  target="_blank">hier</a> erw&#228;hnt.</p>
<p>Der unberechtigte Zugriff auf die Datenbank kann durch verschiedene Probleme m&#246;glich sein. Ein Fehler in der Software selber, also z.B. per <a href="http://de.wikipedia.org/wiki/SQL-Injektion"  target="_blank" title="Link zu Wikipedia">SQL-Injection</a> das Adminpasswort &#252;berschreiben. Ist der Passworthash ein einfacher MD5-Hash so kann der Hacker ohne Probleme den Hash ersetzen, um Zugriff auf die Software zu erlangen. Der Hoster hat einen Fehler gemacht und pl&#246;tzlich sind alle phpMyAdmins offen. Oder das Datenbanktool phpMyAdmin hat einen Bug, oder&#8230; oder&#8230; oder&#8230;</p>
<p>Also im WP-Quellcode gibt es 22 Dateien in denen md5() benutzt wird. Ich habe mal alle Vorkommen mit selfmd5() ersetzt und in der wp-config.php meine eigene MD5-Funktion eingef&#252;gt, da ich davon ausgehe das alle Dateien die auf die Datenbank zugreifen erst die Konfiguration, mit dem DB-Passwort, laden.</p>
<p><code>function selfmd5($klartext) {</p>
<p>	$zurueckgeben = md5($klartext.&quot;test&quot;);</p>
<p>	return $zurueckgeben;</p>
<p>}</code></p>
<p>Ich habe ersteinmal vor der Installation von WordPress die ge&#228;nderten Dateien ausgetauscht. Die Installation war erfolgreich, ich konnte Beitr&#228;ge schreiben, kommentieren, editieren, l&#246;schen, neue User anlegen, etc. etc. Dann habe ich in einem bereits installierten WordPress alle Dateien ausgetauscht und in der Datenbank den Passwort-Hash des Users auf den neuen Hash aktualisiert, wieder lief alles Problemlos.</p>
<p>Es w&#228;re nat&#252;rlich sehr viel besser wenn die WP-Entwickler eine eigene MD5-Funktion in den Quellcode einf&#252;gen und nicht das einfache MD5 verwenden w&#252;rden, denn nach jedem WP-Update mu&#223; ich wieder alle Dateien auf meine MD5-Funktion umstellen.</p>
<p>Also, meine Bitte an die WP-Entwickler: Baut mal eine gesalzene MD5-Funktion in WordPress ein, dies erh&#246;ht die Sicherheit von WordPress enorm.</p>
]]></content:encoded>
			<wfw:commentRss>http://meingottundmeinewelt.de/2008/02/08/wordpress-sicherer-machen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VDS-Faker</title>
		<link>http://meingottundmeinewelt.de/2008/01/30/vds-faker/</link>
		<comments>http://meingottundmeinewelt.de/2008/01/30/vds-faker/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 08:25:12 +0000</pubDate>
		<dc:creator>ich</dc:creator>
				<category><![CDATA[myQuellcode]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://meingottundmeinewelt.de/2008/01/30/vds-faker/</guid>
		<description><![CDATA[Ich hatte es ja bereits in &#8220;Futter f&#252;r Sch&#228;uble, BKA, BND und Co.&#8221; angedroht&#8230; &#60;g&#62; das Plugin f&#252;r WordPress zur Vorratsdatenspeicherung ist in einer sehr fr&#252;hen preAlpha verf&#252;gbar. Das Plugin ist sehr einfach gehalten. Es erzeugt aus vorgegebenen Schl&#252;sselreizen f&#252;r BKA, BND &#38; Co. eine zuf&#228;llige Reihenfolge und zeigt diese in dem gew&#228;hlten Bereich des [...]]]></description>
			<content:encoded><![CDATA[<p>Ich hatte es ja bereits in &#8220;<a href="http://meingottundmeinewelt.de/2008/01/04/futter-fuer-schaeuble-bka-bnd-und-co/"  target="_blank">Futter f&#252;r Sch&#228;uble, BKA, BND und Co.</a>&#8221; angedroht&#8230; &lt;g&gt; das Plugin f&#252;r WordPress zur Vorratsdatenspeicherung ist in einer sehr fr&#252;hen preAlpha verf&#252;gbar.</p>
<p>Das Plugin ist sehr einfach gehalten. Es erzeugt aus vorgegebenen Schl&#252;sselreizen f&#252;r BKA, BND &amp; Co. eine zuf&#228;llige Reihenfolge und zeigt diese in dem gew&#228;hlten Bereich des Themes an. In einer sp&#228;teren Version, wenn ich wei&#223; wie es funktioniert &lt;g&gt;, kommt ein Admin f&#252;r das Backend hinzu, in dem man u.a. die Schl&#252;sselreize editieren kann, was jetzt leider nur direkt im Quellcode des Plugins m&#246;glich ist.</p>
<p>Ich habe es in meinem Blog per &lt;? vds_faker(&#8216;#e9e9e9&#8242;, &#8217;0.8em&#8217;); ?&gt; am Ende der footer.php eingebaut. Der erste Parameter ist die Farbe, wobei es egal ist ob man nun #000, #000000 oder black schreibt. Der zweite Parameter ist die Schriftgr&#246;&#223;e, f&#252;r den Fall das man es f&#252;r den Besucher sichtbar einf&#252;gen m&#246;chte. Hier im Blog ist die Schriftfarbe gleich der Hintergrundfarbe, weswegen es f&#252;r menschliche Besucher nicht zu sehen ist &#8211; aber Google hat die Schl&#252;sselreize sauber in seinen Index aufgenommen. :O)</p>
<p>Mir ist nat&#252;rlich klar das Google wei&#223;e Schrift auf wei&#223;em Hintergrund nicht mag und evtl. den PR herabsetzt, aber bei meinem miniBlog ist mir das egal. Da ich mir dieses PR-Problems bewu&#223;t bin habe ich die M&#246;glichkeit eingebaut die Schriftfarbe selber zu bestimmen. Ich denke wenn man die Schriftfarbe so w&#228;hlt das die Worte auch f&#252;r menschliche Besucher sichtbar sind, dann sollte es kein PR-Problem geben.</p>
<p>Mein erstes Plugin f&#252;r WordPress, sicher nicht der Weisheit letzte Schlu&#223;, aber zumindest ein Anfang. :O)</p>
<p>Ich kann nat&#252;rlich keine Garantie oder Verantwortung f&#252;r die korrekte Funktion &#252;bernehmen, daher: <strong>Benutzung auf eigene Gefahr!</strong> &#8230;auch die, das der Sch&#228;uble morgen angerollt kommt. ;O)</p>
<p>Hier der Download zum WP-Plugin: <a href="../../../../../../wp-content/scripte/vds-faker.zip" title="WP-Plugin als ZIP">ZIP</a></p>
<p><code>&lt;?<br />
/*<br />
Plugin Name: VDS-Faker<br />
Plugin URI: http://meingottundmeinewelt.de/<br />
Description: Vorratsdaten-Faker - wir f&amp;uuml;llen die Vorratsdatenspeicher<br />
Version: 0.1<br />
Author: Michael Schwarz<br />
Author URI: http://meingottundmeinewelt.de/<br />
*/</p>
<p>function vds_faker($farbe, $groesse) <br />
{<br />
	$vds_worte = array (&quot;Hamas&quot;, &quot;Fatah&quot;, &quot;Al Qaida&quot;, &quot;PKK&quot;, &quot;CIA&quot;, &quot;NSA&quot;, &quot;BKA&quot;, &quot;BND&quot;, &quot;MI5&quot;, &quot;MI6&quot;, &quot;Mossad&quot;, &quot;RAF&quot;, &quot;Bombe&quot;, &quot;Terror&quot;, &quot;Bush&quot;, &quot;Selbstmordattentat&quot;, &quot;Sprengstoffg&amp;uuml;rtel&quot;, &quot;72 Jungfrauen&quot;, &quot;Kommunismus&quot;, &quot;Sozialismus&quot;, &quot;Allah&quot;, &quot;Islam&quot;, &quot;Muslim&quot;, &quot;Moslem&quot;, &quot;Gotteskrieger&quot;, &quot;USA&quot;, &quot;China&quot;, &quot;Nordkorea&quot;, &quot;Iran&quot;, &quot;&amp;Ouml;l&quot;, &quot;Erd&amp;ouml;l&quot;, &quot;Dollar&quot;, &quot;Gold&quot;, &quot;B&amp;ouml;rse&quot;, &quot;Geld&quot;, &quot;Kalaschnikow&quot;, &quot;AK-47&quot;, &quot;Rakete&quot;, &quot;Stinger&quot;, &quot;FIM-92&quot;, &quot;Handgranate&quot;, &quot;M67&quot;, &quot;prekariat&quot;);<br />
	shuffle($vds_worte);<br />
	echo '&lt;div style=&quot;color: '.$farbe.'; font-size: '.$groesse.'&quot;&gt;';<br />
	for ($x=0; $x&lt;count($vds_worte); $x++){<br />
		echo $vds_worte[$x].&quot; &quot;;<br />
	}<br />
	echo '&lt;/div&gt;';<br />
}<br />
?&gt;</code></p>
<p><i>Um den Quellcode hier sch&#246;n formatiert anzeigen zu k&#246;nnen habe ich das Plugin <a href="http://erik.range-it.de/wordpress/plugins/syntaxhighlighter/"  target="_blank" title="Link zum Autor des Plugins">SyntaxHighlighter</a> benutzt. Ein wirklich tolles WP-Plugin!</i></p>
<p>Update:<br />
Das war leider nichts. :O( Der SyntaxHighlighter zerschie&#223;t mir das FLV-Plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://meingottundmeinewelt.de/2008/01/30/vds-faker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

