Fethi Polat 1
Fethi Polat
Mt2Hizmet 1
Mt2Hizmet
Sevdamsın 1
Sevdamsın
Nedved35 1
Nedved35
Bvural41 1
Bvural41
-TuRKuaZ- 1
-TuRKuaZ-
farkmt2official 1
farkmt2official
Hikaye Ekle

Extended Player Name

  • Konuyu başlatan Konuyu başlatan Silverhand
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 10
  • Görüntüleme Görüntüleme 618

HERAKLES Otomatik Avlı kalıcı sunucu. 19 Haziran'da açılıyor. Atius & Wizard güvencesiyle hemen kayıt ol, ön kayıt ödülleri aktif. HEMEN TIKLA!

Paylaşım için Teşekkürler
 
DB ağlıyor bu şekilde kral isimlerin arasinda boşluk veyada özel karakter kullanımında core + crash yedirir utils.cpp icine özel karakter kullanılmamasi için bir kontrol ekleyip isim ekleme alanına gerekli fonksiyonu cagirman gerekir. Diğer türlü kendini bilmez birisi gelir MySQL fazladan bir veri sıkıştırır veyada packet yollar 1 byte yerine 1000 byte'lik oyun çöker
db neden ağlıyor o kısmı anlamadım, mysql e fazladan veri sıkıştırmak ne demek mysql e nasıl paket yollayacak 1 byte yerine 1000 byte yollamak ne demek sırf özel karakter var diye game neden core + crash yiyecek? core + crash ne demek?
 
db neden ağlıyor o kısmı anlamadım, mysql e fazladan veri sıkıştırmak ne demek mysql e nasıl paket yollayacak 1 byte yerine 1000 byte yollamak ne demek sırf özel karakter var diye game neden core + crash yiyecek? core + crash ne demek?
1. olarak Yeni bir karakter açılırken packet->player_table.name değişkeni doğrudan INSERT INTO player sorgusuna %s ile yazılıyor. Eğer istemci (client) tarafında limitler kırılarak isim yerine özel bir SQL komutu (örneğin tırnak işaretleriyle kaçış yapılmış bir DROP komutu) yollanırsa, veritabanı doğrudan tehlikeye girer
2. olarak hiçbir güvenlik filtresinden (EscapeString) geçirilmeden doğrudan SQL sorgularının içine gömülmekte
3. olarak p->name verisi SELECT COUNT(*) ve UPDATE player sorgularına filtrelenmeden dahil edilmekte
4. olarak account.c_str() değeri filtrelenmeden DELETE sorgusuna girmekte peki adam manipüle ettiğinde tablo içerisinde kritik yerleri silebilir.
5. olarak Bellek taşması İstemciden isim olarak yüzlerce byte'lık bir çöp veri gönderildiğinde snprintf, sorguyu dizinin sınırında kesecektir. Bu durum, veritabanına eksik veya da yarım bir SQL sorgusu syntax error gönderilmesine neden olur ve db_daemon'un hata vererek kapanmasına veya kilitlenmesine yol açar
6. check_name_alphabet fonksiyonunda sadece karakterlerin harf veya rakam olup olmadığı isdigit / isalpha kontrol ediliyor. Gelen dizginin uzunluğu kontrol edilmediği için len->CHARACTER_NAME_MAX_LEN kontrolü yok paket üzerinden gönderilen devasa bir string bu fonksiyondan geçtikten sonra bellekte işlem gördüğü yerde (strcpy, sprintf gibi) taşma yaratarak anında "core" verir.

core + crash, sunucunun aniden ölmesi/kapanması olayıdır. coreise o ölümden geriye kalan otopsi
 
Son düzenleme:
1. olarak Yeni bir karakter açılırken packet->player_table.name değişkeni doğrudan INSERT INTO player sorgusuna %s ile yazılıyor. Eğer istemci (client) tarafında limitler kırılarak isim yerine özel bir SQL komutu (örneğin tırnak işaretleriyle kaçış yapılmış bir DROP komutu) yollanırsa, veritabanı doğrudan tehlikeye girer -> bu dediğin olsaydı şu an ayakta sunucu olmazdı
2. olarak hiçbir güvenlik filtresinden (EscapeString) geçirilmeden doğrudan SQL sorgularının içine gömülmekte -> 1 numarada dediğin zaten bu yüzden olmuyor kendi kendini çürütmüşsün
3. olarak p->name verisi SELECT COUNT(*) ve UPDATE player sorgularına filtrelenmeden dahil edilmekte -> ne alaka anlamadım? normal db sorgulamaktan yada update etmekten bir farkı yok isimde "_" olması soruguyu değiştirmez
4. olarak account.c_str() değeri filtrelenmeden DELETE sorgusuna girmekte peki adam manipüle ettiğinde tablo içerisinde kritik yerleri silebilir. -> konuyla ne alakası var anlamış değilim :D
5. olarak Bellek taşması İstemciden isim olarak yüzlerce byte'lık bir çöp veri gönderildiğinde snprintf, sorguyu dizinin sınırında kesecektir. Bu durum, veritabanına eksik veya da yarım bir SQL sorgusu syntax error gönderilmesine neden olur ve db_daemon'un hata vererek kapanmasına veya kilitlenmesine yol açar -> allah allah? demekki isteseniz özel karaktere izin verilen global oyunları düşürürsünüz yani :D clienttan gönderilenin valide edilmeden içeriği alındığını düşünüyorsun, söylediğin 1. ve 2. maddeleri de zaten valide etmek çürütüyor
6. check_name_alphabet fonksiyonunda sadece karakterlerin harf veya rakam olup olmadığı isdigit / isalpha kontrol ediliyor. Gelen dizginin uzunluğu kontrol edilmediği için len->CHARACTER_NAME_MAX_LEN kontrolü yok paket üzerinden gönderilen devasa bir string bu fonksiyondan geçtikten sonra bellekte işlem gördüğü yerde (strcpy, sprintf gibi) taşma yaratarak anında "core" verir. -> zaten değişiklik yapmadan kullanmaya çalışmak at arabasına motor takıp çalışmasını beklemek olur

metin2'de otorite client değil server, clienttan o zaman 1000 karakterli ismi her oyuna gönderdiğinde oyun çöksün? detaylı incelemeden kulaktan dolma bilgilerle yorum yaptığınızı düşünüyorum, dedikleriniz gerçek olsaydı 100lerce oyunda özel karakterli isimler olmazdı başarılar
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst