Security Falle??

30/09/2008 - 22:42 von Marcel Beutner | Report spam
Hallo NG,

Ich bin gerade am Design meiner Anwendungsarchitektur. Die Datenschicht und
alle DatenProvider sollen in separaten Assemblies liegen. Alle DatenProvider
implementieren die Schnittstelle IDataLayer, welches ich wiederum in der
BusinessLogic verwende. Da ich in der BL nicht mein Interface initalisieren
möchte, verwende ich dafür eine ProviderFactory, dem ich das IDataLayer
Interface übergebe und als Rückgabewert eine Instanz bekomme.

<code>
public interface IDataLayer
{
BankAccount GetAccount(string accountNumber);
}

public class DataLayerMock : IDataLayer
{
public BankAccount GetAccount(string accountNumber)
{
}
}

public static class DataProviderFactory<T>
{
public static T CreateDataProvider()
{
string assemblyFileName = @"DataLayerMock.dll"; //aus config
string usedProvider = "MB.BankManager.DA.DataLayerMock"; //aus
config

Assembly assProvider = Assembly.LoadFile(assemblyFileName);


Predicate<Type> exists = delegate(Type t)
{
return t.Name.Equals(typeof(T).Name);
};

Type providerType = assProvider.GetType(usedProvider);
if (!Array.Exists<Type>(providerType.GetInterfaces(), exists))
throw new ArgumentException();


return ((T)Activator.CreateInstance(providerType));
}
}

Aufruf in der BL:
IDataLayer data = DataProviderFactory.CreateDataProvider<IDataLayer>;
data.GetAccount("1234");
</code>


Meine ProviderFactory besitzt eine Config Datei indem der zu verwendente
Provider hinterlegt ist. Diese Vorgangsweise ermöglich mir, ohne eine
Änderung in der BL den Provider zu wechslen bzw einen neuen zu erstellen. In
"meiner" Theorie hört sich das alles wunderbar an, jetzt stellt sich mir
aber die Frage ob das nicht eine Einladung für Angreifer ist, eigenen Code
auszuführen. Man bràuchte ja nur einen bösartigen DataProvider schreiben und
ihn in meiner Provider KOnfigurationsdatei zu registrieren. Gibt es da eine
Möglichkeit?


Danke für jeden Tip!

gruss Marcel
 

Lesen sie die antworten

#1 Frank Dzaebel
01/10/2008 - 07:18 | Warnen spam
Hallo Marcel,

Meine ProviderFactory besitzt eine Config Datei indem der zu
verwendente Provider hinterlegt ist. Diese Vorgangsweise ermöglich
mir, ohne eine Änderung in der BL den Provider zu wechslen bzw einen
neuen zu erstellen. In "meiner" Theorie hört sich das alles wunderbar
an, jetzt stellt sich mir aber die Frage ob das nicht eine Einladung
für Angreifer ist, eigenen Code auszuführen. Man bràuchte ja nur
einen bösartigen DataProvider schreiben und ihn in meiner Provider
KOnfigurationsdatei zu registrieren. Gibt es da eine Möglichkeit?



Er kann ja ggf. schon mit *Deinem* Original-Provider
Dummheiten anstellen. Das verhinderst Du momentan
gar nicht. Authentifizierung und Autorisierung (ggf. Rollen?) ist
nicht vorhanden und bzgl. CAS sehe ich auch keine Prüfungen.

[Erstellen von sicheren Klassenbibliotheken]
http://msdn.microsoft.com/de-de/lib...2ksxt.aspx

[Security in Class Libraries]
http://msdn.microsoft.com/en-us/lib...8akbe.aspx

[Verwenden von sicheren Klassenbibliotheken]
http://msdn.microsoft.com/de-de/lib...7hb4c.aspx

[Verwenden von deklarativer Sicherheit mit Klassen- und Memberbereich]
http://msdn.microsoft.com/de-de/lib...2ke7h.aspx

[Grundlagen der Codezugriffssicherheit]
http://msdn.microsoft.com/de-de/lib...ceax8.aspx

[Rollenbasierte Sicherheit]
http://msdn.microsoft.com/de-de/lib...d59t0.aspx

Weiterhin schützt Du die Assembly am besten gegen
Änderungen durch "starke Namen", Policies in
Verbindung mit Zertifikaten. Mit einem alleinigen
StrongName ist keine Vertrauensebene verknüpft,
daher ist die Verwendung der Tools "File Signing-Tool
(Signcode.exe)" bzw. "Signaturtool (SignTool.exe)" wichtig:

[Überlegungen zur Assemblysicherheit]
http://msdn.microsoft.com/de-de/lib...eace3.aspx

Ist jetzt etwas umfangreich geworden, aber Du musst
ja keinen Hochsicherheitstrackt entwickeln und
an gewissen Punkten ggf. pragmatisch vorgehen.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen