OCX Kullanmak Güvenlimidir ?

Başlatan __TECH__, 05 Temmuz 2011, 13:59:14

__TECH__

Arkadaşlar delphi ile hazırlanmış bir Activex forumını hostuma atıyorum veri tabanından bilgileri çekip gözteriyor fakat ocx forum üzerinde veri tabnına bağlantının sağlandıgı kodlar mevcut , ocx dosyasının direk netten indirilip kullanılması mümkünmüdür ? ocx kullanarak yapılan login sorgulamaları güvenlimidir ?

MC_Skywalker

Host aldığınz sunucunun data base desteğine göre ocx kullanmadan veri çekebilirisniz. sql komutlarını kullanarak. Ocx gerekli ise sizin programı çalıştırdığınız pc nizde kalır.

server tarafında host bölgenizde ocx barındırmak güvenlik risiki oluştura bilir.

t2

#2
Güvenli olması OCXin yapısına bağlı. OCX bir bakıma exe içinde exe demektir. Sizin güvenli varsaydığınız ocx bir süre sonra yumurtlayabilir. yani 1 ay çalışır belki de 1 sene. bu arada bilgisayarda bazı verileri toplar etrafı kolaçan eder. hatta ekran görüntüleri şifreleri vs. zip yapar.

Sonra vakti gelince sizin exe çalışırken kırallar gibi internete bağlanır bu pakedi upload eder. OCX multi thread olabilir. yani programınız hiç kasılmadan arka planda dolaplar çevrileiblir. Arka plandaki trhread in CPU kullanımı %50 yi bile bulabilir.  yani büyük işler yapar. Fakat sizin program da paşa paşa çalışır.  kasılmaz.


Tamam ocx temiz projeyi yaptınız güzel çalışıyor zararlı bir iş çevirmiyor. Aradan zaman geçti bu bilgisayara ocxin yeni sürümünü yüklediler. işte bu yeni sürüm iş çevirebilir. OCX dosyası dışarıdadır. sizin program değişmese bie dışarıdaki ocx değişirse zararı olabilir. OCXi ocx yapan içindeki class namedir.  Siz kendi programınızda bunu kullandınız diyelim giriş çıkış fonksiyonları var. işte bunlara hiç dokunmadan sadece yapılan işlerin içeriği değişirse programınız artık başka işler yapmaya başlar. bütün bunları yapmak sadece dışarıdaki *. ocx dosyanıun değişmesiyle olur.  yapacak kişi kim? tabi ki ocx i ilk derleyen kişi yapaiblir. belki başkası da ocxi benzete bilir. aynısından çakma ocx yapabilir.


Not: OCX leriniz itinayla yapılır. 

Burak B

#3
Güvenli değildir. En azından veri güvenliğinin önemli olduğu bir yerde. Direkt netten indirilip kullanmakla PC' de barındırıp kullanmak arasında bir fark yok ActiveX başlı başına bir zaafiyet.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

__TECH__

hocam ilginize ve cevaplara teşekkürler , delphi ile bir client hazırladım ve internetteki ms sql veri tabanına bayilerin siparişlerini girmesini saglamk istedim fakat exe içesinde ms sql baglantı için ado kullanmıstım ve derlenmiş olan exeyi kırıp adoya ait connection stringin okunması cok kolay kendim denedim   5s aniye sürdü :) ve program tüm connection strgin bilgilerimi bana verdi , bu yüzden delphide activex forumlarla ocx yapıp web serverde site gibi calıstırıp bayilerin bu siteyi kullanmasını denemek istiyorum ama ondada sorun olacak gibi , nasıl bir yolla çözerim bu işi ? her bayiye bir client yazılım vermek istiyorum ve herkes kendi siparişini sismte login olup versin sepete eklesin .

t2

#5
bayiler siteye login olup siparişi oradan kaydetse olmmaz mı?

__TECH__

hocam sitedeki üyeler genelde perakende alıcılar ama bayilerin siparişlerinde adetler cok ve arama yapmalarıda gerekiyor ürün kod numaralarına göre vs , veri tabanımda   786bin küsür kayıt var , web üzerinden arama yaptırıp sepet işlemi bayi için zor durum, perakende müşteri genelde bir kac ürün bazında arama ve sepet işlemi yapıyor ve perakende olan ürünlerin veri tabanı zaten ayrı , fatura takip , sipariş takip,muhasebe takip derken site üzerinde zor iş ve siteyide trafikten dolayı yavaslatmıs olucaz o yüzden bayilere özel direk client yazılım düşündüm ama veri tabanı bilgilerini koruma yolunu hala bulamadım

Burak B

Benim sana anlattığım yöntemi anlamamışsın. OCX felan boşver. Bak bir arkadaş diğer başlıkta VPN den bahsetmiş oda bir çözüm. Ama sorun şu maddelere açık cevaplar vermek ve çözüm üretmek. Bu yazdıklarımı delphi uygulamaları ile haberleşme yapmak istediğin için yazıyorum. Ancak genel manadada faydalanabilirsin.

1- Kötü niyetli kişi 3 ncü bir şahıs olarak araye girebilir mi ?
    Çözüm : İki nokta arası (Client-Server) haberleşme şifelenmelidir.

2- Kötü niyetli kişi bir client pc üzerinden sızma yapabilir mi ?
    Çözüm : Client PC ve Client uygulamanın server ile kurduğu bağlantı şekli KESINLIKLE direkt DB erişimi olmamalıdır. Bunun yerine bir aracı servis ile bilgi iletimi ve şifrelenmesi temin edilmelidir. Çünkü client uygulama pek çok kişide bulunabilir hatta açık download edilebilir bile olabilir. Ancak server öyle değildir. Server ve server uygulamaları sadece sizde bulunur ve bunları güvenliğini en üst düzeyde sağlamanız gerekir. Bknz; Online oyunların kullandığı sistemler. Unutmayın server bilgisi, kaynak kodu, kritik şifreleri v.s. sızarsa o sistem artık güvenli bir çözüm olmaktan çıkar.

3- Kötü niyetli kişi server tarafından bir sabotaj gerçekleştirebilir mi ?
    Çözüm : Server erişimi kesinlikle belirli ve güvenilir kişilerde olmalıdır. Server sistemine, bulunduğu odaya, bağlantı hatlarına ve ağına direkt erişim sadece belli üst düzey yetki ile sınırlanmalıdır. Yazılan kod birkaç kişi tarafından görülebiliyor ve müdahale edilebiliyorsa bu kişilere veri taşıma, bilgi sızdırma v.b. bilgi transferi durumlarına karşı gerekli kısıtlama, bilgi ve gerekirse cezai yaptırıma dayalı brifingler veirlerek işin ciddiyeti anlatılmalıdır.

4- Kötü niyetli kişi benim sistemime başka yollarla (yani client v.s. ye dokunmadan) erişebilir mi. ?
    Çözüm: Kullandığınız işletim sistemi ve bileşenlerin zaafiyetleri konusunda gelişmeleri takip edin ve hep güncel kalmalarını sağlayın.

Sen bir programcısın yapabileceklerin hayal gücünle ve bilginle sınırlı. Bak daha açık anlatmaya çalışacağım.
[IMG]http://img163.imageshack.us/img163/2261/12388726.jpg[/img]
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

__TECH__

hocam ilginize ve cvp için cok tesekkür ederim konuyu inanın çok araştırdım ama hiç bir şekilde net bir bilgi ve anlatım yok sadece hangi yollardan yapılabilir nasıl kullanılabilir onlar anlatılmış ama 1 tane bile uygulama bulamadım  amacım hazır kodlar bulup hazır konmak deil sadece genelde kullanılmayan nadir kullanılan bir sey bu ve daha önce hic ugrasmadım , simdi ben delphide çok iyi sayılmam ama bilgim dahilinde masaüstü ticari yazılım benzeri bir yazılım geliştirdim , web sitem üzerinden bu client yazılım direk download edilecek ,isteyen bayim download edicek sitede beklemek uzun zaman harcamak istemeyenler oluyo , ben kullanıcı adı ve şifre göndericem oda kullanmaya başlayacak , delphi ile masaüstü yazılım geliştirip ado connection kullandım ve şu an sorunsuz şekilde yazılım calışıyor tek sorun exe içerine connection stringi gömmüş olmam ve yazılımın tehlikede olması, web services yazmak yada kullanıcının username ve passwordunu dogrulamak konusunda takıldım kaldım , exe içerisinde connection string tutmasam bile user name ve passwordu bi şekilde dogrulamam lazım ve oda bir veri tabanı baglantısı gerektirecek , masa üstü uygulama olarak çalışan bir yazılım serverdeki veri tabanımdan bu kullanıcıyı , herhangi bir veri tabanı baglantısı olmadan ve connection string olmadan nasıl dogrulayacak onu anlamadım bir şekilde baglantı lazım deilmi ?

Burak B

#9
 İyide database in user name ve passwordünü vermiyorsunki. Senin bu riskini ortadan kaldıracak bir çözümdü benim sunduğum. :) Ama sen işi başka yönlere dallandırıyorsun. O zaman kullanıcılarının yetkisi nedir birkere onu belirlemen lazım. Görmek-Değiştirmek v.s. gibi. veri değişimine izin verilen kullanıcı kendi şifresini korumakla yükümlüdür. Yani IP'yi başkası bilese ne olur bilmese ne olur ? Direkt DB bağlantısı yaparsan çok şey olur ama benim anlattığım yöntemde çokta birşey olmaz. En azından o kadar kimse uğraşmaz. Ayrıca kullanıcı adı ve parola herseferinde girilmelidir. Buda önemli. Bu işin basit delphi bilgisiyle (hele hele delphi ile) altından çıkamazsın. Bankalar nasıl yapıyor sende öyle yap en basitinden. :) Server kullanıcı doğrulama SMS i göndersin mesela.

Birde sen takmışsın conneciton stringe ya o kadar şema çizdik. Bir inceler insan :). O connection işini serverda hallediyorsun zaten bak o şemada clientin DB ile tüm ilişkisi kesiliyor. İyi incele. Kullanıcıya giden sadece istenen veri elma, armut, lahana,100,200,1000 ne istemişse o anladın.

Daha ne diyeyim yöntem çok. Olay sende biter. Araştıracaksın. Ben fikir veriyorum.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

__TECH__

hocam semayı inceledim ama anyalamadım sorun orda zaten :)  ve kullanıcı username sifresi her seferinde girilecek , yetki ise her kullanıcı icin aynı , sadece istediği ürünü sececek ve siparişine ekleyecek gecmiş siparişlerini kontrol edebilecek yani kısacası web sitelerinde ki  sepet sistemi gibi , ama sadece istenen veriye ail bilgileri getirmek olmaz cunku kucuk capta bir muhasebe yazılım gibi calısıyo eski siaparişler faturalar odemeler vss , yani cok form var ve veri tabanı internette, benim tek anlamadıgım konu kullanıcı masa ustundeki exeye cift tıkladı kullanıcı adı ve sifresi isteyen saffa acıldı işte bundan sonrası sorun yani o user name ve sifre nerden nasıl dogrulanıcak eger veri tabanı baglantım yoksa ? veri paketi olusturup istenen sorguya cevap geri gondekmek cok uzun ve yavas olacak veri tabanımda 2milyondan fazla kayıtlı ürün var ve bir bayinin her seferinde en az 100 parca sipariş ettiğini düşünün ve  1300 musteri dusunun , gelen veriyi sorgulayıp o deger gore geri xml olusturup okutmak uzun iş aynı anda 100 bayi işlem yaparsa sorun olacak

__TECH__

Alıntı Yapİyide database in user name ve passwordünü vermiyorsunki.
Hocam databasenin ip adresini , user name ve pass vermezsem , client benim servere nasıl baglanıcak ve musterim ürün sorgulayacak ?

t2

Şimdi  picproje.org  foruma giriyorsun. kullanıcı adın ve parolan var.

sorgulama yapıp mesajları arıyor yenimesaj kaydediyorsun bunlar veritabanına kaydoluyor.

veritabanına ait  user name ve pass nedir ? biliyor musun? SQL phpmy admin?  neayak. db username?  biliyor musun?

demek ki gerek yokmuş bunlar sadece adminin bilmesi gereken şeylerir. e ticaret siteleri de böyle çalışır.

http://www.exa.com.tr/

Mesela burada kullanıcı ve bayiler olur hiç biri veritabanı şifresini bilmez  arama yapar sipariş kaydeder.

Burak B

"... a healthy dose of paranoia leads to better systems." Jack Ganssle

iyildirim

Yapılmak istenen işi,  db nin büyüklüğü, kayıt adetleri belirlemez. Gereken güçte sunucular kullanacak, gerektiği kadar band genişliğine sahip olacaksınız.

Arkadaşlar yapılması gerekenleri anlattılar.

Güvenlik aşamasını herşeyi yazıp bitirdikten sonra düşünmeye başladı iseniz, ve güvenlik kısmını da hakkını vererek yapmak istiyorsanız daha yapılacak çok işiniz var. Ve sağlam bir güvenlik istiyorsanız bundan kaçışınızda yok..

Bir kere client'larda, özellikle kontrol edemediğiniz yerlerde bulunan client larda connection string vs. olmamalı..

En tercih edilen durumda yapılacaklar Bytemaster'ın bir önceki mesajında yazdığı gibi olmalı..

Herhangi bir connection string client da olmamalı.. Bunun anlamı client'ın direkt olarak DB ye bağlanamasıdır.. Arada bir katman daha olmalı..
Yani client, client ile db arasında bir servis ve db.. Buna da genel anlamıyla three tier programlama deniyor.

Client da , müşterinin bildiği şifreler gerçek DB loginleri, şifreleri değildir.

Client tarafında örneğin stok kartı okuma işini yapacaksınız. sql cümlesinini çalıştırıp sonucunu db table, recorset vs. bir şekilde alıyosunuz. İşin bu kısmı sunucu tarafındaki bir serviste çalışmalı. servis db 'ye nasıl bağlanacağını vs.yi bilmeli. Servis bir recordset, collection vs. oluşturup bunu client'a yollamalı..

Şöyle düşünün, şu anda client verilerin olduğu depoya girip istediği raftan istediğini alıp, istediğini bir rafa koyabiliyor. Bunun yerine deponun kapısına bir güvenlik elemanı koyuyoruz. Eleman depoya kimseyi sokmuyor. Biri bir şey istediği zaman kimin istediğini sorguluyor, sonra istenen şeyi rafdan alıp kapıda ki müşteriye veriyor. Veya müşterinin verdiğini içeride bir rafa yerleştiyor. Kural dışı bir istek gelirse de reddediyor.

Bunu sağlamak için çok çeşitli yöntemler var. Süreklide geliiyorlar. Web servisi yazma gibi konulara göz atmanızda fayda var.

Şu saatden sonra bu kadar kod değişikliği yapmak istemiyorum derseniz de, yapılabilecekler belli.
Connection string'i açıkta tutmayıp şifreleyeceksiniz. Veya generic hiç bir hakkı olmayan bir login le kullanıcı IP vs. doğrulayıp anlık bir login oluşturup, bunu hakları belirlenmiş bir role' takıp, adını , şifresini client' a mümkünse bir SSL, VPN gibi bir tünelden iletip bunu kullanacaksınız. 

Web servisi yazma yerine SQL sunucu üzerinde en azından update, delete işlemleri için store procudure kullanacaksınız, direkt update, delete gibi hakları vermeyeceksiniz.

Bağlantılar vpn kullanacaksınız, mümkün olursa sisteme girmek için sabit IP talep edeceksiniz, IP filtrelemesi yapacaksınız.. VPN olmasa da bir SSL bağlantısı oluşturup bunun üzerinden çalışacaksınız ...