Jump to content

Bir fikrinizi alabilir miyim?


Önerilen İletiler

Herkese merhaba 😊

Ne yapmak istediğimi kısaca özetliyorum;

Uzun zamandır AMS ile uygulamalar geliştiriyorum.

Geliştirmekte olduğum uygulamalar, dışarıyla (web tabanlı MYSQL ve FTP) ve kendi geliştirdiğim diğer uygulamalarla iletişim halinde çalışıyor.

Bu bağlantıları kurmak için kullandığım kullanıcı adı ve parola gibi önemli bilgileri içeren girdileri AMS'deki Global Functions sayfasında saklıyordum.

Ama maalesef elde ettiğim ve sonra deneyimlediğim bilgilere göre, gizlemeye çalıştığım önemli bilgilere çok basit bir yolla saniyeler içerisinde ulaşılıyor. 😞

Uygulamanın tüm kodları; SourceFolder.."\\AutoPlay" dizinindeki "app-name.CDD" adlı sıkıştırılmış dosyanın içerisindeki "_proj.DAT" adlı dosyanın içerisinde yer alıyor. Ve inanın; bu dosyaların içerisindeki kodlara çok basit bir yöntemle saniyeler içerisinde ulaşılabiliniyor.

 

Şimdi sormak istediğim şey şu;

Önemli bilgiler içeren girdilerin bir eklentide saklanarak başkaları tarafından okunmasını hatta değiştirilmesini engelleyebilir miyiz? Örnek vermek gerekirse; Reteset tarafından sunulan AMSPluginMaker ile LMD formatında bir plugin geliştirsek ve bu plugin içerisinde önemli kimlik bilgilerini saklasak, bu bizim için kusursuz bir çözüm olabilir mi? Bu yöntemin ne gibi bir zaafı var? Ve zaten biliyoruz ki; LMD dosyası içerisinde LUA ve AMSPlugin SDK kütüphanelerini de barındıran bir dinamik bağlantı kütüphanesi (DLL) dir. Bu dosyaya ne gibi müdahaleler yapılır?

Yani ben şunu kendimce anladım ki; Eğer önemli kimlik bilgileri içeren değişkenleriniz varsa bu değişkenleri uygulamanın içerisinde barındırmak yarın çok kötü sonuçlar elde etmenize sebep olabilir. Örneğin; uzak sunucunuzun MYSQL ve FTP gibi kimlik bilgilerini uygulamanın içerisinde kod satırında paylaşmanız durumunda diğer insanlar tarafından bu bilgiler ile erişilip uygulamaya ve bilhassa sunucuya hükmetmelerini sağlamış olursunuz.

Veya bunların dışında önemli bilgileri saklamam için bana daha akıllıca ve kusursuz güvenilir bir fikir verebilir misiniz? Bu konuda siz nasıl bir yol izliyorsunuz?

Bana bu konuda yardım ederseniz sevinirim.

Yorum bağlantısı
Sitelerde Paylaş

  • Yönetici

Merhaba Önemli Kodlarınızı Veritabanı'nı Şifreleyerek saklayabilirsiniz. Ayrıca Sızın Dediğiniz Yöntem de Eklenti Hazırlayabilirim ilerleyen Zamanlar da. iyi Forumlar 🙂

Yorum bağlantısı
Sitelerde Paylaş

Merhaba, Öncelikle ilgi gösterip gönderimi yanıtladığınız için teşekkür ederim. 😊

Soruma kesin sonuç elde edebileceğimiz ayrıntılı bir cevap arıyorum aslında.

Falcon, 7 saat önce yazdı:

Veritabanı'nı Şifreleyerek

Veritabanı'nı şifrelemekteki kastınız nedir acaba?

Eyer uzak sunucumdaki tablo içeriğini şifrelemek ise düşünceniz; oraya gelmeden önce, veritabanı bağlantısı için kullandığımız kimlik bilgilerini gizlemek daha hayati bir çözüm yolu olacağına inanıyorum.

Falcon, 7 saat önce yazdı:

Ayrıca Sızın Dediğiniz Yöntem de Eklenti Hazırlayabilirim

Eklenti yapımı konusunda yeterli bilgiye ve yazılıma sahibim. Fakat bu konuda ne gibi bir mantıksal yol izleyeceğim konusunda kafam hayli karışık doğrusu.

Çünkü yaklaşık 15 gündür denemelerim sonucunda el ile tutulur kesin ve güvenilir bir sonuç elde edemedim.

Elde ettiğim sonuçlar Profesyonel altı ortalama bir yazılım için yeterince yüksek başarım vadediyor. Fakat tersine mühendislik konusunda yeterince bilgiye sahip olduğum için, onca emek verdiğim yazılımı birkaç testten sonra kırmayı başarıyorum.

Son zamanlarda yaptığım yazılımlarda Crushing tests uygulayıp kendi yazılımlarıma bir nevi sağlamlık testleri düzenliyorum. Başarısız olan sonuçlarda biraz hayal kırıklığına uğrasam da 100% başarım elde edene kadar sürekli ona odaklanıp çözüm yolları arıyorum.

İşte şuan ki sorunum da bu. 

mburaksaglik, 16 saat önce yazdı:

dışarıyla (web tabanlı MYSQL ve FTP) ve kendi geliştirdiğim diğer uygulamalarla iletişim halinde

olmayı güvenilir bir şekilde yapmak istiyorum.

Gizlemek istediğim kaynak kodumu 

mburaksaglik, 16 saat önce yazdı:

AMSPluginMaker ile LMD formatında bir plugin

içerisinde paketleyip,

package.loadlib

ile çağırmam halinde başarılı bir sonuç elde ediyorum. Fakat aynı eklentiyi başka bir programla çağırdığımızda tüm kodlar Global Functions'a gönderildiği için

_G

ile çağırıp paket içeriğindeki özel kodlara erişim sağlanabiliyor.

Yani anladığım kadarıyla bu da aradığımız çözüm yolu olmayabilir malesef. 😒

Deneme yapmaya devam edeceğim. Kesin bir yol bulursam burada ayrıntılı bir şekilde anlatmak isterim.

Eyer benden önce siz bir çözüm yolu bulduysanız veya şuan bir fikriniz varsa hiç çekinmeden beni ve tüm formu aydınlatabilirsiniz.

Cevaplarınızı şimdiden merak ediyorum.

Ayrıca konu sizin de merakınızı cezbettiyse yukardan konuyu takip etmeyi unutmayın. 😇

Yorum bağlantısı
Sitelerde Paylaş

  • Yönetici

Veritabanndan kastım şu  veritabanınıza  sifre koyarsınız   uzak sunucudan veri cekmeye calısıyorsanız md5 sifremeleme veya sha sifrleme kullanabilirsiniz. Bir de bu yöntemi deneyebilirsiniz kodlarınızı base64 ile sifreleyip veritabanına kaydetip cekebilirsiniz. 

😊

Başka yöntemler düşüneceğim ams de fazlasyla acık var zaten. 

Yorum bağlantısı
Sitelerde Paylaş

Sanırım şu şekilde bir anlatım yaparsam, ancak o zaman tam olarak yapmak istediğim şeyi kafanızda canlandırabilirsiniz diye düşünüyorum;

Ama konuya girmeden önce şu yorumunuza cevap vermek istiyorum; 

Falcon, 2 saat önce yazdı:

ams de fazlasyla acık var

Elbette ki, bir çok IDE'de olduğu gibi 2019 yılında tamamen güncelleme desteğinin sona erdiği AMS'de de birçok hata ve yetersiz kaynak bulunduğunun farkındayım. Eksiği ve açığı var diye platform değiştirmek inanın zaman kaybı bana kalırsa. O yüzden elimizden geldiğince o eksikliklerini gidermeye ve daha aktif kullanmaya çalışıyoruz. Bazıları için tarihe karışıp mezara gömüldüğü iddia edilen bu yazılımda sürekli daha fazlasını yapmaya çalışıyorum. Ayrıca saf LUA dilini kullanan daha aktif bir IDE öneriniz varsa lütfen paylaşmaktan çekinmeyin.

Şimdi konumuza dönelim..

İşin özeti : uzak sunucumdaki veritabanıyla veya ftp yoluyla ulaşmaya çalıştığım bir klasör ile bağlantı kurduğum kimlik bilgilerini uygulama içerisinde veya dışarısında bir yerde gizlemek istiyorum.

Örneğin; kimlik bilgilerini içeren bir tablo değişkenimiz olduğunu düşünelim.

app = {}; -- Uygulama ana tablosu
app.mysql = {}; -- MySQL kimlik bilgilerinin tutulduğu tablo
app.mysql.dbname = "uygulama"; -- MySQL veritabanı adı
app.mysql.dbuser = "aliveli"; -- MySQL veritabanı kullanıcı adı
app.mysql.dbpswd = "12345678"; -- MySQL veritabanı kullanıcı şifresi
app.mysql.dbhost = "www.example.com"; -- MySQL veritabanı ana makine adı
app.mysql.dbport = "3306"; -- MySQL veritabanı bağlantı portu

Bu bilgiler vasıtasıyla şu fonksiyonu çalıştırarak veritabanına girdi güncellemesi yapalım;

function app.update.success()
	require("luasql.mysql");
	local env = assert(luasql.mysql());
	local con = env:connect(app.mysql.dbname, app.mysql.dbuser, app.mysql.dbpswd, app.mysql.dbhost, app.mysql.dbport);
	if (con) then
		cur, err = con:execute([[SELECT totalup FROM info WHERE code = "]]..app.code..[[";]]);
		if (err == nil) then
			--local row = cur:fetch({}, "a");
			--local r = 0; for d, e in pairs(row) do r = r + 1; end
			row = cur:fetch();
			if (row == nil) then row = 0; end
			totalup = tonumber(row) + 1;
			sts, err = con:execute([[UPDATE info SET totalup = "]]..totalup..[[" WHERE code = "]]..app.code..[[";]]);
			if (sts > 0) then
				--print("Tablo kayıt işlemi","Güncelleştirme kaydı başarıyla veritabanına eklendi.");
			else
				print("Tablo kayıt hatası","Tablo verisi güncelleştirilemedi.", MB_OK, MB_ICONSTOP);
			end
		else
			print("Veritabanı sorgu hatası","Hata metni: "..tostring(err), MB_OK, MB_ICONSTOP);
		end
	else
		print("Veritabanı bağlantı hatası","Veritabanıyla bağlantı kurulamadı!", MB_OK, MB_ICONSTOP);
	end
end

Bilgiler uyuştuğunda sorunsuz bir şekilde uygulama ile uzak sunucu arasındaki iletişimi başarılı bir şekilde gerçekleştirmiş oluyoruz. Fakat, işte yukarıda paylaştığım "app.mysql" adlı tabloyu ve içeriğini tersine mühendislikle uygulamanın ana dosyalarına erişilse bile bulunamayacak, bulunsa bile okunamayacak şekilde saklamak veya şifrelemek istiyorum.

Yani veritabanındaki tablo içeriğini md5, sha512 v.b. gibi kriptolama yöntemleriyle şifrelemenin bir anlamı yok. Çünkü uygulama içerisindeki kimlik bilgilerini içeren "app.mysql" adlı tabloyu ele geçiren kötü niyetli bir birey veritabanındaki tabloyu olduğu gibi silebilir ve müdahale edebilir.  Biz de bunun önüne geçip, uzak sunucuyla bağlantı kurmamızı sağlayacak olan kimlik bilgilerini içeren "app.mysql" adlı tabloyu bir şekilde koruma altına almamız lazım.

 

Bu sorunu çözmemizde yaratıcı bir fikriniz varsa, lütfen çekinmeden bizimle paylaşmayı ihmal etmeyin.  Her türlü görüş ve yöntemlerinize tüm nezaketimizle cevap vermeye hazır olduğumuzdan emin olabilirsiniz. 😊

Saygılarımla..

Yorum bağlantısı
Sitelerde Paylaş

  • Yönetici

Sizin anlatmış olduğunuz her turlu cozulur benim size  anlatmak istedigim yontem şu , öncelikle " veritabani.db " adinda veritabanmz olsun  bunu navigat programı ile acip sifreleyin , sonra ams programı uzerinden mysql secip veritabanını hostunuza atın  veritabanı bilgilerini  girin mysql olarak  bağlantıyı kurun.  Burada uzak sunucu uzerinde yami hostunuz da ki veritabani.db bağlanms olacaksnz.  Bağlandıktan sonra veritabanınzla islemlerinizi yapabilirsiniz. Ayrıca base64 ile  mysql sifrenizi  sifreyelip cekebilirsiniz.  Sifreli veritabanndan veri alınması basit degildir cozulemez kolayna. Umrarm sorununuz cozulmsdür 😊

 

Yorum bağlantısı
Sitelerde Paylaş

Falcon, 22 saat önce yazdı:

Sizin anlatmış olduğunuz her turlu cozulur benim size  anlatmak istedigim yontem şu , öncelikle " veritabani.db " adinda veritabanmz olsun  bunu navigat programı ile acip sifreleyin , sonra ams programı uzerinden mysql secip veritabanını hostunuza atın  veritabanı bilgilerini  girin mysql olarak  bağlantıyı kurun.  Burada uzak sunucu uzerinde yami hostunuz da ki veritabani.db bağlanms olacaksnz.  Bağlandıktan sonra veritabanınzla islemlerinizi yapabilirsiniz. Ayrıca base64 ile  mysql sifrenizi  sifreyelip cekebilirsiniz.  Sifreli veritabanndan veri alınması basit degildir cozulemez kolayna. Umrarm sorununuz cozulmsdür 😊

 

Pekala aradığım şeyi şu şekilde ifade edeyim;

Navicat veya benzeri diğer veri tabanı oluşturma-düzenleme uygulamalarıyla oluşturmuş olduğum şifreli tabloyu sunucuya yüklediğimi farz edelim. (zaten böyle bir konfigürasyonum halihazırda mevcut)

Uzaktaki bu veri tabanına AMS ile

mburaksaglik, 08.06.2022 - 16:01 yazdı:
app = {}; -- Uygulama ana tablosu
app.mysql = {}; -- MySQL kimlik bilgilerinin tutulduğu tablo
app.mysql.dbname = "uygulama"; -- MySQL veritabanı adı
app.mysql.dbuser = "aliveli"; -- MySQL veritabanı kullanıcı adı
app.mysql.dbpswd = "12345678"; -- MySQL veritabanı kullanıcı şifresi
app.mysql.dbhost = "www.example.com"; -- MySQL veritabanı ana makine adı
app.mysql.dbport = "3306"; -- MySQL veritabanı bağlantı portu

bu bilgileri kullanarak gerekli bilgileri ilgili tablodan AMS ile hazırlamış olduğumuz uygulamaya başarılı bir şekilde çektiğimizi farz edelim.

Zaten buraya kadar olan bütün aksiyonları başarılı bir şekilde yerine getiriyorum.

Fakat işte sorun şurada ortaya çıkıyor; Uygulama içerisinde veri tabanı ile bağlantı için kullandığımız yukarıdaki bilgilere CDD dosyası üzerinden erişilip, ilgili veri tabanına müdahale ediliyor.

Tam olarak istediğim şey ise; veri tabanı ile bağlantı kurmak için kullandığımız kimlik bilgilerini tamamen uygulama dışında bir yerde gizlemek veya çözülemeyecek şekilde şifreleyerek meraklı yaramaz kullanıcıların şakalarına maruz kalmamak istiyorum. Eminim ki, bu konu ile benim gibi AMS veya benzeri grafiksel kullanıcı arayüzü olan yazılım üretme uygulamaları üzerinde yazılımla uğraşıp özel kimlik bilgilerini güvende tutmak isteyen bir çok yazılımcıya yardımcı olacağız.

Yorum bağlantısı
Sitelerde Paylaş

  • Yönetici

Bağlantı kodlarını sql  sifreli veritabanına kaydetin.  Bu veritabanınzda sade uzak sunucuya bağlantı kodları olacak veritabanndan bağlantı kodlarını tetiklemek icin bir fonksiyo yazmanz gerek ben bu istediğinizle alakalı örnek proje forum da paylastım indirin inceleyin mantığı anlarsnz. Kolay gele 😊

Yorum bağlantısı
Sitelerde Paylaş

Falcon, 10 dakika önce yazdı:

Bağlantı kodlarını sql  sifreli veritabanına kaydetin.  Bu veritabanınzda sade uzak sunucuya bağlantı kodları olacak veritabanndan bağlantı kodlarını tetiklemek icin bir fonksiyo yazmanz gerek ben bu istediğinizle alakalı örnek proje forum da paylastım indirin inceleyin mantığı anlarsnz. Kolay gele 😊

Rica etsem inceleyebilmem için konu bağlantısını paylaşır mısınız?

Yorum bağlantısı
Sitelerde Paylaş

  • Yönetici

Burdaki gibi,  geliştirilebilir bir yöntem. 

Yorum bağlantısı
Sitelerde Paylaş

Falcon, 10.06.2022 - 21:20 yazdı:

Burdaki gibi,  geliştirilebilir bir yöntem. 

Teşekkür ederim. İnceleyip size geri dönüş yapacağım. 😊👍

 

Tekrar merhaba,

Konuya yanıt ekleyemediğim için son gönderdiğim mesajı düzenlemek ve bir güncelleme yayımlamak istedim.

 

(Bana göre) Uzun bir sürenin ardından, konuyu tekrar (tabiri caiz ise) hortlatmış olacağım. Bu konuda anlayışlarınız için şimdiden teşekkür ederim. 😊

Konunun başından beri okumayanlar için ufak bir özet anlatım geçeceğim;

Bu konu; uzun bir süredir çeşitli uğraşılarım sonucunda (henüz) arayıp da bulamadığım, uzak bir sunucudaki ve/veya aynı makinedeki (lokal) bilgileri yalnızca uygulamamız tarafından çözülüp tekrar şifrelenecek halde paket verileri güvenli bir şekilde alıp ulaştırabilecek bir ekosistem üzerinde araştırmalar ve çalışmalar için açılmıştır.

 

Konuya geç dönüş yapmamın sebebi birden fazla. Fakat en basit halde anlatmam gerekirse eyer; konu ile alakalı bilgi sahibi birçok yerli/yabancı kişinin fikir, öneri ve görüşlerini tek tek değerlendirdim.

Burada da önerilen, bilgileri veri tabanında gizlemek ve o verileri de şifrelemekti. Bunun için en doğru sonucu elde edebilmek adına, öncelikle en son sürüm olan Lua 5.1 için SQLite3 2.6.0 kütüphanesine ihtiyacım vardı. Bunun için de Github üzerinde keplerproject tarafından sunulan luasql projesinden yararlandım.

Sonuç olarak; Şunu öğrendim ki, veri tabanını ve tablo içeriğini şifreleyerek içerdiği önemli bilgileri güvenli bir şekilde veri tabanında veya veri tabanı dosyasında saklayabiliyoruz. Fakat o verilere ulaşabilmek için ise, şifrelerken kullandığımız parola, anahtar v.s. (Örneğin PRAGMA key="12345") veya şifreleme yöntemini, yazdığımız uygulama içerisinde barındırmamız halinde veri tabanının güvenliği tamamen ortadan kaldırılmış oluyor. Yani, aradığım soruna karşılık kesin bir çözüm yolu sayılmasa da en azından bir kademe önemli bilgilerinizi uygulamanın dışında bir yerde güvenilirliği tartışılır bir halde saklayabiliyoruz.

Reteset'in kurucusu olan sevgili arkadaşım Serkan ile görüşmelerim sonucu, onun görüşlerine göre; "önemli bilgiler yani şifre sunucu adresi gibi bilgiler string olarak saklanmak zorunda olduğu için bu veri hiç bir şekilde saklanamaz", "hiç bir uygulama veya programlama dilşi bunu sana sağlamaz", "önemli veriyi şifreleyebilirsin ve o şekilde uygulama içinde saklıyabilirsin ama buda nihayi olarak string e dönüşmek zorunda ve bu olduğuna memory dump ile veriyi görebilirsin", "sana tavsiyem ,eğer bir mysql veri tabanın var ise bu aynı zamanda php destekli bir sunucun var demektir", "REST api kullanacaksın bu şekilde veritabanı ve bunun gibi önemli bilgilerin sunucu tarafında kalması", "bu şekilde uygulama üzerinde değişiklikler yapma gereği de aza iner", "bir kullanıcı/şifre tabanı kullanıcı kayıt sistemin olacak ve sadece hesabı olanlar bu apiye bağlanabilecek", "bir dosya senin blgisayarından çıktıktan sonra artık güvenli değildir , yani şifreleme ve şifre çözme işlemi simüle edilebilir", "bunu AMS gibi bir uygulama ile yapman çok zor", "sözün kısası , sunucu tarafına yönelmen", "yani senin olan veri kullanıcının bilgisayarına girdiği anda kontrol ondadır", "pluginler vesaire", "İsteyen birisi bu veriye her halukarda ulaşır", "bu dediğin mümkün olsaydı bugün hiç kimse youtube dan video indiremezdi 😊", "url en nihayetinden kullanıcı bilgisayarına gider ve bu artık açık veridir", "sende bu şekilde videyu indirirsin" bilgilerini  iletti.

Kendisine ve engin bilgilerine şu ana kadar katılıyorum. Fakat bu konunun peşinde olduğumu belirterek, üzerinde çalışmaya devam edeceğimi ve bulduğum çözüm yollarını ve hata ile karşılaştığım her türlü bilgiyi bu forumdan paylaşmaya devam edeceğim.

Saygılarımla..

Yorum bağlantısı
Sitelerde Paylaş

Sohbete katıl

Şimdi mesajını gönderebilir ve daha sonra kayıt olabilirsin. Bir hesabın varsa, hesabınla göndermek için şimdi oturum aç.

Misafir
Bu konuyu yanıtla

×   Yapıştırdığınız içerik biçimlendirme içeriyor.   Biçimlendirmeyi Temizle

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Önceki içeriğiniz geri yüklendi.   Editör içeriğini temizle

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Yeni Oluştur...

Önemli Bilgilendirme

KartalSoftware Forum kurallarını okudum ve kabul ettim.