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

<channel>
	<title>PHPUGFFM &#187; Material</title>
	<atom:link href="http://phpugffm.de/index.php/category/material/feed" rel="self" type="application/rss+xml" />
	<link>http://phpugffm.de</link>
	<description>one programming language :: one community</description>
	<lastBuildDate>Thu, 01 Jul 2010 09:40:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Nachtrag zu Onlinebanking mit PHP</title>
		<link>http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html</link>
		<comments>http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html#comments</comments>
		<pubDate>Mon, 06 Jul 2009 13:08:12 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Material]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[hibiscus]]></category>
		<category><![CDATA[onlinebanking]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html</guid>
		<description><![CDATA[Vor über zwei Jahren hatte ich mit dem Beitrag Onlinebanking mit PHP der über einen Vortrag bei der Usergroup berichtet auch Beispielquellcode mit veröffentlicht.
In diesem Code wird auf die Onlinebanking Software Hibiscus mittels der dortigen XML-RPC Schnittstelle zugegriffen. Dafür wird die Bibliothek XML-RPC for PHP verwendet. Natürlich ist der Quellcode mitlerweile veraltet. Auch ist er [...]]]></description>
			<content:encoded><![CDATA[<p>Vor über zwei Jahren hatte ich mit dem Beitrag <a href="http://phpugffm.de/index.php/onlinebanking-mit-php,2007-03,143.html">Onlinebanking mit PHP</a> der über einen Vortrag bei der Usergroup berichtet auch Beispielquellcode mit veröffentlicht.</p>
<p>In diesem Code wird auf die <a href="http://www.willuhn.de/products/hibiscus/">Onlinebanking Software Hibiscus</a> mittels der dortigen XML-RPC Schnittstelle zugegriffen. Dafür wird die <a href="http://phpxmlrpc.sourceforge.net/">Bibliothek XML-RPC for PHP</a> verwendet. Natürlich ist der Quellcode mitlerweile veraltet. Auch ist er nicht mit der aktuellen Hibiscus Version getestet. Und die Bibliothek ist sicherlich auch weiter gepflegt worden. Und so kann es passieren, dass beim Beispielcode Fehler beim Anlegen von Überweisungen auftreten. Doch wie damit umgehen?<span id="more-399"></span></p>
<p>Dies hat wohl dazu geführt das viele Leute die hier den Beitrag gelesen haben und sich den Quellcode gezogen haben sich nicht an mich direkt als Autor sondern an den Autor von Hibiscus gewandt. Auch in den Kommentaren ist nicht viel zu finden. So habe ich erst seit einigen Tagen die Gelegenheit mich mit dem Problem zu beschäftigen. </p>
<p>Leider muss ich anfügen. Nun kann wohl Hibiscus selber am wenigsten was dafür, wenn die in PHP eingesetzte XML-RPC Bibliothek einen Fehler hat. Sie kann wohl offensichtlich nicht mit Namespaces umgehen, die RPC-Response enthält aber solche. Das zeigt die Antwort auch an, es handelt sich um <a href="http://ws.apache.org/xmlrpc/">die XML-RPC implementierung von Apache</a>. Es kann also zu einem Fehler kommen. Und dafür ist der Autor von Hibiscus nicht der naheliegenste Ansprechpartner. Wenn man Beispielcode nimmt, dann sollte man diesen als praktische Gelegenheit begreifen, ihn zu lesen und zu verstehen. Dazu gehört auch der Umgang mit Fehlern darin. Eigentlich sogar ein willkommener Anlass solch ein Fehler, stellt er doch quasi eine Prüfung dar, ob man verstanden hat wie es funktioniert, wenn man den Fehler löst. Ein einfaches <em>Copy and Paste</em> gibt einem diese Sicherheit nicht, sondern lässt einen in dem trügerischen Gefühl, ein schnelles Ergebnis erzielt zu haben. Dabei entzieht sich dieses Ergebnis der vollen eigenen Kontrolle.</p>
<p>Aber was tun? Da es sich bei allen Komponenten um quelloffene, Freie Software handelt drängen sich zwei Lösungen auf: Eine konkrete, der Fix oder Workaround, und eine strategischere, das Feature. Der Produzent sollte natürlich auch eingebunden sein, allerdings rate ich sehr dazu, Entwickler in freien Projekten nicht mit unausgegorenen Emails zu belästigen. Das stellt man am besten dadurch sicher, erstmal selber zu schauen, was der Auslöser des Fehlers ist. Vielleicht liegt der ja auch bei einem selber. Und was auch nervig ist: Wenn ein Benutzer einfach mal eine Mail an alle Adressen schickt die er hier oder da findet und meint: das könnte schon passen, was kümmerts mich, wenn ich andere für mich denken lassen kann.</p>
<h2>Eine Entwicklerin, die auf einen Fehler stösst, fängt automatisch an, ihn zu analysieren.</h2>
<p>Eine Entwicklerin, die auf einen Fehler stösst, fängt automatisch an, ihn zu analysieren. Ist die Fehlerursache bekannt, so kann sie gefixt werden. Dazu muss man meist sogar nur wenig Ahnung haben, was ein Programm da gerade macht. Ein komplettes Verständnis aller Komponenten und Hintergründe ist sicherlich hilfreich aber nicht zwingend. Heraus kommt dann ein Workaround evtl. wie dieser hier:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> checkResponse<span class="br0">&#40;</span><span class="re0">$response</span>=<span class="kw2">null</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$response</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a><span class="br0">&#40;</span><span class="st0">&quot;No response given<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$response</span>-&gt;<span class="me1">faultCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <span class="re0">$response</span>-&gt;<span class="me1">value</span><span class="br0">&#40;</span><span class="br0">&#41;</span> == <span class="nu0">0</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re0">$fstr</span>=<span class="re0">$response</span>-&gt;<span class="me1">faultString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/strstr"><span class="kw3">strstr</span></a><span class="br0">&#40;</span><span class="re0">$fstr</span>, <span class="st0">&#8216;EX:NIL&#8217;</span><span class="br0">&#41;</span> != <span class="kw2">false</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/print"><span class="kw3">print</span></a><span class="br0">&#40;</span><span class="st0">&quot;Error. Code: &quot;</span>.<span class="re0">$response</span>-&gt;<span class="me1">faultCode</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&quot;</span>.<span class="re0">$response</span>-&gt;<span class="me1">faultString</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="co1">// &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* </span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* Im Hauptcode steht dann:</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$value</span> = <span class="re0">$response</span>-&gt;<span class="me1">value</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$value</span> != <span class="nu0">0</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$return</span> = <span class="re0">$value</span>-&gt;<span class="me1">scalarval</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re0">$return</span>=<span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span> <span class="br0">&#40;</span> <a href="http://www.php.net/strlen"><span class="kw3">strlen</span></a><span class="br0">&#40;</span><span class="re0">$return</span><span class="br0">&#41;</span> == <span class="nu0">0</span> <span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&#8216;&lt;p&gt;&amp;Uuml;berweisung wurde angelegt.&lt;/p&gt;&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Das wäre also ein Fix oder Workaround. Wie alles sind natürlich auch Fehler relativ. Konkret ist mit einem Workaround also geholfen. Und zwar schnell und einfach. Steht es hingegen an, sich um den Kern des Problems zu kümmern, so ist ein wenig mehr Arbeit und Genauigkeit von Nöten. Hier ist der Fix aber nicht umsonst, hat er doch geholfen, den Fehler einzugrenzen und die Funktionsfähigkeit wieder herzustellen.</p>
<p>So stellt sich erstmal die Frage warum <em>genau</em> der Fehler zu Tage tritt und warum der Fix nun funktioniert. Die Eingrenzung des Fehlers auf seine ausschlaggebende Ursache. Bei diesem Beispiel ist es relativ einfach mit der Fehlerursache. Auch das Protokoll von XML-RPC ist relativ offen, den es basiert auf (recht einfachen) XML Dokumenten, die per HTTP ausgetauscht werden. So ist zum debuggen mittels PHP das XML der Antwort einsehbar indem der String ausgegeben wird:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;methodResponse</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">xmlns:ex</span>=<span class="st0">&quot;http://ws.apache.org/xmlrpc/namespaces/extensions&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="sc3"><span class="re1">&lt;params<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="sc3"><span class="re1">&lt;param<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;value<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ex:nil</span><span class="re2">/&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="sc3"><span class="re1">&lt;/value<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;/param<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="sc3"><span class="re1">&lt;/params<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/methodResponse<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>Der Fehler tritt hier auf, weil die PHP XML-RPC Bibliothek nichts mit dem Rückgabewert &#8220;&lt;ex:nil/&gt;&#8221; anfangen kann. Nun stellt sich die Frage, wie damit umgehen? Wo genau liegt der Fehler, in der PHP-Bibliothek oder in der Implementierung in der Java-Bibliothek von Apache? Wenns um Bibliotheken geht ist das oft ein Zeichen dafür, dass es sich hier um eine grundlegendere Frage handelt. Und das eine Lösung aufwendiger und auch problematischer sein kann. Dies aus zwei Gründen:</p>
<p>Zum einen werden Bibliotheken von vielen Programiererinnen und Anwendern in unterschiedlichen Anwendungen genutzt dessen allen Bedürfnisse eine Bibliothek unter einen Hut bekommen muss. Eine &#8220;Fehlerbehebung&#8221; die zu nicht erwartenen Ergebnissen führt kann zum Beispiel bestehende Anwendungen gefährden.</p>
<p>Zum anderen, weil wenn ein Fehler gefunden wird, ein Fehlerbericht an das Projekt der Bibliothek gemacht werden sollte. Dazu muss erstmal rausgefunden werden, wie dies gemacht wird und es ist oft nicht klar, wie schnell ein Fehler im Projekt behoben wird, nachdem er gemeldet wird.</p>
<h2>Mein Code, Dein Code, unser Code.</h2>
<p>In der Programmierung spricht man hier oft vom &#8220;Upstream&#8221;. Ich erstelle für die lokale Kopie meiner Bibliothek einen Patch, der das gewünschte Feature implementiert. Das Feature für die PHP-Bibliothek ausführlich formuliert wäre hier: <em>Die Unterstützung des ex:nil Rückgabewertes zwecks Kompabilität zur Apache XML-RPC Implementierung</em>. </p>
<p>Läuft der Patch bei mir und bin ich sicher, dass das auch für andere AnwenderInnen der Bibliothek Sinn macht, <em>upstreame</em> ich den Patch, in dem ich den dem Bibliotheksprojekt zur Verfügung stelle. Meist wird darüber diskutiert was für und was gegen den Patch spricht und der Patch entsprechend modifziert resp. erweitert. Wird der Patch akzeptiert, landet er meist im nächsten Release des Projektes.</p>
<h3>Keep Up the Upstream.</h3>
<p>Damit ist dann allen geholfen. Übrigens sind viele Entwicklerinnen dann für Feedback dankbar, wenn es um eine reale Fehlerlösung geht. So hat der Entwickler im Hibiscus Projekt sicherlich kein Interesse daran, PHP-Programmierern bei der Fehlersuche zu helfen, selbst wenn er ein ganz lieber ist und es mit den Anfragen auch generell recht freundlich hält. Hätte die Schnittstelle auf seiner Seite einen Fehler würden sich warscheinlich schon recht viele Leute beschwert haben&#8230; . Das <em>XML-RPC for PHP</em> Projekt hingegen hat aber vielleicht ein echtes Interesse daran, die Bibliothek kompatibel mit der Apache Implementierung zu halten. Jeder Fehler ist eine Chance ein Programm zu verbessern. Keep Up the Upstream.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/nachtrag-zu-onlinebanking-mit-php,2009-07,399.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue Sicherheit bringt der Mai</title>
		<link>http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html</link>
		<comments>http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html#comments</comments>
		<pubDate>Thu, 23 Apr 2009 09:03:24 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html</guid>
		<description><![CDATA[Eine Referenzimplementierung der OWASP Enterprise Security API (ESAPI) soll es laut Bericht vom Linux Magazin bald auch für PHP geben.
ESAPI definiert Sicherheitsmaßnahmen, die eine Webanwendungen gegen typische Angriffe wie Cross-Site-Scripting und SQL-Injection schützen.
Ein erster Termin ist mit Mai 2009 angegeben. Dabei handelt es sich um eine Portierung der JAVA Referenzimplementierung. Mehr Infos auch im Blog [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Referenzimplementierung der <a href="http://www.owasp.org/index.php/ESAPI#tab=About">OWASP Enterprise Security API (ESAPI)</a> soll es laut <a href="http://www.linux-magazin.de/news/esapi_web_sicherheitsmassnahmen_bald_fuer_php?category=0" title="">Bericht vom Linux Magazin</a> bald auch <a href="http://www.owasp.org/index.php/ESAPI#tab=PHP">für PHP</a> geben.</p>
<blockquote><p>ESAPI definiert Sicherheitsmaßnahmen, die eine Webanwendungen gegen typische Angriffe wie Cross-Site-Scripting und SQL-Injection schützen.</p></blockquote>
<p>Ein erster Termin ist mit Mai 2009 angegeben. Dabei handelt es sich um eine Portierung der JAVA Referenzimplementierung. Mehr Infos auch im <a href="http://www.greebo.net/2009/03/14/esapi-for-php-first-tests-passed/">Blog von Andrew van der Stock</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/neue-sicherheit-bringt-der-mai,2009-04,387.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Was ist so schwierig an NO-SCRIPT?</title>
		<link>http://phpugffm.de/index.php/was-ist-so-schwierig-an-no-script,2009-01,368.html</link>
		<comments>http://phpugffm.de/index.php/was-ist-so-schwierig-an-no-script,2009-01,368.html#comments</comments>
		<pubDate>Sat, 31 Jan 2009 04:36:40 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Material]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/was-ist-so-schwierig-an-no-script,2009-01,368.html</guid>
		<description><![CDATA[Es handelt sich nicht um ein weiteres HTML Element oder eine fremde Sprache. Es geht einfach nur darum, endlich dem Browser das abzugewöhnen, was ihn einst so populär gemacht hat. Oder einfach (rhetorisch) gesagt/gefragt: Würdest Du deinen Schreibtisch mit der ganzen Welt teilen wollen? Dein Getuschel mit den besten Freunden direkt ins Netz streamen mit [...]]]></description>
			<content:encoded><![CDATA[<p>Es handelt sich nicht um ein weiteres HTML Element oder eine fremde Sprache. Es geht einfach nur darum, endlich dem Browser das abzugewöhnen, was ihn einst so populär gemacht hat. Oder einfach (rhetorisch) gesagt/gefragt: Würdest Du deinen Schreibtisch mit der ganzen Welt teilen wollen? Dein Getuschel mit den besten Freunden direkt ins Netz streamen mit Abschrift, Untertertiteln und <em>Google Translate</em>?<span id="more-368"></span></p>
<p>Worum geht&#8217;s? Um &#8211; mal auf gut deutsch gesagt &#8211; Informationslecks, also Infos die nun eben nicht nach Draussen drängen sollten, egal welcher Art noch Natur. Info. Data. Zeugs. Das Problem ist einfach umrissen: Wie soll sich Jemand, hier vornehm genannt Normalo von User, mit so etwas technisch-komplexen wie Computersystemen und Informatios-Technik auseinandersetzen?  Gute Frage, nächste Frage. <a href="http://www.mozilla-europe.org/de/">Firefox Installieren</a>, das <a href="https://addons.mozilla.org/de/firefox/addon/722">Noscript Plugin schleunigst nachladen</a> (oder wie hochrangige Mozilla Entwicklerinnen sagen: &#8220;Ich würde mir wünschen, Firefox würde mit Noscript ausgeliefert werden&#8221;) und einfach ALLE Freunde, die einem bei Computer Problemen helfen wollen, im Mindesten dazu &#8220;nötigen&#8221;, selber Firefox und das Noscript Addon zu installieren, bevor Sie überhaupt auf _eigene_ Probleme eingehen.</p>
<p>Denn die beste Sicherheit ist es, erstmal nur ohne aktive Scripts / Javascripts und gefährliche Plugins durchs Netz surfen. Ich würde fast drauf wetten, das sich die Installation von Noscript mehr lohnt als die Installation eines Virenscanners. Auf ein Mal erscheinen Fragen wie &#8220;Warum geht Youtube nicht?&#8221; in einem ganz anderen Licht, und der Anfänger begreift schnell, das sich sein Intellekt nicht von dem eines studierten Informatikers zu unterscheiden braucht.</p>
<p>Wegen des guten Konzeptes und der einfachen Integration bekommt der Autor der wünschenswerter Weise sehr erfolgreichen Erweiterung (Plug-In / Add-On)  <strong>Noscript</strong> beste Kritiken von Fachpresse als auch eben dem Normalo. Sowohl von Benutzer- als auch Sicherheitsts-technischen Seite. Es ist kein Zufall das der talentierte italienische Entwickler &#8211; im Übrigen propagiert er offensiv und stetig Freie Software &#8211; zwei in der Computerwissenschaft extrem wichtige Komponenten zusammen bringt. Noscript gibt es es leider nur für den Mozilla Firefox und für den HTML Webautor. Und genau deswegen zeigt es, warum der Firefox funktioniert und das Thema so wichtig ist. Die Daten auf dem eigenen Rechner sind irgendwo doch auch einfach zu wichtig um Sie mit Hinz, Kunz und Eben zu teilen. Und genau dort hilft Noscript ein bischen.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/was-ist-so-schwierig-an-no-script,2009-01,368.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hackerteen InternetBlackout (PHP for Kids)</title>
		<link>http://phpugffm.de/index.php/hackerteen-internetblackout-php-for-kids,2008-06,313.html</link>
		<comments>http://phpugffm.de/index.php/hackerteen-internetblackout-php-for-kids,2008-06,313.html#comments</comments>
		<pubDate>Mon, 09 Jun 2008 10:50:19 +0000</pubDate>
		<dc:creator>dc7590</dc:creator>
				<category><![CDATA[Bücher]]></category>
		<category><![CDATA[Fun]]></category>
		<category><![CDATA[Home]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/hackerteen-internetblackout-php-for-kids,2008-06,313.html</guid>
		<description><![CDATA[ We recently received a copy of Internet Blackout, which is a new comic series from O&#8217;Reilly aimed at young adults.
In a nutshell, I think the concept is brilliant. The graphic story addresses the excessive use of computers by teens and
encourages the utilisation of that time and energy into a more productive environment which is [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://phpugffm.de/wp-content/uploads/2008/06/hackerteen.jpg" alt="hackerteen.jpg" align="left" style="padding:0 1em 1em 0;" /> We recently received a copy of <a href="http://oreilly.com/catalog/9780596516475/" target="_blank">Internet Blackout</a>, which is a new comic series from <a href="http://oreilly.com/" target="_blank">O&#8217;Reilly</a> aimed at young adults.<br />
In a nutshell, I think the concept is brilliant. The graphic story addresses the excessive use of computers by teens and<br />
encourages the utilisation of that time and energy into a more productive environment which is known as the <a href="http://www.hackerteen.com" target="_blank">Hackerteen Academy</a>.</p>
<p>At the academy, hacker mentors lead the youngsters away from gaming sites and focus on IT challenges, rewarding their progress with <a href="http://www.hackerteen.com/conteudo.php" target="_blank">rank</a> and recognition.  While keeping the kids off the cyber streets, they are simultaneously creating future mentors and potential <a href="http://catb.org/jargon/html/H/hacker.html" target="_blank">hackers</a>. I like the focus on moral and ethical aspects which are vital to the IT education of kids who have regular access to cyberspace.<br />
<span id="more-313"></span><br />
At the same time Hackerteen also addresses the less tech savvy users and educates them about Internet related security <a href="http://www.hackerteen.com/guia_orientacao.php#mandamentos" target="_blank">risks</a> such as social networking. The comic has links to the live site which makes it more interactive and forges the hybrid online and offline concept. Behind the project is <a href="http://www.4linux.com.br/" target="_blank">4linux</a> with a real academy which offers real <a href="http://www.hackerteen.com/metodologia.php" target="_blank">courses</a> for real Hackerteens.  The first class has already <a href="http://www.hackerteen.com/noticia_11.php" target="_blank">graduated</a>.  Personally I&#8217;d like to know more about the courses and possibilities of integrating them into an existing IT curriculum, I think this could easily compete with the logo turtles and be of more use.</p>
<p>As a parent I like the idea too, I think the next generation of viruses will breed in school yards not at the office and while I&#8217;m still struggling to get a firewall working on my sons mobile device, he has less problem getting round my parent proxy at home. This addresses the third and final target audience in my eyes, the less tech savvy parents who need an easy way to learn what the mumbo-jumbo means that the kids bring home.</p>
<p>While the comic is slightly out of the comic price range and the graphics themselves have room for improvement, I still think it&#8217;s worth buying for someone in one of the potential target groups. On the whole, projects like <a href="http://www.hackerteen.com" target="_blank">Hackerteen</a> promote a healthy Internet culture while introducing modern concepts such as sustainable software and in doing so, help bridge IT and generation divides using the Internet as a common denominator. I think this is a great idea and look forward to the next episode.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/hackerteen-internetblackout-php-for-kids,2008-06,313.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creational Patterns and the Registry Design Pattern</title>
		<link>http://phpugffm.de/index.php/creational-patterns-and-the-registry-design-pattern,2008-04,292.html</link>
		<comments>http://phpugffm.de/index.php/creational-patterns-and-the-registry-design-pattern,2008-04,292.html#comments</comments>
		<pubDate>Mon, 21 Apr 2008 06:21:24 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Material]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Veranstaltungen]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/creational-patterns-and-the-registry-design-pattern,2008-04,292.html</guid>
		<description><![CDATA[Patrick C. Engel, Entwickler aus Mainz, eröffnete mit seinem Vortrag &#8220;Creational Patterns and the Registry Design Pattern&#8221; die PHP Pattern Parade. Auf 20 Folien gab es einen fundierten Einblick in Singleton, Singleton Registry, Factory und Abstract Factory. Diese wurden dann im Rahmen von Dependency Injection und Inversion of Control betrachtet und diskutiert. Prägnante Einordnung, umfassende [...]]]></description>
			<content:encoded><![CDATA[<p>Patrick C. Engel, Entwickler aus Mainz, eröffnete mit seinem Vortrag &#8220;Creational Patterns and the Registry Design Pattern&#8221; die <a href="http://www.phpugffm.de/mediawiki/index.php/PHP_Pattern_Parade">PHP Pattern Parade</a>.<span id="more-292"></span> Auf 20 Folien gab es einen fundierten Einblick in Singleton, Singleton Registry, Factory und Abstract Factory. Diese wurden dann im Rahmen von <em>Dependency Injection</em> und <em>Inversion of Control</em> betrachtet und diskutiert. Prägnante Einordnung, umfassende Erklärung bei kompaktem Stoff im Vortrag mit allen wichtigen Hintergrundinfos.</p>
<h2>Folien und Beispielcode</h2>
<ul>
<li> <a href="http://code.pc-e.org/php/zend/patterns/design_patterns_singleton_registry_factory.pdf">Creational Patterns and the Registry Design Pattern</a> (PDF 69k)</li>
<li> <a href="http://code.pc-e.org/php/zend/patterns/">Beispielcode und Notizen</a> </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/creational-patterns-and-the-registry-design-pattern,2008-04,292.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Very SimpleXML</title>
		<link>http://phpugffm.de/index.php/very-simplexml,2008-03,283.html</link>
		<comments>http://phpugffm.de/index.php/very-simplexml,2008-03,283.html#comments</comments>
		<pubDate>Tue, 18 Mar 2008 12:37:09 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Material]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Veranstaltungen]]></category>
		<category><![CDATA[SimpleXML]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/very-simplexml,2008-03,283.html</guid>
		<description><![CDATA[SimpleXML ist eine Funktionsbibliothek von PHP, die es ermöglicht einfach (eben &#8220;simple&#8221;) auf XML Daten zuzugreifen und mit ihnen umzuspringen. Das schöne daran: Sie startete mit PHP 5 und unterstützt Objektorientierte Programmierung von PHP 5.
Auf dem Usergruppen Treffen am 13. März 2008 habe ich einen Stand-Up-Vortrag über das Extenden von SimpleXML gehalten den ich nun [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://de.php.net/simplexml">SimpleXML ist eine Funktionsbibliothek von PHP</a>, die es ermöglicht einfach (eben &#8220;simple&#8221;) auf XML Daten zuzugreifen und mit ihnen umzuspringen. Das schöne daran: Sie startete mit PHP 5 und unterstützt <a href="http://de.php.net/oop5">Objektorientierte Programmierung von PHP 5</a>.</p>
<p>Auf dem Usergruppen Treffen am 13. März 2008 habe ich einen Stand-Up-Vortrag über das <em>Extenden von SimpleXML</em> gehalten den ich nun mit diesem Beitrag auf unserer Homepage nachbereiten und erweitern möchte. Einfache eigene Erfahrungen mit SimpleXML sind von Vorteil zum Verständnis des Artikels.<span id="more-283"></span></p>
<h2>Die Möglichkeiten</h2>
<p>SimpleXML ist schon von Hause aus sehr simpel. Es sollte immer die aktuelle Version eingesetzt werden, da in der Geschichte dieser Erweiterung es manchmal verschiedene Interpretationen über einzelne Methoden gab, so das zwischen <em>Bugs</em> und <em>Documentation Problems</em> schon mal ein Bäumchen-Wechsel-Dich-Spielchen entstehen konnte. Dies und andere Kinderkrankheiten sind aber mitlerweile aus dem Weg geräumt und sie fallen auch nicht soviel ins Gewicht, wenn man sich die Fähigkeiten von OOP unter PHP zu Nutze macht:</p>
<ol>
<li>SimpleXMLElement Extenden (Vererben)</li>
<li>SimpleXMLIterator: Der SPL-Iterator auf SimpleXML</li>
</ol>
<p><small>Anm.: Den ersten Punkt habe ich auf dem Märztreffen angesprochen, der zweite Punkt wird auch nochmal auf dem Apriltreffen gezeigt, ist aber im Grunde das selbe, da es sich auch um das Extenden vom SimpleXMLElement handelt. Da der SPL Iterator so ein anschauliches Beispiel ist, habe ich ihn in die Thematik mit rein genommen.</small></p>
<h2>SimpleXML Extenden (Vererben)</h2>
<p>Das Vererben eines SimpleXMLElement funktioniert wie das Vererben jeder anderen PHP5-Klasse auch:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> VerySimpleXMLElement <span class="kw2">extends</span> SimpleXMLElement</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// &#8230;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Soweit noch keine Magie. Die Besonderheit bei SimpleXML ist jedoch, das bei der Instanzierung, zB. in den Funktionen <a href="http://de.php.net/simplexml_load_string">simplexml_load_string</a> und <a href="simplexml_load_file">simplexml_load_file</a>, der Klassenname als zweiter Parameter optional mit angegeben werden kann. Dies hat dann den gleichen Effekt wie die Instanzierung der eigenen, abgeleiteten Klasse über das Schlüsselwort <strong>new</strong>:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$vsx</span> = simplexml_load_file<span class="br0">&#40;</span><span class="re0">$filename</span>, <span class="st0">&#8216;VerySimpleXMLElement&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$vsx</span> = simplexml_load_string<span class="br0">&#40;</span><span class="re0">$xmldata</span>, <span class="st0">&#8216;VerySimpleXMLElement&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$vsx</span> = <span class="kw2">new</span> VerySimpleXMLElement<span class="br0">&#40;</span><span class="re0">$xmldata</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Der Clou daran ist, dass sich das abgeleitete, VerySimpleXMLElement automatisch über alle Unterobjekte erstreckt. Bei der Besprechung in der Usergruppe kam die Frage auf ob das nicht bei jedem PHP5-Objekt der Fall wäre. Dies kann getrost verneint werden, den dies muss einem Objekt erst beigebracht werden. Das SimpleXMLElement kann dies von Haus aus und dies genau ist es, was das <em>extenden</em> so brauchbar und praktisch macht. Vielleicht auch eine Anregung für die eigene Programmierung.</p>
<p>Da nun auch alle Unterobjekte von der <em>Programmierer-eigenen</em> Klasse abstammen, können an zentraler Stelle die für die eigene Aufgaben fehlenden Routinen gesetzt werden. Zb. ein eingänglicherer Zugriff auf Attribute. Möchte ich diese zB. optional behandeln hilft eine einfache Funktion weiter:</p>
<div class="dean_ch" style="white-space: nowrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">&lt;?php</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> VerySimpleXMLElement <span class="kw2">extends</span> SimpleXMLElement</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">private</span> <span class="kw2">function</span> getAttributeArray<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#41;</span> <span class="re0">$this</span>-&gt;<span class="me1">attributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> getAttribute<span class="br0">&#40;</span><span class="re0">$name</span>, <span class="re0">$default</span>=<span class="st0">&#8221;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$attrs</span> = <span class="re0">$this</span>-&gt;<span class="me1">getAttributeArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$attrs</span><span class="br0">&#91;</span><span class="re0">$name</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>string<span class="br0">&#41;</span> <span class="re0">$attrs</span><span class="br0">&#91;</span><span class="re0">$name</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>string<span class="br0">&#41;</span> <span class="re0">$default</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> getAttributeCount<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span> <a href="http://www.php.net/sizeof"><span class="kw3">sizeof</span></a><span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">getAttributeArray</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> hasAttributes<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>bool<span class="br0">&#41;</span> <span class="re0">$this</span>-&gt;<span class="me1">getAttributeCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Auf diese kann nun durchgehend zugegriffen werden. Es braucht lediglich das <em>eigene</em> SimpleXMLElement verwendet werden.</p>
<p>Als Wermutstropfen bleibt allerdings das der Constructor als auch die Magic-Methods des Overloading beim OOP leider nicht angetastet werden können. Der eine oder andere Workaround fürs letztere befindet sich in der Linksammlung am Ende des Artikels. Allerdings Geschmacksache und vielleicht ist in diesem Punkt bei der Entwicklung der SimpleXML Extension auch noch nicht aller Tage Abend.</p>
<h2>SimpleXMLIterator: Der SPL-Iterator auf SimpleXML</h2>
<p>Das Erklärte lässt genug Luft für eigene Laufversuche. Aber damit hört es noch nicht auf. Dass das Extenden von SimpleXML richtig Sinn machen kann, hat auch der Entwickler Markus Börger erkannt und in seine <a href="http://www.php.net/~helly/php/ext/spl/">SPL-Erweiterung</a> den <a href="http://www.php.net/~helly/php/ext/spl/classSimpleXMLIterator.html">SimpleXMLIterator</a> eingebaut. Dies im anschaulichen Beispiel folgt nach der <a href="http://www.phpugffm.de/mediawiki/index.php/10_April_08">Veranstaltung im April</a>.</p>
<h2>Weiteres</h2>
<p>Während des Vortrages in der Usergroup ist noch eine kleine Linksammlung zum Thema PHP und XML entstanden:</p>
<ul>
<li><a href="http://www.ibm.com/developerworks/library/x-xmlphp1.html">XML for PHP developers, Part 1: The 15-minute PHP-with-XML starter</a> (Cliff Morgan, 2007-02)</li>
<li><a href="http://www.ibm.com/developerworks/xml/library/x-xmlphp2.html">XML for PHP developers, Part 2: Advanced XML parsing techniques</a> (Cliff Morgan, 2007-03)</li>
<li><a href="http://www.ibm.com/developerworks/xml/library/x-xmlphp3.html">XML for PHP developers, Part 3: Advanced techniques to read, manipulate, and write XML</a> (Cliff Morgan, 2007-03)</li>
<li><a href="http://php-coding-practices.com/language-specific/parsing-xml-using-simplexml/">Parsing XML using SimpleXML</a> (Tim Koschuetzki, 2007-05)</li>
<li>
<h3>Probleme und Wissenwertes beim Extenden von SimpleXML</h3>
<ul>
<li>Overloading 1: <a href="http://www.oliverbrown.me.uk/2005/09/03/extending-simplexml/">Extending SimpleXML</a>, <a href="http://www.oliverbrown.me.uk.nyud.net/2005/09/01/issues-with-extending-simplexml/">Issues with extending SimpleXML</a>, <a href="http://www.oliverbrown.me.uk.nyud.net/2005/08/28/microformats-extension-to-simplexml/">Microformats extension to SimpleXML</a> (Oliver Brown, 2005-08/2005-09)</li>
<li>Overloading 2: <a href="http://blog.extend.ws/2008/02/20/extending-simplexml/">Extending SimpleXML</a> (Loïc Hoguin, 2008-02)</li>
<li><a href="http://blog.liip.ch/archive/2005/11/12/how-to-extend-simplexml-with-missing-functionality.html">How to extend SimpleXML with missing functionality</a> (Christian Stocker, 2005-11)</li>
<li><a href="http://tinitram.ti.ohost.de/?p=12">simplexml liefert uncatchable errors</a> (Martin, 2008-03)
		</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/very-simplexml,2008-03,283.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHPIDS Vortrag</title>
		<link>http://phpugffm.de/index.php/phpids-vortrag,2008-02,271.html</link>
		<comments>http://phpugffm.de/index.php/phpids-vortrag,2008-02,271.html#comments</comments>
		<pubDate>Fri, 15 Feb 2008 11:03:44 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Material]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Veranstaltungen]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/phpids-vortrag,2008-02,271.html</guid>
		<description><![CDATA[IDS steht für Intrusion Detection System frei übersetzt ins Deutsche sowas wie die Alarmzentrale für Netzwerkanwendungen. Für PHP Anwendungen steht seit Ende Januar 2008 das neue Release von PHPIDS zur Verfügung.
PHPIDS ermöglich Entwicklern auf einfache Weise einen zusätzliche Sicherheitsebene in PHP Anwendungen zu integrieren.
Der Vortrag von Tom Klingenberg stellte die Konzepte hinter und in PHPIDS [...]]]></description>
			<content:encoded><![CDATA[<p>IDS steht für Intrusion Detection System frei übersetzt ins Deutsche sowas wie die Alarmzentrale für Netzwerkanwendungen. Für PHP Anwendungen steht seit Ende Januar 2008 das neue Release von <a href="http://php-ids.org/" title="Offizielle PHPIDS Webseite">PHPIDS</a> zur Verfügung.<span id="more-271"></span></p>
<p>PHPIDS ermöglich Entwicklern auf einfache Weise einen zusätzliche Sicherheitsebene in PHP Anwendungen zu integrieren.</p>
<p>Der Vortrag von Tom Klingenberg stellte die Konzepte hinter und in PHPIDS vor. Anhand von zwei Beispielen aus dem richtigen Leben wurde die Funktionsweise zusätzlich erläutert.</p>
<ul>
<li><a href='http://phpugffm.de/wp-content/uploads/2008/02/phpids-vortrag-phpugffm.pdf' title='PHPIDS Vortrag PHPUGFFM 14. Februar 2008'>PHPIDS Vortrag PHPUGFFM 14. Februar 2008 (PDF)</a></li>
<li><a href="http://php-ids.org/">PHPIDS offizielle Webseite</a></li>
<li><a href="http://php-ids.org/forum/">PHPIDS Forum</a></li>
<li><a href="http://groups.google.de/group/php-ids/">PHPIDS Google group</a></li>
<li><em>Whitepaper in Vorbereitung</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/phpids-vortrag,2008-02,271.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Start here&#8230;</title>
		<link>http://phpugffm.de/index.php/start-here,2007-11,253.html</link>
		<comments>http://phpugffm.de/index.php/start-here,2007-11,253.html#comments</comments>
		<pubDate>Wed, 14 Nov 2007 07:33:58 +0000</pubDate>
		<dc:creator>dc7590</dc:creator>
				<category><![CDATA[Home]]></category>
		<category><![CDATA[Material]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/start-here,2007-11,253.html</guid>
		<description><![CDATA[Time and time again we get asked where to start learning PHP.
Has the time come for yet another one of those &#8220;start here&#8221; lists?
Holger asked about info for a course and Ralf is looking into turning his FH Internet course into an online Moodle course.
Here&#8217;s YAL from down south.
http://www.phpugmunich.org/index.php/ 2007/11/13/tutorials-fur-anfanger/
If you are interested in developing [...]]]></description>
			<content:encoded><![CDATA[<p>Time and time again we get asked where to start learning PHP.<br />
Has the time come for yet another one of those &#8220;start here&#8221; lists?</p>
<p>Holger asked about info for a course and Ralf is looking into turning his FH Internet course into an online Moodle course.<br />
Here&#8217;s YAL from down south.</p>
<p><a href="http://www.phpugmunich.org/index.php/2007/11/13/tutorials-fur-anfanger/">http://www.phpugmunich.org/index.php/ 2007/11/13/tutorials-fur-anfanger/</a></p>
<p>If you are interested in developing such materials, let me know at the next UG meeting.</p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/start-here,2007-11,253.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mod Security</title>
		<link>http://phpugffm.de/index.php/mod-security,2007-06,222.html</link>
		<comments>http://phpugffm.de/index.php/mod-security,2007-06,222.html#comments</comments>
		<pubDate>Sun, 24 Jun 2007 20:40:18 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Material]]></category>
		<category><![CDATA[Security]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/mod-security,2007-06,222.html</guid>
		<description><![CDATA[Lars hat auf dem Meeting im April 2007 einen Vortrag über Mod-Security gemacht. Es ist ein Apache-Modul, mit dem eine Web-Application-Firewall realisiert werden kann. Diese kann auf dem Webserver oder auf einem vorgelagerten Proxy installiert werden. Eine solche Firewall erfüllt folgende Funktionen:

Schutz des Web-Servers und seiner Module (außer mod_ssl) vor Angriffen auf den Server (vor [...]]]></description>
			<content:encoded><![CDATA[<p>Lars hat auf dem Meeting im April 2007 einen Vortrag über <a href="http://www.modsecurity.org/">Mod-Security</a> gemacht. Es ist ein Apache-Modul, mit dem eine Web-Application-Firewall realisiert werden kann. Diese kann auf dem Webserver oder auf einem vorgelagerten Proxy installiert werden. <span id="more-222"></span>Eine solche Firewall erfüllt folgende Funktionen:</p>
<ol>
<li>Schutz des Web-Servers und seiner Module (außer mod_ssl) vor Angriffen auf den Server (vor allem Buffer-Overflows).</li>
<li>Kontrolle des HTTP-Protokolls (z.B. zu alte oder fehlkonfigurierte Clients auf FAQ-Seiten umleiten, Sperrung aller nicht benötigten Funktionen)</li>
<li>Generischer Schutz vor bekannten Angriffsformen (XSS-Angriffe, SQL-Injections, PHP-Code-Injections) durch ein negative Secuirity-Modell.</li>
<li>Zeitweiliges Patchen unsicherer Anwendungen bis das Problem im Code gefixt ist.</li>
<li>Nachbau der kompletten Validierung der Web-Software durch ein positive Secuirity-Modell. Hierbei wird definiert, welche Zugriffe erlaubt sind. Alle anderen Zugriffe werden verboten.</li>
<li>Kontrolle des Servers auf Angriffsmuster und auf erfolgreiche Angriffe.</li>
<li>Reaktion auf DDoS-Angriffe durch automatische Zusammenarbeit mit Paketfilter-Firewalls, Nutzung von RBL&#8217;s.</li>
</ol>
<p>Eine Web-Application-Firewall ist wie jedes Security-Tool kein Allheilmittel. Es ist keine Software, die man einmalig konfiguriert und um die man sich weiter nicht kümmern braucht.</p>
<p>Mod-Security ist ohne Regelsatz vollkommen wirkungslos und nichts für Leute, die eine setup.exe brauchen. Zwar wird eine umfangreicher Regelsatz mitgeliefert. Dieser ist aber an die eigenen Bedürfnisse anzupassen. Inzwischen erfolgt dies relativ komfortabel, so dass die mitgelieferten Dateien nicht einmal mehr editiert werden müssen. </p>
<p>Am Sinnvollsten ist die Verwendung eines positive Secuirity-Modells. Dieses Modell hat die geringsten Performanceanforderungen. Die Schwierigkeit besteht hierbei jedoch oftmals darin, dass die Web-Schnittstelle der Anwendung nicht ausreichend beschrieben ist. </p>
<p>Generell muss in jedem Fall das Logfile nach false-positivs kontrolliert werden, um den Regelsatz gegebenenfalls anzupassen. </p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/mod-security,2007-06,222.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joost Vortrag &#8211; Is TV 2.0 becoming real?</title>
		<link>http://phpugffm.de/index.php/joost-vortrag-is-tv-20-becoming-real,2007-06,220.html</link>
		<comments>http://phpugffm.de/index.php/joost-vortrag-is-tv-20-becoming-real,2007-06,220.html#comments</comments>
		<pubDate>Sun, 24 Jun 2007 20:07:08 +0000</pubDate>
		<dc:creator>Tom</dc:creator>
				<category><![CDATA[Material]]></category>

		<guid isPermaLink="false">http://phpugffm.de/index.php/joost-vortrag-is-tv-20-becoming-real,2007-06,220.html</guid>
		<description><![CDATA[Thorsten Biedenkapp, IT Consultant aus Frankfurt, stellte in seinem Vortrag Joost (gesproche Dschuhsd) als Internet-Fernsehplattform der neuen Generation vor: Web TV 2.0 . In 30 Minuten referierte er über Konzept und Technik und bot einen Ausblick auf kommende Möglichkeiten. Danach stellte er sich Fragen im Publikum und diskutierte mit den Teilnehmer Einsatzmöglichkeiten auf anderen Plattformen [...]]]></description>
			<content:encoded><![CDATA[<p>Thorsten Biedenkapp, IT Consultant aus Frankfurt, stellte in seinem Vortrag Joost (gesproche Dschuhsd) als Internet-Fernsehplattform der neuen Generation vor: Web TV 2.0 .<span id="more-220"></span> In 30 Minuten referierte er über Konzept und Technik und bot einen Ausblick auf kommende Möglichkeiten. Danach stellte er sich Fragen im Publikum und diskutierte mit den Teilnehmer Einsatzmöglichkeiten auf anderen Plattformen sowie die Vision Fernsehen 2.0.</p>
<p><a href='http://phpugffm.de/wp-content/uploads/2007/06/joost-thorsten-biedenkapp-phpugffm.pdf' title='Joost Vortrag - Is TV 2.0 becoming real?'>Joost Vortrag &#8211; Is TV 2.0 becoming real? &#8211; PDF zum Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://phpugffm.de/index.php/joost-vortrag-is-tv-20-becoming-real,2007-06,220.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
