Winform Connection String Gizleme
-
Merhaba arkadaşlar
bir proje üzerinde çalışıyorum.
uygulama windows tabanlı. C# ile geliştiriyorum.
uygulamaya uzaktan client bilgisayarlar erişiyor.
haliyle exe dosyasının config dosyasında connection string bilgileri bulunmuş bulunuyor.
bunun önüne nasıl geçebilirim. web servis demeyin. tüm proje için tek tek tekrar web servis yazmak çok zamanımı alır.
fikri önerisi olan?
-
Malesef yapabileceğim çok fazla bir seçenek yok, IL ve Net framework yapısı gereği yüzde yüz native code elde edemezsin. Bunun için obfuscation, Ngen ve .Net Native gibi yöntemler var ama yinede MSIL kodu içinde barındırıyor. İşi bilen biri bunlarıda rahatlıkla aşar.
Son olarak IL2CPU adında compiler çıkmıştı ve gerçek native code iddasi vardı ama hiç uğraşmadım. Bir göz atabilirsin. -
bunun mutlaka mantıklı bir yöntemi olması lazım.
config dosyası içerisnde bağlantı stringinin olması çok aptalca.en azından bunu gizlemek mümkün değil mi?
decompiler olayı vs geçtim artık -
Asayisci bunu yazdı
bunun mutlaka mantıklı bir yöntemi olması lazım.
config dosyası içerisnde bağlantı stringinin olması çok aptalca.en azından bunu gizlemek mümkün değil mi?
decompiler olayı vs geçtim artıkconfig dosyasinin içinde ki string'i RSA ile sifrelemek için yöntemler mevcut ama cok verimli değil neden dersen application'in okudugu bir seyi kişi de illa okuyabilecektir. sadece zorlaştırmak mümkün.
Bunun için web servis, web api gibi teknolojiler geliştiriliyor ki application session - permision düzeyine göre fonksionlar kullanılabilsin diye.
web servis mimarilerini kullanmanın bir diğer gereksinimi de, sen connection string confiden oradan buradan gizlersin, networku dinleyen birisi x,y,z yöntem ile yine kırar (man in middle da farkli yöntemler ile) kırıldıktan sonra adama db yi altin tepside sunuyor olursun.
bu yuzden asla ve asla database portlarını applicaion serverlarin haric bir noktaya acmaman gerekir.
-
Asayisci bunu yazdı
bunun mutlaka mantıklı bir yöntemi olması lazım.
config dosyası içerisnde bağlantı stringinin olması çok aptalca.en azından bunu gizlemek mümkün değil mi?
decompiler olayı vs geçtim artıkHocam, öncelikle config file kullanmak zorunda değilsin. Kodun içinde de bu tanımları yapabilirsin (internette ara, örneklerini bulabilirsin) ama yine isteyen bulur. sizin projenin tasarım aşaması hatalı. Eskiden olduğu gibi artık server(db) - client tasarımlarda; güvenlik, verimlilik, yönetim... gibi nedenlerle client doğrudan db bağlanmıyor. server tarafında db önünde bir api, service vb. tarzı yapı ile client'dan gelen sorgulara cevap veriliyor. Böylelikle client, db server hakkında en ufak bir bilgi içermiyor. Doğrusuda bu ve sanırım siz zaten bunu biliyorsunuz.
-
Exe yolunu gösteriyorsun. Aşağıdaki gibi encrypt / decrpyt yapıyor.
Projende herhangi bir kod gerektirmiyor. Çözerken x makinesinde şifrelediysen y makinesinde şifresini çözemiyorsun diye biliyorum, bilen biri x makinesinde çözebilir:
<connectionStrings> <add name="SecurePassDataBase" connectionString="Data Source=D-6058; Initial Catalog=DEMO_Test;User ID=sysdba;Password=xxxxxx" /> </connectionStrings>
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAATeylFe/ xsUiVdcZvovEYDwQAAAACAAAAAAADZgAAwAAAABAAAABZsoaKP62hL85wpS+O3+ znAAAAAASAAACgAAAAEAAAAHZ5NcKcDcWuEVDKyU4mz7J4AQAAAILD3fmIimyY2rkEkAdAtRn0dh9tI7+ Y5+ILciikoSd/y2myUS88vJ59pIf82vOLk/0UwKL8TnHEaFTeX7SJ5par6pW7Pyhu4kKTEMyMUQsZX/ h8RjNOnt+Q/kZIdqF2YWxFUP0RF3GWirvMNWS3do7IE0WaJ1W3wL+HhalglmKURWIGHsvJlybl+ EGI8crPnli0W/yMN+fR0P/ndaTY87kR4+0gvKDWzZ/dMh8E7ZtodFzTQ4pjpl5YyRHH/ Tc3oFUtimCnzXvCVT4ykK6NEQfPiPc5KJW6ajTEEGOrAXTnr9HF2wCRekE3WUVPYkeHRTjtuf 2hUyvYx4eoGeOIAzFFXxY1GzZqhl8YaHlukZagiTVbfXA6Wh+K0dsAiOPz+wbCT92/ blgsdkoKSMy8vRqFxAhX8HoW6KbJhsBPOvv36iBr1RecCpzUxWrVssS+wi/JclVfVs0nYb/ pFidcJwhuwBsS6IzvV1tgrk8F9CUor+6DYHd/ABQAAABZjFi30hPRmKj+pvxFzjeNH+ Dhhg==</CipherValue> </CipherData> </EncryptedData> </connectionStrings>
Kaynak kodu (build edilmiş exe hali de içerisinde): https://www.codeproject.com/KB/dotnet/598863/EncryptDecryptAppConfigFile.zip
Kaynak: https://www.codeproject.com/Tips/598863/EncryptionplusDecryptionplusConnectionplusStringpl
-
DE5TROY3R bunu yazdı
Exe yolunu gösteriyorsun. Aşağıdaki gibi encrypt / decrpyt yapıyor.
Projende herhangi bir kod gerektirmiyor. Çözerken x makinesinde şifrelediysen y makinesinde şifresini çözemiyorsun diye biliyorum, bilen biri x makinesinde çözebilir:
<connectionStrings> <add name="SecurePassDataBase" connectionString="Data Source=D-6058; Initial Catalog=DEMO_Test;User ID=sysdba;Password=xxxxxx" /> </connectionStrings>
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider"> <EncryptedData> <CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAATeylFe/ xsUiVdcZvovEYDwQAAAACAAAAAAADZgAAwAAAABAAAABZsoaKP62hL85wpS+O3+ znAAAAAASAAACgAAAAEAAAAHZ5NcKcDcWuEVDKyU4mz7J4AQAAAILD3fmIimyY2rkEkAdAtRn0dh9tI7+ Y5+ILciikoSd/y2myUS88vJ59pIf82vOLk/0UwKL8TnHEaFTeX7SJ5par6pW7Pyhu4kKTEMyMUQsZX/ h8RjNOnt+Q/kZIdqF2YWxFUP0RF3GWirvMNWS3do7IE0WaJ1W3wL+HhalglmKURWIGHsvJlybl+ EGI8crPnli0W/yMN+fR0P/ndaTY87kR4+0gvKDWzZ/dMh8E7ZtodFzTQ4pjpl5YyRHH/ Tc3oFUtimCnzXvCVT4ykK6NEQfPiPc5KJW6ajTEEGOrAXTnr9HF2wCRekE3WUVPYkeHRTjtuf 2hUyvYx4eoGeOIAzFFXxY1GzZqhl8YaHlukZagiTVbfXA6Wh+K0dsAiOPz+wbCT92/ blgsdkoKSMy8vRqFxAhX8HoW6KbJhsBPOvv36iBr1RecCpzUxWrVssS+wi/JclVfVs0nYb/ pFidcJwhuwBsS6IzvV1tgrk8F9CUor+6DYHd/ABQAAABZjFi30hPRmKj+pvxFzjeNH+ Dhhg==</CipherValue> </CipherData> </EncryptedData> </connectionStrings>
Kaynak kodu (build edilmiş exe hali de içerisinde): https://www.codeproject.com/KB/dotnet/598863/EncryptDecryptAppConfigFile.zip
Kaynak: https://www.codeproject.com/Tips/598863/EncryptionplusDecryptionplusConnectionplusStringpl
süper birşeymiş bayıldım