.NET Blog   ·   .NET Casts   ·   .NET GUI Foren   ·   .NET BlogBook   ·   WPF Blogger   ·   visual studio one   ·   ASP.NET professional

  • ACHTUNG - NEUES BLOG

    Ab sofort steht unter http://devtyr.norberteder.com mein neues Blog zur Verfügung. Dieses Blog wird nicht weiter betreut, bleibt aber erhalten. Neue Eintr%auml;ge erfolgen nur mehr im neuen Blog. Kommentare werden ebenfalls nicht mehr behandelt. Wer weiterhin meinen Einträgen und Aktivitäten folgen möchte, möge bitte RSS-Feeds, Verlinkungen etc. an die neue Location anpassen.
Download .NET Essentials Installer
Trickkiste

Die Suche endet ...

12.04.07 - Blog-Intern
Beitrag von Norbert Eder
 ... hier.

Ja. Genau das ist mir soeben passiert. Via Google etwas gesucht (ich wusste aber, dass ich es schon einmal wo gelesen hatte) und wo kam ich hin? Auf mein eigenes Blog. Jaja, ich hatte es nicht nur gelesen. Nein. Ich hatte es sogar selbst geschrieben.

Da fragt man sich doch glatt, ob man schön langsam nicht alt wird ...

  2 Kommentare - 629 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


.NET BlogBook Ausgabe 2 im Anmarsch

12.04.07 - .NET, Allerlei
Beitrag von Norbert Eder
 Am 15. April 2007 soll die zweite Ausgabe des .NET BlogBooks erscheinen. Ich möchte hier kurz ankündigen (da ich dazu einige Rückfragen erhalten habe), dass der Termin natürlich gehalten wird. Die neue Ausgabe ist eigentlich fertig und bekommt noch an einigen Stellen einen Feinschliff verpasst.

Zusätzlich zu diversen Qualitätsverbesserungen (danke für die Rückmeldungen) hat sich auch beim Umfang etwas getan. Von knapp 150 Seiten konnte das Buch auf über 200 Seiten erweitert werden.

Und schon jetzt haben wir wieder eine nette Liste für anstehende (und auch notwendige) Verbesserungen für die dritte Ausgabe. Allzu viel möchte ich dahingehend allerdings noch nicht verraten.

Genauere Informationen werden am 15. April 2007 auf der .NET BlogBook Projektseite bekannt gegeben.

Wer möchte, kann sich bis dahin die Version 1.1 laden, ebenfalls unter obiger Adresse zu finden.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Rückblick Livecast Rootkits

11.04.07 - Security
Beitrag von Norbert Eder
 Gestern hat er nun stattgefunden. Der lang erwartete Livecast über Rootkits von Frank Solinske. Und ich muss sagen, dass es mich schon irgendwie getroffen hat.

Ansich bin ich in den gestrigen Cast mit doch ein wenig Vorwissen über das Thema Security gegangen. Zumindest getraue ich mir zu, doch ein wenig mehr über das Thema zu wissen, als der Großteil der Menschen, die Computer verwenden. Ernüchternd war allerdings zu sehen, wie "einfach" es gehen kann. Mit der richtigen Strategie, ein wenig Know-How und den richtigen Tools kann es schon ganz gewaltig abgehen.

Eigentlich wollte ich ja bereits gestern nach dem Livecast einen kleinen Rückblick schreiben, aber dann musste ich doch noch eine Nacht darüber schlafen, um alles sickern zu lassen. Und selbst jetzt bin ich noch etwas aufgewühlt.

Da glaubt man doch tatsächlich ein wenig paranoid zu sein, was die Sicherheit am eigenen Rechner betrifft, um dann zu raffen, dass dem eigentlich überhaupt nicht so ist. Mehr muss es sein.

Nun gut, auf jeden Fall werden wir den Mitschnitt auf .NET Casts bereitstellen, damit sich jeder Interessierte sein eigenes Bild darüber machen kann.

Nochmal ein herzliches Dankeschön an Frank für diesen absolut genialen Vortrag, der sicherlich allen Teilnehmern gewaltig die Augen geöffnet hat.

PS: Wie es nun mit den Livecasts weitergeht, ist noch nicht ganz geklärt. Sobald es eine gute Lösung gibt (die auch qualitätsmäßig in Ordnung ist), werden wir dies entsprechend bekannt geben. Möchte uns jemand unterstützen (zum Beispiel durch gutes Zureden, etc.) dann möge man sich direkt bei mir melden. Danke.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Enterprise Library 3.0 - April 2007 erschienen

10.04.07 - Entwicklung, Patterns, .NET, Allerlei
Beitrag von Norbert Eder
 Die Enterprise Library 3.0 - April 2007 ist verfügbar und kann heruntergeladen werden. Folgende Application Blocks sind verfügbar:

- Caching Application Block
- Cryptography Application Block
- Data Access Application Block
- Exception Handling Application Block
- Logging Application Block
- Policy Injection Application Block
- Security Application Block
- Validation Application Block

Weitere Änderungen betreffen unter anderem die Integration der Windows Communication Foundation (WCF).

Download Enterprise Library 3.0 - April 2007

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Livecast Rootkits von Frank Solinske

09.04.07 - .NET, Allerlei
Beitrag von Norbert Eder
 Ich möchte nochmals auf den morgigen Livecast Rootkits von und mit Frank Solinske hinweisen.

Der Livecast findet morgen (10. April 2007) um 20:00 Uhr statt und wird NICHT via Skypecast abgehalten. Genauere Informationen werden heute oder morgen auf .NET Casts veröffentlicht.

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Imports kann sehr schmutzig sein ...

07.04.07 - .NET, Allerlei
Beitrag von Norbert Eder
 Ich programmiere ja wahrlich nicht oft in VB.NET und daher kam dies auch eher zufällig zustande. Aber, was mich schon sehr verwundert hat, im Vergleich zu C#, war die Möglichkeit, mittels Imports, Klassen anzugeben. Unter C# funktioniert dies nicht (was auch gut ist).

So kann beispielsweise

Imports System.Net.Dns

eingegeben werden, um dann direkt auf die Methode GetHostAddresses zuzugreifen, ohne Angabe der Klasse. Wie gesagt, dies ist unter C# nicht möglich (zumindest habe ich dazu keine Möglichkeit gefunden).

Von diesem Verhalten würde ich grundsätzlich abraten, da jemand, der den Code nicht kennt, nicht auf den ersten Blick sieht, wie der Methoden-Aufruf zustande kommt. Mit eigenen nicht-statischen Klassen kann man an dieser Stelle weiters für gröbere Verwirrung sorgen. Ein Beispiel möchte ich mir allerdings an dieser Stelle vorenthalten. Vielleicht macht das jemand nach und das wäre äußerst schlimm ....

  6 Kommentare - 694 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Proxy-Pattern: Beschreibung und Beispiele

06.04.07 - Entwicklung, Patterns, .NET, Grundlagen
Beitrag von Norbert Eder
 Ein Proxy kann an vielen Stellen eingesetzt werden. Grundlegend handelt es sich dabei um einen Platzhalter für das tatsächlich aufzurufende Objekt. Das heißt, es leitet vom gleichen Interface ab, besitzt die gleichen Methoden, leitet aber alle Anfragen an das dahinterliegende Objekt weiter. Aber welchen Vorteil besitzt dieses Pattern nun?

Durch dieses Pattern ist es möglich, Änderungen und Prüfungen einzuführen, ohne das eigentliche Objekt abändern zu müssen. So können beispielsweise Sicherheitsprüfungen stattfinden (Protection Proxy). Dies bedeutet, dass das Proxy-Objekt zuerst überprüft, ob der Aufrufer über die notwendigen Rechte verfügt, bevor der Aufruf weitergeleitet und abgearbeitet wird. Weiters wird häufig ein Remote Proxy verwendet, der die Anfrage kodiert, an das echte Objekt sendet, die Antwort dekodiert und zurück gibt. Dieser Vorgang ist unter anderem dann interessant, wenn Application Domains erstellt werden sollen, die zur Laufzeit die Möglichkeit bieten sollen, entladen werden zu können. Schließlich wäre da noch Cache Proxies, die bestimmte Daten des eigentlichen Objektes cachen und so diverse Vorgänge beschleunigen können. Das sind jedoch nicht die einzigen Möglichkeiten. So gibt es noch Synchronization Proxies und viele weitere.

Ein einfaches Grundgerüst eines Proxies findet sich nachfolgend:
using System;
using System.Collections.Generic;
using System.Text;

namespace ProxyPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            CalculatorProxy proxy = new CalculatorProxy();
            Console.WriteLine(
                String.Format("12 + 17 = {0}", proxy.Add(12, 17))
                );
            Console.WriteLine(
                String.Format("12 - 17 = {0}", proxy.Sub(12, 17))
                );

            Console.Read();
        }
    }

    public interface ICalculator
    {
        decimal Add(decimal x, decimal y);
        decimal Sub(decimal x, decimal y);
    }

    public class Calculator : ICalculator
    {
        public decimal Add(decimal x, decimal y)
        {
            return x + y;
        }

        public decimal Sub(decimal x, decimal y)
        {
            return x - y;
        }
    }

    public class CalculatorProxy : ICalculator
    {
        private Calculator _calculator = new Calculator();

        public decimal Add(decimal x, decimal y)
        {
            return _calculator.Add(x, y);
        }

        public decimal Sub(decimal x, decimal y)
        {
            return _calculator.Sub(x, y);
        }
    }
}

Dies stellt die einfachste Variante eines Proxies dar. Ein vereinfachter Protection Proxy könnte beispielsweise so aussehen (Erweiterung des obigen Beispiels):
using System;
using System.Collections.Generic;
using System.Text;
using System.Security;

namespace ProxyPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                CalculatorProxy proxy = new CalculatorProxy("test2");
                Console.WriteLine(
                    String.Format("12 + 17 = {0}", proxy.Add(12, 17))
                    );
                Console.WriteLine(
                    String.Format("12 - 17 = {0}", proxy.Sub(12, 17))
                    );

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.Read();
        }
    }

    public interface ICalculator
    {
        decimal Add(decimal x, decimal y);
        decimal Sub(decimal x, decimal y);
    }

    public class Calculator : ICalculator
    {
        public decimal Add(decimal x, decimal y)
        {
            return x + y;
        }

        public decimal Sub(decimal x, decimal y)
        {
            return x - y;
        }
    }

    public class CalculatorProxy : ICalculator
    {
        private Calculator _calculator = new Calculator();
        private string _password = "test";
        private string _givenPassword = null;

        public CalculatorProxy(string password)
        {
            this._givenPassword = password;
        }

        public decimal Add(decimal x, decimal y)
        {
            if (this._givenPassword == this._password)
                return _calculator.Add(x, y);
            else
                throw new SecurityException("Not allowed: Add");
        }

        public decimal Sub(decimal x, decimal y)
        {
            if (this._givenPassword == this._password)
                return _calculator.Sub(x, y);
            else
                throw new SecurityException("Not allowed: Sub");
        }
    }
}

Ich möchte nur darauf hinweisen, dass ein Protection Proxy entsprechend abgesichert sein sollte. Die obige Variante dient lediglich der Veranschaulichung und sollte so nicht verwendet werden.

  3 Kommentare - 2931 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


IsolatedStorage (Computerspeicher) verwalten

06.04.07 - .NET, Grundlagen, Datenverwaltung
Beitrag von Norbert Eder
 Wer Konfigurationen oder andere Informationen in den Isolated Storage schreibt, dem wird das Isolated Storage Tool (storeadm.exe) bekannt sein. Wem nicht, der sollte es sich genauer ansehen.

Es handelt sich dabei um eine Konsolen-Anwendung, mit der der Inhalt des IsolatedStorage angezeigt oder gelöscht werden kann. In manchen Fällen durchaus hilfreich.

Das Tool gibt es - wie auch den isolierten Speicher - seit .NET 2.0 und kann einfach über die Visual Studio 2005 Commandline aufgerufen werden.

Wer Informationen dazu benötigt, der sollte sich folgende Links genauer ansehen:
Einführung in die isolierte Speicherung
Szenarien für die isolierte Speicherung

  Kommentar hinzufügen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Prozess-Output via C# anzeigen

06.04.07 - .NET, Grundlagen, Base Framework
Beitrag von Norbert Eder
 Hin und wieder kommt es dann doch einmal vor, dass via .NET andere Prozesse aufgerufen werden und deren Output auf die Standard-Ausgabe eingelesen werden soll. Dazu gibt es mehrere Möglichkeiten.

Die erste Variante liest alle Daten aus der Standard-Ausgabe ein, wenn der Prozess fertig abgelaufen ist:

ProcessStartInfo psi = new ProcessStartInfo("MyPathMyApp.exe");
psi.RedirectStandardOutput = true;
psi.UseShellExecute = false;

Process p = new Process();

p.StartInfo = psi;
p.Start();
StreamReader sr = p.StandardOutput;
p.WaitForExit();
string output = sr.ReadToEnd();
sr.Close();
Debug.WriteLine(output); 


Manchmal dauert der Prozess selbst länger und es ist wichtig, die Daten dann zu bekommen, wenn diese auf der Standard-Ausgabe geschrieben werden. Hierzu kann seit .NET 2.0 mit dem Event OutputDataReceived gearbeitet werden. Das sieht so aus:

private void StartProcess()
{
    ProcessStartInfo psi = new ProcessStartInfo("MyPathMyApp.exe");
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    Process p = new Process();

    p.OutputDataReceived += 
        new DataReceivedEventHandler(p_OutputDataReceived);
    p.StartInfo = psi;
    p.Start();
    p.BeginOutputReadLine();

    p.WaitForExit();            
}

void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
    Debug.WriteLine(e.Data);
}

In diesen Fällen werden die Informationen immer nur als Debug-Informationen geschrieben. Sie können aber natürlich auch anderweitig weiterverwendet werden.

Hier noch ein kleiner Hinweis: Dadurch wird alles abgefasst, was auf die Standard-Ausgabe geschrieben wird. Liegt also beispielsweise eine Windows-Forms-Anwendung vor, die zwecks Debugging-Informationen (siehe Visual Studio) viele Informationen via Console.WriteLine schreibt und das damit verteilt wird, können diese Informationen dadurch ebenfalls ausgelesen werden. Das sollte man sich in manchen Fällen schon ganz gut überlegen (siehe Debug.WriteLine).

  4 Kommentare - 11059 mal angesehen   |  0 Trackbacks   |  Permalink  |  Trackback-URL


Advanced Captcha in ASP.NET: Eine weitere Variante

05.04.07 - .NET, ASP.NET
Beitrag von Norbert Eder
 So, hier habe ich noch eine Variante des bereits vorgestellten Captchas. Auch dafür sollte es aktuell noch keine entsprechenden Implementierungen in den diversen Bots geben.

Sieht dann so aus:


Captcha Sample 2 Download

  Kommentar hinzufügen   |  1 Trackbacks   |  Permalink  |  Trackback-URL



Zurück Weiter