Hallo zusammen,
ich schreibe grade einen Webservice in den ich X-Wochen investiert habe, damit dieser mit möglichst vielen Datenbanksystemen arbeiten kann. Aktuell ist dabei MySQL, Oracle, SQL Server 2000 und höher supported. Gut und schön. Jetzt haben alle diese DBMS eins gemeinsam: Sie brauchen einen Servernamen, Usernamen, Password und Katalog. Da der connection string erst in der Datenbankzugriffsschicht dynamisch zusammengebaut wird, sind diese 4 Werte einzeln über die Settings Klasse in der web.config gespeichert (anstelle eines fertigen Conenction Strings).
Jetzt die spannende Frage:
Wie gut ist denn nun wirklich die web.config gegen Zugriffe von aussen abgesichert? Können User von aussen daran? Wie können Daten in der web.config sicher verschlüsselt werden? Aktuell habe ich zu einer Krücke gegriffen und den Password String wie folgt verschlüsselt:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| string dbPwdDecryptionString = "sdo))jnujsd(fncvsnii*'Äun67FZZFsdfzt%&*";
public Service() { conn = new MdbConnectionMySql(Settings.Default.DBServer, Settings.Default.DBCatalog, Settings.Default.DBUid, Encryption.Decrypt(Settings.Default.DBPassword, dbPwdDecryptionString)); helper = new MdbHelper(conn); } |
Die Encryption Klasse enthält die Methoden "Encrypt" und "Decrypt" in denen ich mit dem MS TripleDES Provider die Verschlüsselung/Entschlüsselung vornehme. Aber das Kennwort steht hat im Klartext im Code (in der Prop "dbPwdDecryptionString"), und den kann ich ja nun wirklich nicht als sicheren Speicherort für Kennwörter ansehen. Wie gesagt, das ganze ist ja auch erstmal eine Krücke.
Die Variante die unter "http://msdn.microsoft.com/de-de/library/zhhddkxy%28VS.80%29.aspx" über aspnet_regiss.exe beschrieben ist, ist leider keine Alternative, da ich den Webservice dann nicht mehr bei einem Webhoster einsetzen könnte.
Nun hoffe ich, dass mich einer von euch auf den Pfad der Erleuchtung führen kann.
gruss Dave