Python ile kullanıcı doğrulaması ve aktivasyon keyi

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Herkese iyi forumlar.

Python dilinde bir yazılım geliştirdim ve bu yazılıma eklemek istediğim bir özellik var. Kullanıcı doğrulaması ve aktivasyon anahtarı özellikleri. Tasvir etmeye çalışayım;

100’er adet BasicID, BasicKEY, GoldID, GoldKEY, PremiumID, PremiumKEY üretip veritabanında saklıyorum. Basit bir örnek;


Basıc DB

BasicUser Table

BasicID-------------BasicKEY

123456-------------A1B2C3D4E5F6G7H8

654321-------------A8B2C5D4E0F4G7H9

. . .

. . .

. . .




Şu an aklımdaki işlemler şu şekilde; kullanıcı benim verdiğim ID ve KEY ile uygulamaya giriş yapacak ve örneğin bu key 10 gün geçerli olacak.

Problem 1: Süre dolduğunda uygulama çalışmayı nasıl durduracak ve kullanıcı anahtarı yenilemek istediğinde bunu BasicID sabit kalmak şartıyla nasıl yenileyeceğim?


Aklımdaki çözüm yöntemi şu şekilde;

Aktivasyonun yapıldığı gün tarih bilgisini sistemden değil uzak sunucudan alıp ilgili kullanıcının tablosuna kayıt olarak ekleyeyim. Ardından uygulama her çalıştığında bu kaydı veritabanından çeksin ve yine sunucudan aldığı o günün tarihi ile karşılaştırsın. Eğer fark örnekte olduğu gibi 10 güne eşit ise çalışmayı sonlandırsın.


BasicID-------------BasicKEY-----------------------Aktivasyon

123456-------------A1B2C3D4E5F6G7H8---------01.01.2020

654321-------------A8B2C5D4E0F4G7H9---------12.02.2020

. . .

. . .

. . .

Problem 2: Uygulama içinde veritabanı bağlantısı için okuma ve yazma yetkileri olacak. Bu durum uygulama için güvenlik riski teşkil eder mi?


Konu kabaca bu şekilde. Bu konuda Türkçe kaynak basit bir iki örnek dışında neredeyse yok. Gördüğünüz hatalarım konusunda kıymetli uyarılarınızı veya bu aktivasyon konusunu teorik olarak anlatmanızı rica ediyorum. Kod yazmasanız bile yazılımda yapılması gereken adımları anlatmanız çok makbule geçer. Ancak anlaşılırlık ve diğer arkadaşlara da faydalı olması açısından kod örnekleri ile de desteklemek isterseniz çok faydalı olur.

Teşekkürler, saygılar.
 

defacerGLD

Profesör
Katılım
16 Ocak 2020
Mesajlar
3,328
Reaksiyon puanı
3,067
Puanları
293
Herkese iyi forumlar.

Python dilinde bir yazılım geliştirdim ve bu yazılıma eklemek istediğim bir özellik var. Kullanıcı doğrulaması ve aktivasyon anahtarı özellikleri. Tasvir etmeye çalışayım;

100’er adet BasicID, BasicKEY, GoldID, GoldKEY, PremiumID, PremiumKEY üretip veritabanında saklıyorum. Basit bir örnek;


Basıc DB

BasicUser Table

BasicID-------------BasicKEY

123456-------------A1B2C3D4E5F6G7H8

654321-------------A8B2C5D4E0F4G7H9

. . .

. . .

. . .




Şu an aklımdaki işlemler şu şekilde; kullanıcı benim verdiğim ID ve KEY ile uygulamaya giriş yapacak ve örneğin bu key 10 gün geçerli olacak.

Problem 1: Süre dolduğunda uygulama çalışmayı nasıl durduracak ve kullanıcı anahtarı yenilemek istediğinde bunu BasicID sabit kalmak şartıyla nasıl yenileyeceğim?


Aklımdaki çözüm yöntemi şu şekilde;

Aktivasyonun yapıldığı gün tarih bilgisini sistemden değil uzak sunucudan alıp ilgili kullanıcının tablosuna kayıt olarak ekleyeyim. Ardından uygulama her çalıştığında bu kaydı veritabanından çeksin ve yine sunucudan aldığı o günün tarihi ile karşılaştırsın. Eğer fark örnekte olduğu gibi 10 güne eşit ise çalışmayı sonlandırsın.


BasicID-------------BasicKEY-----------------------Aktivasyon

123456-------------A1B2C3D4E5F6G7H8---------01.01.2020

654321-------------A8B2C5D4E0F4G7H9---------12.02.2020

. . .

. . .

. . .

Problem 2: Uygulama içinde veritabanı bağlantısı için okuma ve yazma yetkileri olacak. Bu durum uygulama için güvenlik riski teşkil eder mi?


Konu kabaca bu şekilde. Bu konuda Türkçe kaynak basit bir iki örnek dışında neredeyse yok. Gördüğünüz hatalarım konusunda kıymetli uyarılarınızı veya bu aktivasyon konusunu teorik olarak anlatmanızı rica ediyorum. Kod yazmasanız bile yazılımda yapılması gereken adımları anlatmanız çok makbule geçer. Ancak anlaşılırlık ve diğer arkadaşlara da faydalı olması açısından kod örnekleri ile de desteklemek isterseniz çok faydalı olur.

Teşekkürler, saygılar.
Zaman eklersin sonra PC bin zamanını bulur karşılaştırır
Zamanı datetime kütüphanesiyle yaparsın araştır onu
 

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Zaman eklersin sonra PC bin zamanını bulur karşılaştırır
Zamanı datetime kütüphanesiyle yaparsın araştır onu
Yanıt için teşekkürler. Zaman sorununu söylediğin gibi çözebilirim... Online bir veritabanı olmadan keyleri uygulama içinde tutsam ve o şekilde doğrulama ve aktivasyon yapsam nasıl olur?
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
358
Sistem zamanına göre karşılaştırma yaparsanız sistem zamanını geri çeken kullanıcı ömür boyu uygulamanızı kullanır.

Aktivasyon keylerinin süresi için düşündüğünüz çözüm profesyonel uygulamalarda kullanılıyor. Keyleri, uzak sunucuda değil yerelde tutarsanız, yeni key ekleme durumlarında uygulamaya güncelleme atmanız gerekir. Yerel veritabanında tutulacak bir keye ulaşmak zor olmaz. Farklı bir dosya tipinde tutarsanız farklı kütüphanelere başvurmak zorunda kalırsınız. Dolasıyla uzak sunucu en uygunu.

Süre dolunca uygulamanın kapatılması için tüm fonksiyonların deaktif olduğu bir metod yazın. Python timer ile saat başı veritabanına gidip key tarihini karşılaştırın. Tarihi if sorgusu ile kontrol ettirin. Dönen cevap false ise ilgili metodu çalıştırın.
 

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Sistem zamanına göre karşılaştırma yaparsanız sistem zamanını geri çeken kullanıcı ömür boyu uygulamanızı kullanır.

Aktivasyon keylerinin süresi için düşündüğünüz çözüm profesyonel uygulamalarda kullanılıyor. Keyleri, uzak sunucuda değil yerelde tutarsanız, yeni key ekleme durumlarında uygulamaya güncelleme atmanız gerekir. Yerel veritabanında tutulacak bir keye ulaşmak zor olmaz. Farklı bir dosya tipinde tutarsanız farklı kütüphanelere başvurmak zorunda kalırsınız. Dolasıyla uzak sunucu en uygunu.

Süre dolunca uygulamanın kapatılması için tüm fonksiyonların deaktif olduğu bir metod yazın. Python timer ile saat başı veritabanına gidip key tarihini karşılaştırın. Tarihi if sorgusu ile kontrol ettirin. Dönen cevap false ise ilgili metodu çalıştırın.
Çok aydınlatıcı bir yaklaşım teşekkür ederim... Uzak sunucu için öneriniz var mı? Bu konuda reklam dışında Türkçe kaynak bulmak zor. Ve kullanacağım veritabanı kaç kullanıcının erişimine izin verir? Örneğin 1000 kullanıcı giriş yapmaya çalıştığında bir sınırlama söz konusu olur mu?
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
358
Çok aydınlatıcı bir yaklaşım teşekkür ederim... Uzak sunucu için öneriniz var mı? Bu konuda reklam dışında Türkçe kaynak bulmak zor. Ve kullanacağım veritabanı kaç kullanıcının erişimine izin verir? Örneğin 1000 kullanıcı giriş yapmaya çalıştığında bir sınırlama söz konusu olur mu?
Bütçeniz yeterli ise azure üzerinde tutmanızı tavsiye ederim. Hızlı ve güvenlidir. Bunun dışında benim kullandığım yok açıkcası. Satın almadan önce, sunucunun anlık kaç kişiye cevap verebileceğini araştırmak lazım. Cevap verebiliyorsa barındırdığı veritabanının üzerinde yapılabilecek işlemlerde problem olmaz.
Ortalama aylık kirası 90-100 lira olan bir sunucu rahat 1000 kişiye anlık cevap verebiliyor. Ben online kuruyordum bir dönem durumlar bu şekildeydi. Şimdi fiyatlar arttı mı bilemiyorum.
 

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Bütçeniz yeterli ise azure üzerinde tutmanızı tavsiye ederim. Hızlı ve güvenlidir. Bunun dışında benim kullandığım yok açıkcası. Satın almadan önce, sunucunun anlık kaç kişiye cevap verebileceğini araştırmak lazım. Cevap verebiliyorsa barındırdığı veritabanının üzerinde yapılabilecek işlemlerde problem olmaz.
Ortalama aylık kirası 90-100 lira olan bir sunucu rahat 1000 kişiye anlık cevap verebiliyor. Ben online kuruyordum bir dönem durumlar bu şekildeydi. Şimdi fiyatlar arttı mı bilemiyorum.
Şimdi biraz araştırma yaptım PostgreSql'in açık kaynak ve ücretsiz. Ancak bu iş için kullanılabilir mi anlamadım tam olarak. Lisans ücreti yok ancak sunucu ücretli mi bilmiyorum araştırıyorum. Sizin PosgreSql ve online depolama alanı hakkında bilginiz var mı?
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
358
Şimdi biraz araştırma yaptım PostgreSql'in açık kaynak ve ücretsiz. Ancak bu iş için kullanılabilir mi anlamadım tam olarak. Lisans ücreti yok ancak sunucu ücretli mi bilmiyorum araştırıyorum. Sizin PosgreSql ve online depolama alanı hakkında bilginiz var mı?
Ücretsiz sunucularada kurabilirsiniz ama sunucunun cevap vermesi geç olabiliyor ücretsizlerde. Sunucuyu kiraladığınızda yada satın aldığınızda size zaten cpanel sunuluyor o panel üzerinden veritabanını kuruyorsunuz hiç kod yazmadan. Sonra o veritabanına nasıl ulaşabileceğinize yönelik bağlantı stringi veriliyor. Bunun dışında uygulamanızın içerisinde dönen kod hiç önemli değil. İsterseniz ms sql isterseniz post ile bağlantı kurun.
Mesaj otomatik birleştirildi:

Mesela azure üzerinde şöyle
Mesaj otomatik birleştirildi:

Aylık şu kadara geliyor kiralaması. Alternatif bakılabilir tabi ki.

1592256732473.png

Mesaj otomatik birleştirildi:

Bunların veri merkezleri tr de yok o yüzden biraz pahalı. Ama çok hızlıdır. Ücretsiz arıyorsanız epizy vardı ona bakabilirsiniz.
 

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Ücretsiz sunucularada kurabilirsiniz ama sunucunun cevap vermesi geç olabiliyor ücretsizlerde. Sunucuyu kiraladığınızda yada satın aldığınızda size zaten cpanel sunuluyor o panel üzerinden veritabanını kuruyorsunuz hiç kod yazmadan. Sonra o veritabanına nasıl ulaşabileceğinize yönelik bağlantı stringi veriliyor. Bunun dışında uygulamanızın içerisinde dönen kod hiç önemli değil. İsterseniz ms sql isterseniz post ile bağlantı kurun.
Mesaj otomatik birleştirildi:

Mesela azure üzerinde şöyle
Mesaj otomatik birleştirildi:

Aylık şu kadara geliyor kiralaması. Alternatif bakılabilir tabi ki.

Ekli dosyayı görüntüle 104623
Mesaj otomatik birleştirildi:

Bunların veri merkezleri tr de yok o yüzden biraz pahalı. Ama çok hızlıdır. Ücretsiz arıyorsanız epizy vardı ona bakabilirsiniz.
Şimdi kavradım konuyu. PostgreSql "yazılımı" ücretsiz ancak bu yazılımı çalıştıracağım server için (hız ve güvenlik istiyorsam) herhangi bir firmaya server ücreti ödemem gerekiyor. Malum öğrencilik durumu şimdilik buna bütçe ayırmam zor. Ancak Epizy'i araştıracağım.
Kullanıcının girdiği bilgilerini basitçe şifreleyip bir txt dosyasında tutuyorum şuan. Şöyle bir algoritma yazdım; Örneğin kullanıcıdan "Ahmet" şeklinde giriş aldım, bir for döngüsü, önceden oluşturulmuş ve içinde 1000 karakter olan (a-Z,1-9 ve özel karakterlerden rastgele oluşturulmuş) txt dosyasına bu "Ahmet" i her harfini belli bir kurala göre gidip yazıyor. Mesela ilk harf 180. indekse sonrakiler verdiğim sistematiğe göre sıralı ekleniyor. Daha sonra bunu tersten çalıştırıp okutuyorum. Güvenlik bu noktada çok önemli değil. Keyleri de bu şekilde saklayabilirim ancak bir keyi sunucu olmadan kullanımda olup olmadığını sanırım anlayamam. Örneğin bir key ile her kullanıcı uygulamayı aktif edebilir duruma gelir bu şekilde. Bu durumu sunucu olmadan aşma ihtimalim var mıdır sizce?
Mesaj otomatik birleştirildi:

Aslında online bir çözüm olabilir. Nosql de kullanabilirim sorgu yazabilirim. Hatta MongoDB hesabım var ücretsiz 512 MB verdi. 512MB bana 3-5 bin key için yeter de artar. Ancak bağlantı scriptini verirken IP adresi istiyor. Mevcut IP doğal olarak modem kapanıp açılınca gidiyor ve MongoDB bağlantısı kapanıyor. Bunu çok kullanıcının erişimine sunma şansımız olabilir mi?
 
Son düzenleme:

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
358
Şimdi kavradım konuyu. PostgreSql "yazılımı" ücretsiz ancak bu yazılımı çalıştıracağım server için (hız ve güvenlik istiyorsam) herhangi bir firmaya server ücreti ödemem gerekiyor. Malum öğrencilik durumu şimdilik buna bütçe ayırmam zor. Ancak Epizy'i araştıracağım.
Kullanıcının girdiği bilgilerini basitçe şifreleyip bir txt dosyasında tutuyorum şuan. Şöyle bir algoritma yazdım; Örneğin kullanıcıdan "Ahmet" şeklinde giriş aldım, bir for döngüsü, önceden oluşturulmuş ve içinde 1000 karakter olan (a-Z,1-9 ve özel karakterlerden rastgele oluşturulmuş) txt dosyasına bu "Ahmet" i her harfini belli bir kurala göre gidip yazıyor. Mesela ilk harf 180. indekse sonrakiler verdiğim sistematiğe göre sıralı ekleniyor. Daha sonra bunu tersten çalıştırıp okutuyorum. Güvenlik bu noktada çok önemli değil. Keyleri de bu şekilde saklayabilirim ancak bir keyi sunucu olmadan kullanımda olup olmadığını sanırım anlayamam. Örneğin bir key ile her kullanıcı uygulamayı aktif edebilir duruma gelir bu şekilde. Bu durumu sunucu olmadan aşma ihtimalim var mıdır sizce?
Evet malesef. Bir şekilde uygulama ile iletişimde olmanız gerekiyor.
Mevcut IP doğal olarak modem kapanıp açılınca gidiyor ve MongoDB bağlantısı kapanıyor. Bunu çok kullanıcının erişimine sunma şansımız olabilir mi?
Dinamik ip sahibi olduğunuz için her değişimde uygulamanında o ipye gitmesi lazım bu mümkün değil. Türk telekomdan statik ip talebinde bulunabilirsiniz ama bu pahalıdır. En önemlisi anladığım kadarıyla siz bir nevi sisteminizi sunucu haline getireceksiniz. Bilgisayarınız o kadar kullanıcıya cevap verebilecek güçte mi? Bunun dışında 7'24 açık olması gerekiyor.
 

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Evet malesef. Bir şekilde uygulama ile iletişimde olmanız gerekiyor.

Dinamik ip sahibi olduğunuz için her değişimde uygulamanında o ipye gitmesi lazım bu mümkün değil. Türk telekomdan statik ip talebinde bulunabilirsiniz ama bu pahalıdır. En önemlisi anladığım kadarıyla siz bir nevi sisteminizi sunucu haline getireceksiniz. Bilgisayarınız o kadar kullanıcıya cevap verebilecek güçte mi? Bunun dışında 7'24 açık olması gerekiyor.
Bilgisayarım o güçte değil. Keylerin doğrulanma işlemini MongoDB sunucusuna bağlanarak yapacağım. Benim hatam doğru açıklayamadım... MongoDB bana ücretsiz 512MB bulut depolama alanı veriyor yani sistemi online kullandırıyor. Bu 512 MB benim için yeterli ancak;
Yazılımın içine scrip yazıyorum ya db ile bağlantı için (bu scripti mongo veriyor) o scripti vermek için ise IP adresi istiyor. Bu durumda ben db ile bağlantı kuracak kişilerden IP adresi alamam doğal olarak. Mevcut MongoDB' hesabıma her yerden bağlanılması için bir şeyler yapma şansım olabilir mi onu sormak istemiştim.
 

Samet UCA

Profesör
Katılım
3 Ağustos 2012
Mesajlar
3,288
Reaksiyon puanı
2,930
Puanları
358
Bilgisayarım o güçte değil. Keylerin doğrulanma işlemini MongoDB sunucusuna bağlanarak yapacağım. Benim hatam doğru açıklayamadım... MongoDB bana ücretsiz 512MB bulut depolama alanı veriyor yani sistemi online kullandırıyor. Bu 512 MB benim için yeterli ancak;
Yazılımın içine scrip yazıyorum ya db ile bağlantı için (bu scripti mongo veriyor) o scripti vermek için ise IP adresi istiyor. Bu durumda ben db ile bağlantı kuracak kişilerden IP adresi alamam doğal olarak. Mevcut MongoDB' hesabıma her yerden bağlanılması için bir şeyler yapma şansım olabilir mi onu sormak istemiştim.
Burada kullanıcıdan ip talep etmesi çok tuhaf. Benim çalıştığım sistemlerde sunucunun 1 ip adresi olur uygulama direkt oraya gider. Her bağlanan kişi için özel script üretmek zor olur. Mongo yerine farklı bir yapı kullanabilirsiniz.
 

janissery

Öğrenci
Katılım
4 Nisan 2018
Mesajlar
50
Reaksiyon puanı
18
Puanları
8
Yaş
31
Burada kullanıcıdan ip talep etmesi çok tuhaf. Benim çalıştığım sistemlerde sunucunun 1 ip adresi olur uygulama direkt oraya gider. Her bağlanan kişi için özel script üretmek zor olur. Mongo yerine farklı bir yapı kullanabilirsiniz.
Aynen... Başata epizy olmak üzere konuyu farklı yerlerde biraz daha araştırayım. Yanıtlarız ve vakit ayırdığınız için çok teşekkürler.
 
Katılım
6 Eylül 2018
Mesajlar
2,095
Reaksiyon puanı
3,027
Puanları
293
Bence keyleri uygulamaya dahil etme çünkü kırılması kolaylaşır. Online aktivasyon olsun ama interneti olmayan internet gelene kadar kullanabilsin. Bazı programlarda bu mantığı görüyordum ben.
 
Üst