Yazılımın servis şeklinde yazılması?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mr_sagop
Üye
Mesajlar: 17
Kayıt: 02 Eki 2013 02:18

Yazılımın servis şeklinde yazılması?

Mesaj gönderen mr_sagop »

Merhaba arkadaşlar şöyle bir durumum var umarım yardımcı olabilirsiniz?

Delphi 2007 ile yazdığım bir raporlama yazılımım mevcut fakat burada program MS SQL e direk connection la bağlı 1433 portu üzerinden, yazılımı yaptığım yerin bilgi işlem departmanı bana bunun güvenli olmadığını ve olayın servis şeklinde yapılmasını söyledi.

1.si benim servis yazılımları hakkında bir bilgim yok
2.si sql işlemleri ve sonuçlar client ve server arasında şifreli olarak aktarılacak.

Bu olayları servis yazmadan güvenli bir şekilde portu dinleyenlerin bu sonuçları yakalayamamasını mümkün kılabilir miyim?

şimdiden herkese çok teşekkürler
omurolmez
Üye
Mesajlar: 187
Kayıt: 31 Eki 2012 11:41

Re: Yardım dostlar, kafa patlatmaktan bittim

Mesaj gönderen omurolmez »

Öncelikle,

"yazılım yaptığınız yerin bilgiişlemi" beni şaşırttı.

Eğer bu isteklerini, yabancı bir teknik şartnamenin türkçesinden vb ezberden söylemiyorlarsa, ciddi bilgi birikimi edinmişer. Çok şanslısınız.
Öte yandan, servis yazılımı ile istedikleri tek şey "man in the middle" atağına karşı güvenlik olmayabilir. Bu talepleri, belli şartlar altında, ciddi performans artışı sağlar. Zaten three-tier architecture dedidkleri olay da bunun içindir. Niye böyle söylüyorum. Çünki gerçekten de, hem mq sql sunucusunun konfigürasyonu hem de yazılımın ve veritabanının tasarımı sayesinde, sunucuyu neredeyse yüzde yüze yakın bir güvenlik ile (Dos, ddos saldırılarına çözüm bildiğim kadarıyla yok. Bu işi, bu saldırılara uygun firewall cihazları ile yapmak gerekiyor.) tüm internete bile açabilirsiniz (Hemen söyleyeyim, bu şahsi kanaatim. Piyasada kimse buna güvenmez, daima başka yöntemler denerler. Mesela uzak masaüstü, web uygulaması veya tünel vb bağlantılar ile de güvenlik sağlanabiliyor).

Servis yazılımı yazmak Delphi ile gerçekten oldukça kolay. Uyulması gereken bir iki basit kural var o kadar :
* Servis yazılımları, masaüstü ve pencere sistemi ile haberleşemez. Yani klavyenizi, farenizi, ekranınızı, vb insan arayüz aygıtlarını kullanamazsınız (Usb port etkileşimi hariç / Desktop Interaction seçeneği pratikte yeterli değil deniyor).
* Servis yazılımlarını debug etmek, yani Delphi içinden çalıştırmak _bildiğim kadarıyla_ mümkün değil. Sadece, debug kipi ile derlenmiş ve başlatılmış servis uygulamasına, delphi debugger ı sonradan attach etmek ile assembly görünümünden hallice bir debug söz konusu.
* Servis uygulamaları tüm istisnaları işlemelidir. Aksi halde ilk istisnada durdurulur ve silinmek üzere işaretlenir (kaldır/yükle yapmadan tekrar çalıştırılamaz).

Delphi bu işi, servis yazılımının Service Manager ile yapması gereken tüm trafiği kendisi üstlenerek oldukça kolaylaştırıyor. Tıpkı TDataModule nesnesi gibi bir TService nesnesinde Başla, Dur, Durakla, Devam Et, vb. Service Manager talepleri için olay yöneticileri mevcut. Bu sayede haberleşiyorsunuz. Ayrıca, karmaşık Windows Event Log sistemini de basit bir LogMessage (adını yanlış hatırlıyor olabilirim) çağrısı ile kendisi üstleniyor. Yapmanız gereken, bu temel olaylarda, asıl işi yapacak olan kanalı (Thread) oluşturmak başlatmak, _mümkünse_ beklemeye almak ve yok etmek.

İşin zor kısmı servis uygulaması yazmakta değil; o uygulama ile haberleşmekte !

Linux ta bu (tıpkı Ms Sql in yaptığı gibi) tcp/ip trafiği ile sağlanır. Windows 'ta alternatif olarak pipe ve mailslot denilen haberleşme sistemleri de mevcut. Ha bir de iki işletim sistemi de, alternatif olarak ortak bir dosya üzerinden hafıza paylaşımını destekliyor (file mapped memory sharing). Ancak bu sonuncusu pratik nedenlerle tercih edilmiyor. Aslında çoğu uygulama ikincisini de tercih etmiyor ve sadece tcp/ip kullanıyor (communicating service via tcp). Bu haberleşme için In(ternet)Di(rect) veya alternatif bileşen paketleri kullanılabilir. localhost/127.0.0.1 dışındaki erişimlerde servis uygulamasının "Local account" ile mi yoksa "network account" ile mi başlatılması gerektiği konusu önemli olabilir (Veya Windows 8 de kim bilir yeni ne icad ettiler) (accessing network in service application). Eğer "yazılım yaptığınız yerin bilgiişlemi" gerçekten sağlamsa, bu iki hesabın da kulanılmasına izin vermez ve "Users" grubuna bile dahil olmayan bir hesap kullanmanızı şart koşar. Bu durumda da, servis uygulamasını çalıştıracak hesabın, hangi ayrıcalıklara ihtiyaç duyduğu ve bu ayrıcalıkların hesaba nasıl atanacağı konusu gündeme gelir (service account privileges issues / service application security token issues).

Yazdıklarımın tamamı google da mevcut. Freelancer.com size çözüm sunabilir.

Servis uygulaması yazmak yerine, hem güvenlik hem de performans ihtiyaçlarına cevap verebilmek için, web arayüzünde bir raporlama aracı geliştirmeyi veya satın almayı (Oracle çözümleri ve bir iki tane daha ticarı raporlama bileşeni paketi bunu yapıyor) ve bu web arayüzünün güvenliğini sağlamayı teklif edebilirsiniz.

------------------
Meraklısına, veritabanı internete nasıl güvenle açılır (Umarım atladığım bir şey yoktur) :
* İşletim sistemini koruma: Veritabanı sunucusu servis hesabı yetkisizdir (Users grubuna bile dahil değildir).
* İşletim sistemini koruma: Dosya sistemi üzerinde servis hesabının sadece gereken veritabanı motoru çalıştırılabilir dosyalarına okuma ve sadece veritabanı dosyalarına okuma/yazma yetkisi vardır.
* Veritabanı koruma: Veritabanında tüm public role veya user lar etkisizleştirilir (revoke privileges).
* Veritabanı koruma: Veritabanına bağlanılan veritabanı kullanıcısının schema tablolarına erişimi kısıtlanır.
* Veri koruma: Client da kodlanmış tüm döngü işlemleri sp ye veya view a kodlanır ve sadece sp/view a okuma izni verilir. Tablolara doğrudan erişim kısıtlanır.
* man in the middle koruma: Veritabanı destekliyorsa, trafik encrypt edilir (müşteriye yüzde yüz güveniyoruz). Veritabanı desteklemiyor ise, bunu sonradan yapacak yazılımlar var (Firebird 3.0 öncesi için opensource çözümler mevcut).
* Yazılımda hard-coded veritabanı kullanıcı şifresi bulunmaz (müşteriye hala güveniyoruz ancak yazılımı çaldırabilir).
* dos koruma: Akıllı firewall cihazı veritabanı portunu internete açmıştır ancak olağan dışı trafik algılarsa, ip adres(ler)ini otomatik olarak bloklar).
Ömür Ölmez
mr_sagop
Üye
Mesajlar: 17
Kayıt: 02 Eki 2013 02:18

Re: Yardım dostlar, kafa patlatmaktan bittim

Mesaj gönderen mr_sagop »

Ömür Ölmez çok teşekkür ederim cevabınız için sorunun çözümü için vermiş olduğunuz bilgiyi daha detaylı araştırıp karşı tarafa sunabilirim çok sağolun gerçekten :wink:
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: Yazılımın servis şeklinde yazılması?

Mesaj gönderen csunguray »

DataSnap (eski adıyla Midas) konusunu inceleyin.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: Yazılımın servis şeklinde yazılması?

Mesaj gönderen vkamadan »

Sanırım arkadaşın bahsettiği "Uygulamayı Servis Şeklinde Yazmak" kavramında Web servislerinden bahsediliyor,
ama evet web servis yapısı da delphi de oldukça kolay, database e doğrudan bağlanmak yerine SOAP Server uygulamasıyla ya da DataSnap ile bir iş katmanı oluşturulup sizin uygulama ve gelecekte var olabilecek diğer uygulamalar VT ye doğrudan ulaşmak yerine iş katmanına iş buyuracakları bir yapı kurulması hem güvenli hemde performanslı olacaktır,

Eğer bütün uygulamalar Delphi ile geliştirilecekse en hızlı yol @csunguray ın da belirttiği gibi iş katmanını DataSnap ile inşaa etmektir XE ve sonrasında çok çok gelişti ,
eğer farklı dillerden iş katmanınıza erişiecekse SOAP Web SErvisi mimarisiyla yapıyı kurmanız daha global olur, DataSnap e Delphi dışında client yazmak hernekadar mümkün olsada biraz göreceli.

İyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Cevapla