Posts
337
Comments
125
Trackbacks
5
Friday, January 15, 2010
Dynamic Dummy Image Generator

Vor kurzem gefunden, eine Webseite welche einfache Dummy-Grafiken erstellt.

http://dummyimage.com/240x180, z.B. erstellt folgende Grafik:

240x180

posted @ Friday, January 15, 2010 4:01 PM | Feedback (0)
Monday, January 11, 2010
Generische Methode FindControlRecursive

Fürs Archiv eine generische Methode FindControlRecursive:

public static T FindControlRecursive<T>(Control parent, string id) where T : class
{
   foreach (Control child in parent.Controls)
   {
      if ((child.ID != null)
         && string.Equals(child.ID, id, StringComparison.InvariantCultureIgnoreCase)
         && (child is T))
         return (child as T);
 
      var ctl = FindControlRecursive<T>(child, id);
      if (ctl != null)
         return ctl;
   }
   return null;
}
posted @ Monday, January 11, 2010 1:26 PM | Feedback (0)
Wednesday, January 06, 2010
Bilderpfad in web.config / appSettings

Damit ich mir das nicht mehr raussuchen hier eine Anleitung wie man eine Bilderpfad in der web.config speichert und in den ImageUrl-Parameter eines aspx:image-Tags einfügt:

Eintrag in der web.config:

<configuration>
 <appSettings >
    <addkey="ImagePath"value="~/Images/" />
 </appSettings>
</configuration>


Eine allgemeine Methode zu auslesen der appSettings:

public static string GetAppSettings(string keyname)
{
    string keyVal = ConfigurationManager.AppSettings.Get(keyname);
    if (keyVal == null)
       throw new System.Exception("AppSettings key '" + keyname + "' not exist.");
 
   return keyVal;
}


Pfad in das aspx:image-Tag einfügen:

<asp:Image ID="Image2" runat="server" Width="120px" Height="130px"
    ImageUrl='<%# this.GetImagePath(Eval("Bild")) %>' />

 
Die Methode “GetImagePath” in der codebehind-Datei:

protected string GetImagePath(object picture)
{
   return Utils.GetAppSettings("ImagePath",true) + picture;
}
posted @ Wednesday, January 06, 2010 3:22 PM | Feedback (0)
Friday, December 18, 2009
Praktisches Tool: Bildschirmlupe
OneLoupe OneLoupe wird benötigt, um alles, was auf dem Bildschirm angezeigt wird, beliebig zu vergrößern und gegebenenfalls auch festzuhalten, um es nachträglich unter die Lupe zu nehmen.

Dieses Freeware-Tool kann hier heruntergeladen werden:
http://www.softwareok.de/?seite=Microsoft/OneLoupe

posted @ Friday, December 18, 2009 2:58 PM | Feedback (0)
Wednesday, December 16, 2009
Methode für den Vergleich zweier Objekte

Hier eine kleine Methode, mit welcher sich 2 Objekte miteinander vergleichen lassen:

public static bool CompareObjectValues<T>(T obj1, T obj2) where T : class
{
   if (obj1.GetType() != obj2.GetType())
      throw new ArgumentException("ungleiche Klassen können nicht verglichen werden");

   FieldInfo[] lFields = obj1.GetType().GetFields(BindingFlags.NonPublic
      | BindingFlags.Public | BindingFlags.Instance);
 
   foreach (FieldInfo fi in lFields)
   {
      if (Convert.ToString(fi.GetValue(obj1)) != Convert.ToString(fi.GetValue(obj2)))
         return false;
    }
    return true;
 }
posted @ Wednesday, December 16, 2009 2:49 PM | Feedback (0)
Wednesday, December 02, 2009
Installierte Datenbank-Provider

Falls man wissen möchte welche Datenbank-Provider installiert sind, kann man das folgende Konsolenprogramm ausführen:

using System;

using System.Data;

using System.Data.Common;

 

namespace ConsoleApplication1

{

    class Program

    {

        static void Main()

        {

            DataTable dt = DbProviderFactories.GetFactoryClasses();

 

            Console.WriteLine("Installierte Datenbank-Provider:");

            Console.WriteLine();

            foreach (var s in dt.AsEnumerable())

            {

                Console.WriteLine(s[0]);

            }

 

            Console.ReadLine();

        }

    }

}

posted @ Wednesday, December 02, 2009 3:52 PM | Feedback (0)
Monday, November 30, 2009
Fun mit ObjectDataSource

Unlängst erhielt ich in der Entwicklung folgende Fehlermeldung:

“Eine Eigenschaft namens ‘XXX’ für den durch die DataObjectTypeName-Eigenschaft in ObjectDataSource angegebenen Typ "XXX" konnte nicht gefunden werden. “

In unserem Fall lag dies daran, dass die Update-Methode der verwendeten ObjectDataSource eine Liste von Objekten erwartete.
Nachdem wir eine neue Update-Methode erstellt haben die nur ein Objekt erwartet, war die Fehlerursache behoben.

posted @ Monday, November 30, 2009 10:06 AM | Feedback (0)
Thursday, November 26, 2009
Windows Explorer Ersatz: Q-Dir

Q-Dir ist ein kostenloser Ersatz für den Standard Windows Explorer und kann bis zu 4 Fenster mit verschiedenen Laufwerken anzeigen.

qDir 

http://www.softwareok.de/?seite=Freeware/Q-Dir

posted @ Thursday, November 26, 2009 3:01 PM | Feedback (0)
Tuesday, November 17, 2009
“Code analysis tool” von Microsoft: CAT.NET

Microsoft hat unter der folgenden Adresse als CTP-Version ein Tool für die Code-Analyse zur Verfügung gestellt:
http://www.microsoft.com/downloads/details.aspx?FamilyId=0178e2ef-9da8-445e-9348-c93f24cc9f9d&displaylang=en

Dieses Tool überprüft den Quellcode auf mögliche Schwachstellen in Richtung:
- Cross Site Scripting
- SQL Injection
- Process Command Injection
- File Canonicalization
- Exception Information
- LDAP Injection
- XPATH Injection
- Redirection to User Controlled Site

Nach der Installation steht das Tool im Hauptmenü Tools von Visual Studio zur Verfügung.

Hier ein kleines ASP.NET Quellcode-Beispiel:

<%@ Page Language="C#" ValidateRequest="false" %>

 

<script runat="server">  

    protected void Button1_Click(object sender, EventArgs e)

    {

        string eingabe = TextBox1.Text;

        Label1.Text = eingabe;

    }

</script>

 

<html>

<head id="Head1" runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="Form1" runat="server">

    <div>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        <asp:Button ID="Button1" runat="server" Text="speichern"

            onclick="Button1_Click" />

        <br />

        <asp:Label runat="server" id="Label1"></asp:Label>

    </div>

    </form>

</body>

</html>

 

Eine Analyse mit CAT.NET bringt das folgende Ergebnis:

Bild2

Dieses weist uns darauf hin, dass die Zeilen:

        string eingabe = TextBox1.Text;

        Label1.Text = eingabe;

gegen Cross-Site Scripting nicht geschützt ist!

Durch den Einsatz von Anti-XSS Libary lassen sich dann solche Lücken schliessen.

posted @ Tuesday, November 17, 2009 7:47 AM | Feedback (2)
Thursday, October 15, 2009
Kann man immer wieder mal gebrauchen

Ein kleines Konsolenprogramm welches die Verzeichnisse des lokalen Benutzers ausgibt:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; 

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (Environment.SpecialFolder sp in Enum.GetValues(typeof(Environment.SpecialFolder)))
            {
                Console.WriteLine(sp.ToString());
                Console.WriteLine(Environment.GetFolderPath(sp));
                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }
}

Die Ausgabe ist die folgende:

Desktop
C:\Users\admin\Desktop

Programs
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs

Personal
C:\Users\admin\Documents

Personal
C:\Users\admin\Documents

Favorites
C:\Users\admin\Favorites

Startup
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

Recent
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Recent

SendTo
C:\Users\admin\AppData\Roaming\Microsoft\Windows\SendTo

StartMenu
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Start Menu

MyMusic
C:\Users\admin\Music

DesktopDirectory
C:\Users\admin\Desktop

MyComputer

Templates
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Templates

ApplicationData
C:\Users\admin\AppData\Roaming

LocalApplicationData
C:\Users\admin\AppData\Local

InternetCache
C:\Users\admin\AppData\Local\Microsoft\Windows\Temporary Internet Files

Cookies
C:\Users\admin\AppData\Roaming\Microsoft\Windows\Cookies

History
C:\Users\admin\AppData\Local\Microsoft\Windows\History

CommonApplicationData
C:\ProgramData

System
C:\Windows\system32

ProgramFiles
C:\Program Files

MyPictures
C:\Users\admin\Pictures

CommonProgramFiles
C:\Program Files\Common Files

posted @ Thursday, October 15, 2009 6:07 PM | Feedback (1)
Friday, October 02, 2009
Über eine Enumeration iterieren

Falls ich das mal wieder brauche, Beispiel wie man über eine Enumeration iteriert:

class Program
{  
   public
enum
farben
   {
      rot,
      blau,
      gruen
   }
  

   static void Main(string[] args)
   {
   
      foreach (farben farbe in Enum.GetValues(typeof(farben)))
      {
        
Console
.WriteLine(farbe.ToString());
      }
      Console
.ReadLine();
   }
}

posted @ Friday, October 02, 2009 5:55 PM | Feedback (0)
Thursday, October 01, 2009
Tools und Erweiterungen für Visual Studio

findet man hier: http://visualstudiogallery.msdn.microsoft.com/en-us/

posted @ Thursday, October 01, 2009 2:09 PM | Feedback (0)
Wednesday, September 16, 2009
Checkliste für sichere ASP.Net-Webseiten

Bei Microsoft findet man unter der folgenden Adresse eine Checkliste für sicherere ASP-Net-Webanwendungen:
http://msdn.microsoft.com/de-de/library/cc431349(classic).aspx

posted @ Wednesday, September 16, 2009 8:49 AM | Feedback (0)
Thursday, September 10, 2009
Anti-Cross Site Scripting Library von Microsoft

Von Microsoft gibt es eine Anti-Cross Site Scripting Library derzeit in der Version 3.1. Diese kann man unter der folgenden Adresse herunterladen:
http://www.microsoft.com/downloads/details.aspx?familyid=051EE83C-5CCF-48ED-8463-02F56A6BFC09&displaylang=en

Die DLL-Datei “AntiXSSLibrary.dll” muss man in den bin-Ordner des ASP.NET Projektes legen und schon hat man die Methoden der Anti-Cross Site Scripting Library zur Verfügung.

Unter dem Namespace Microsoft.Security.Application kann man auf die AntiXss Klasse und deren Methoden zugreifen.

Die Methode Server.HtmlEncode encodiert nur die Zeichen < > “ und &. Die Library AntiXss dagegen stellt für das Encodieren mehrere und speziellere Methoden zur Verfügung:

HtmlAttributeEncode()
HtmlEncode()
JavaScriptEncode()
UrlEncode()
VisualBasicScriptEncode()
XmlAttributeEncode()
XmlEncode()

Hier ein einfaches Beispiel:

<%@ Page Language="C#" ValidateRequest="false" %>

<script runat="server">

 

    protected void Button1_Click(object sender, EventArgs e)

    {

        string eingabe = Microsoft.Security.Application.AntiXss.HtmlEncode(TextBox1.Text);

        Label1.Text = eingabe;

    }

</script>

 

<html>

<head runat="server">

    <title>Untitled Page</title>

</head>

<body>

    <form id="Form1" runat="server">

    <div>

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

        <asp:Button ID="Button1" runat="server" Text="speichern"

            onclick="Button1_Click" />

        <br />

        <asp:Label runat="server" id="Label1"></asp:Label>

    </div>

    </form>

</body>

</html>


Beispiele der Encodierung:

<script>alert(‘hallo’);</script>

  • wird mit HtmlEncode() zu:
    ”&#60;script&#62;alert&#40;&#8216;hallo&#8217;&#41;&#59;&#60;&#47;script&#62;”
  • dagegen mit JavaScriptEncode() zu:
    ”'\x3cscript\x3ealert\x28\u2018hallo\u2019\x29\x3b\x3c\x2fscript\x3e'”
posted @ Thursday, September 10, 2009 4:39 PM | Feedback (0)
Thursday, August 27, 2009
Konsolenfenster anpassen

Wer viel mit Konsolenfenstern arbeitet, den stört vielleicht die Standardgröße und die Standardfarben (weiss auf schwarz) dieses Fensters.

Diese Parameter kann man über den Menüpunkt Eigenschaften im Konsolenfenster ändern oder aber direkt im Quellcode:

Console.BackgroundColor = ConsoleColor.Gray;
Console.ForegroundColor = ConsoleColor
.Black;
Console
.WindowHeight = 50;
Console.Clear();

posted @ Thursday, August 27, 2009 8:03 AM | Feedback (0)
Thursday, August 13, 2009
Kleine Funktion für die Ermittlung der aktuellen Kalenderwoche

Fürs Archiv eine kleine Funktion welche die aktuelle Kalenderwoche zurückgibt:

int NumberOfWeek()
{
    
CultureInfo myCultureInfo = new CultureInfo("de-DE"
);
     Calendar
myCalendar = myCultureInfo.Calendar;

     CalendarWeekRule
myWeeekRule = myCultureInfo.DateTimeFormat.CalendarWeekRule;
     DayOfWeek
myFirstDayOfWeek = myCultureInfo.DateTimeFormat.FirstDayOfWeek;

     return myCalendar.GetWeekOfYear(DateTime
.Now, myWeeekRule, myFirstDayOfWeek);
}

posted @ Thursday, August 13, 2009 12:33 PM | Feedback (0)
Tuesday, August 04, 2009
Beispiel für eine Google-Abfrage

Hier ein kleines Beispiel für eine automatisierte Abfrage bei Google. Dieses kleine Konsolenprogramm liest einen Suchbegriff ein und gibt danach die ersten 10 Treffer bei Google aus:

using System;

using System.Collections.Generic;

using System.Net;

using System.Text;

 

namespace GoogleAbfragen

{

    class Program

    {

        static List<string> webPages = new List<string>();

 

        static void Main()

        {

            Console.WriteLine("Bitte den Suchbegriff eingeben: ");

            string suchbegriff = Console.ReadLine();

            GetGoogleResults(suchbegriff);

            Console.WriteLine();

            Console.WriteLine("Folgende Seiten wurden gefunden:");

            foreach (string page in webPages)

            {

                Console.WriteLine(page);

            }

            Console.ReadLine();

        }

 

        public static void GetGoogleResults(string searchItem)

        {

            // Google Searchstring zusammenbauen

            StringBuilder googleSearchString = new StringBuilder(searchItem);

            googleSearchString.Replace(" ", "+");

            googleSearchString.Insert(0, "http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=UTF-8&q=");

 

            // die Google-Seite einlesen

            WebClient client = new WebClient();

            byte[] result = client.DownloadData(googleSearchString.ToString());

            string googleReturnPage = Encoding.ASCII.GetString(result);

           

            int startPoint = 1;

            int endPoint = 1;

            const string newLinkStartFlag = "<h3 class=r><a href=\"";

            const string newLinkEndFlag = "\" class=l";

 

            // nur die ersten 10 Treffer einlesen

            for (int i = 0; i < 10; i++)

            {

                startPoint = googleReturnPage.IndexOf(newLinkStartFlag, startPoint);

                endPoint = googleReturnPage.IndexOf(newLinkEndFlag, startPoint);

 

                string page = googleReturnPage.Substring(startPoint + newLinkStartFlag.Length,

                                endPoint - (startPoint + newLinkStartFlag.Length));

                webPages.Add(page);

 

                startPoint = endPoint;

             }

        }

    }

}

 

posted @ Tuesday, August 04, 2009 11:35 AM | Feedback (0)
Monday, July 27, 2009
Praktisches Tool für LINQ

um LINQ zu erlernen, bzw. LINQ-Abfragen zu erstellen eignet sich das Tool LINQPad.
http://www.linqpad.net/

linq

posted @ Monday, July 27, 2009 5:44 PM | Feedback (0)
Friday, July 24, 2009
Praktische Tools für das Monitoring von LINQ to SQL Abfragen

Oft ist es schwierig das Ergebnis von LINQ to SQL-Abfragen zu debuggen oder zu monitoren. Hierbei helfen 2 Add-Ins:

Tool bei Scott Gutherie:

http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx

Dieses Tool ermöglicht es sich das Ergebnis einer LINQ-Abfrage als Select und in Tabellenform anzusehen.

 

http://www.u2u.info/Blogs/Kris/Lists/Posts/Post.aspx?ID=11

Quellcodebeispiel wie man sich die LINQ to SQL Interaktionen im Ausgabe-Fenster ausgeben lassen kann.

posted @ Friday, July 24, 2009 4:24 PM | Feedback (0)
Friday, July 17, 2009
Div-Platz reservieren

Möchte man in einer dynamischen Webanwendung den Platz für ein Div, welches nur unter bestimmten Umständen eingeblendet wird reservieren, dann kann man folgendes Style verwenden:

style="visibility:hidden;display:block;"

posted @ Friday, July 17, 2009 9:19 AM | Feedback (0)
Tuesday, July 14, 2009
Man lernt immer etwas dazu …

Heute habe ich erst gelernt, dass man mit <fieldset><legend> auch einen Groupingrahmen zeichnen kann:

<fieldset>
    <legend>Foo</legend>
    Bar
</fieldset>

posted @ Tuesday, July 14, 2009 2:57 PM | Feedback (0)
Friday, June 26, 2009
Recursiv Controls finden

Fürs Archiv:

    Public Shared Function FindControlRecursive(ByVal Root As Control, ByVal FindID As String) As Control

        Dim foundctl As Control

        If Root Is Nothing Then Return Nothing

        If Root.ID = FindID Then Return Root

        For Each ctl As Control In Root.Controls

            foundctl = FindControlRecursive(ctl, FindID)

            If foundctl IsNot Nothing Then

                Return foundctl

            End If

        Next

        Return Nothing

    End Function

 

 

    Public Shared Function FindControlInAllParents(ByVal Root As System.Web.UI.Control, ByVal FindID As String) As System.Web.UI.Control

        Dim temp As System.Web.UI.Control = Nothing

        While Root IsNot Nothing

            temp = FindControlRecursive(Root, FindID)

            If temp Is Nothing Then

                Root = Root.Parent

            Else

                Root = Nothing

            End If

        End While

        Return temp

    End Function

 

posted @ Friday, June 26, 2009 8:02 AM | Feedback (0)
Friday, July 10, 2009
Variablen eines Querystringes verschlüsseln

Hier findet man eine Beschreibung wie man die Variablen eines Querystringes verschlüsseln kann, damit diese nicht manipuliert werden können:
http://madskristensen.net/post/HttpModule-for-query-string-encryption.aspx

posted @ Friday, July 10, 2009 7:59 AM | Feedback (0)
Wednesday, July 01, 2009
Kleine praktische Tools …

…findet man hier: http://www.megapanzer.com/source-code/

posted @ Wednesday, July 01, 2009 12:45 PM | Feedback (0)
Monday, June 29, 2009
Remotedesktopverbindung: maximale Anzahl der Verbindungen erreicht

Wenn man bei einer Remotedesktopverbindung folgende Meldung erhält:

remote

Dann kann man sich trotzdem anmelden indem man die Remoteverbindung mit dem Parameter “\admin” startet.

posted @ Monday, June 29, 2009 7:53 AM | Feedback (0)