Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 3.33/5 - 3 oy
  • 1
  • 2
  • 3
  • 4
  • 5
TServerSocket ve TClientSocket güvenlik için fikirlerinizi bekliyorum.
#1
Selamın aleyküm delphi severler benim programım'da TServerSocket ve TClientSocket kullanıyorum ben işlem şöyle.

TServerSocket -> VPS'de Server.exe adlı program hep açık kalıyor.

TClientSocket -> Programı açanlar buraya bağlanıyor onay alıyor ve öyle kullanıyor.

Şimdi burada benim sorunum şu ben Onaylama için şifre gönderiyordum gelen şifre doğru ise onaylıyordum. Ama bir arkadaş wiresharktan port paketlerini inceleyip şifreyi alıp kendisi onaylama gönderiyor.

Bunun için benim düşüncem anlık şifre kontrolü yapmak yani bir şifre 1'defa kullanılacak o yüzden ben zaman kontrolü düşündüm ama şöyle bir olay var kişinin bilgisayarının "Tarih-Ay-Gün Saat-Dakika" farklı ise problem olur bu yüzden ya zaman kontrolü kullanacağım ve zaman kontrolü kullanırken şöyle birşey yapmam gerekiyor gelen zaman 5 dakika içindeyse onayla diye kontrol etmem gerekiyor, çünkü makina ile programı açan kişinin zamanları tutmayabilir işimizi garantiye almak için öyle yapmak lazım.

Benim sizden ricam bana bir fikir verebilir misiniz nasıl bir çözüm üretmeliyim yardımcı olursanız sevinirim, teşekkürler.
Cevapla
#2
Öncelikle; mesajlarını -en azından şifre vs. güvenlik gerekli olan- mesajları şifreleme(encryption) işlemi yapmadan göndermemenizi tavsiye ederim. (Her iki ucun bildiği bir şifreleme algoritması). SSL/TLS vs.nin çıkış sebebi budur zaten...
Bence; server'a bir client bağlandığında o client'e bir Session ID tanımlayın. Yani her bağlantı için tekil bir numara, strings vs. Server ilk bağlantıda bu Sessin ID'yi client'e göndersin. Client, login mesajında (isterseniz diğer tüm mesajlarda) bu Session ID'yi mesajın içerisinde server'a göndermeli. Server istemciden mesaj aldığında, mesaj içindeki Sessin IDnin doğru olup olmadığını kontrol etsin.
There's no place like 127.0.0.1
WWW
Cevapla
#3
Merhabalar,


Eski bir konu fakat az önce kafamda bir ampül yandı  Idea Bu fikrin sağlıklı olup olmayacağını da sizlere sormak isterim, yorumlarınızı bekliyorum. Başlayalım;



Öncellikle TServerSocket ve TClientSocket zaten hazırda mevcut. İkili iletişimde iletilen paketleri şifreleyerek Client bölümüne şifresiz şekliden sadece yazdırma işlemini yaparsak ve gönderme işlemini ise Server'a sadece girdi olarak alıp, SendText komutunu gönderirken en basitinden Base64 ile şifrelersek aslında işi halledebiliriz.

"Karışık oldu ama kodlar ile anlatırsam daha kendimi açıklayabileceğim kanaatindeyim"

uses
..
idGlobal, IdCoderMIME;


Eklememiz gereken indy kütüphaneleri



Function SifrelemeYap(const Veri:String): String;
var
 base64: TIdEncoderMIME;
begin
 base64 := TIdEncoderMIME.Create;
 try
   Result := base64.EncodeString(Veri, IndyTextEncoding_UTF8 )
 finally
   FreeAndNil(base64);
 end;
end;


Yukarıda oluşturduğumuz kod string değerlerimizi base64 şekline çevirecek;



function SifrelemeyiCoz(const Veri:String): String;

var
 base64: TIdDecoderMIME;
begin
 base64 := TIdDecoderMIME.Create;
 try
   Result := base64.DecodeString(Veri, IndyTextEncoding_UTF8)
 finally
   FreeAndNil(base64);
 end;
end;



  Yukarıda oluşturduğumuz kod base64 verilerimizi string değere çevirecek;


Şimdi gelelim normal bir string değer gönderirken yapmamız gerek küçük bir şifreleme işlemine;



  ServerSocket ile veri gönderimi  yaparken;



ServerSocket1.Socket.SendText(SifrelemeYap(Verimiz));


  ClientSocket ile veri gönderimi aynı şekilde, ben direkt Client uygulamasına veri nasıl alacağımızı göstereceğim;


Memo1.Lines.Add(SifrelemeyiCoz(Socket.ReceiveText));


Bu aşamaları gerçekleştirdiğimizde paketler benim tabirim ile "havada cirit atarken" şifrelemeyi gerçekleştirebildiğimizi düşünüyorum.



Şimdi sizlere birkaç sorum var;

1) Bu yol sizce ne kadar güvenilir?
2) Bu yol ile gerçekten önlem alma durumumuz mevcut mu?
3) Düşünce "Başarılı m?", "Başarısız mı?"


Soruları cevaplamadan önce;

Base64 örnek olarak verilmiştir, çözülmesi daha zor olan şifreleme yöntemi kullanılması sağlanabilir;

* Sadece string tipli veri gönderim üzerinden(chat mantığı) örnek verdim, diğer düzeylerde kullanılabilir düşüncesindeyim;

* Bu yazıyı soru ile ilişkilendirmek biraz farklı gelebilir, konu yakınlığı olduğu için ek konu açmak istemeden buraya yazdım.



Kullanılan bazı kaynaklar;

 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
 Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol


Teşekkürler...


Efsane resim yeteneğim ile anlatmaya çalışırsam;  Big Grin

8NaOy1.png



Saygılarımla,
İyi çalışmalar.
Eski dos'tan windows olmaz.
Cevapla
#4
Selam,
Normalde zaten yapılması gereken işlem budur hocam, sizin tabirinizle "veriler havada cirit atarken" başına ne geleceği meçhuldur,
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol bu linkte bahsettiğim yapıda aynı olayı kullanıcaz mecburen.
Kısaca;
(Şimdilik) mecburen bu yol en güvenli yol.
Bir çok atağa karşı bu yolla önlem alınmış oluyor.
Testlerde oldukça başarılı görünüyor.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  tclientsocket ve tserversocket komponenti yardım eskalibur_ 1 84 01-03-2018, Saat: 18:04
Son Yorum: canbir
  Youtube için kesin çözüm nedir Lord_Ares 20 634 24-02-2018, Saat: 08:47
Son Yorum: Lord_Ares
Information Delphi Mail Gönderme İçin Alternatif hyperxman 4 741 27-12-2017, Saat: 21:14
Son Yorum: hyperxman
Question Uzak Bir Bilgisayar İçin Port Ekleme? hyperxman 21 1.019 22-11-2017, Saat: 00:03
Son Yorum: nguzeller
  Program menü formu için dashboard çalışması Abdullah ILGAZ 4 320 06-10-2017, Saat: 23:05
Son Yorum: pro_imaj



Konuyu Okuyanlar: 1 Ziyaretçi