Sql İnject C++

  • Konbuyu başlatan Konbuyu başlatan Admin
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 0
  • Görüntüleme Görüntüleme 30

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
Öncelikle Direk Diğer Forumlardan Alıp Burada Konu Paylaşmak Demek Değildir Çözüm xd

.../game/src

messenger.manager.cpp aç arat

Kod:
MessengerManager::RemoveFromList

kod bloğu değiştir.

Kod:
void MessengerManager::RemoveFromList(MessengerManager:  :keyA account, MessengerManager::keyA companion) {     if (companion.empty())         return;     char companionEscaped[CHARACTER_NAME_MAX_LEN * 2 + 1];     DBManager::instance().EscapeString(companionEscape  d, sizeof(companionEscaped), companion.c_str(), companion.length());     DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' AND companion = '%s'",                                 get_table_postfix(), account.c_str(), companionEscaped);     __RemoveFromList(account, companion);     sys_log(1, "Messenger Remove %s %s", account.c_str(), companion.c_str());     TPacketGGMessenger pack;     pack.bHeader = HEADER_GG_MESSENGER_REMOVE;     strlcpy(pack.szAccount, account.c_str(), sizeof(pack.szAccount));     strlcpy(pack.szCompanion, companion.c_str(), sizeof(pack.szCompanion));     P2P_MANAGER::instance().Send(&pack, sizeof(TPacketGGMessenger)); }

Açığı Deniyen Çarı Banlayıp Oyundan Atıcaktır.

Not : Konu Bazılarına Hitaben Açılmıştır :)


Sql Injection ve C++ ile Güvenli Kodlama Yöntemleri


Giriş
Sql Injection (SQL Enjeksiyonu), özellikle veritabanı bağlantılı uygulamalarda karşılaşılan en yaygın güvenlik açıklarından biridir. Özellikle Metin2 özel sunucular gibi C++ tabanlı sistemlerde bu tür açıklar hem oyuncuların verilerini hem de sunucu güvenliğini ciddi anlamda tehdit edebilir. Bu makalede Sql Injection kavramı, C++ dilinde nasıl oluştuğu ve nasıl önlenabileceği detaylı olarak ele alınacaktır. Ayrıca Metin2 geliştirme sürecinde dikkat edilmesi gereken güvenlik önlemleri de yer alacaktır.

Sql Injection Nedir?
Sql Injection, saldırganların uygulamanın veritabanı sorgularına zararlı SQL komutları sokarak veri çalmak, silmek veya değiştirmek amacıyla kullandığı bir saldırı türüdür. Bu saldırı genellikle kullanıcıdan gelen verilerin doğrulanmadan sorguya dahil edilmesiyle gerçekleşir. Örneğin bir kullanıcı adı alanına ' OR 1=1 -- gibi bir ifade girildiğinde, bu ifade SQL sorgusunu manipüle ederek tüm kullanıcıları getirebilir.

C++ ve Sql Injection
C++ dili doğrudan veritabanı işlemleri için tasarlanmamıştır, ancak Metin2 gibi oyun sunucularında DB Core (veritabanı çekirdeği) ile entegre çalışan C++ modülleri bulunur. Bu modüllerde Sql Injection riski, kullanıcıdan gelen verilerin doğrudan SQL sorgularında kullanılmasıyla oluşabilir. Özellikle Game Server veya Auth Server üzerinde geliştirilen özel sistemlerde dikkat edilmelidir.

Yanlış Kullanım Örneği:
Kod:
char query[512];[BR][/BR]sprintf(query, "SELECT * FROM account WHERE login='%s'", user_input);

Yukarıdaki örnekte, 'user_input' doğrulanmadan sorguya dahil edildiği için Sql Injection riski vardır.

Sql Injection'u Önlemek İçin Kullanılabilecek Yöntemler
1. Prepared Statements (Hazırlanmış Sorgular): C++ ile veritabanı işlemlerinde prepared statements kullanılması en etkili yöntemlerden biridir. Bu yöntem sayesinde kullanıcıdan gelen veriler doğrudan sorguya dahil edilmeden önce parametre olarak atanır. Böylece Sql Injection saldırısı engellenmiş olur.

2. Input Validation (Girdi Doğrulama): Kullanıcıdan gelen verilerin belirli kalıplara göre kontrol edilmesi önemlidir. Örneğin kullanıcı adında sadece harf, rakam ve alt çizgiye izin verilebilir. Sql Injection için tehlikeli karakterler filtrelenmelidir.

3. Escape Fonksiyonları: Bazı veritabanı sürücülerinde escape fonksiyonları mevcuttur. Bu fonksiyonlar sayesinde tehlikeli karakterler kaçış karakteri ile dönüştürülebilir. Ancak bu yöntem daha az güvenlidir ve prepared statements tercih edilmelidir.

Metin2 Geliştirme Sürecinde Sql Injection'a Karşı Güvenlik
Metin2 özel sunucularında, Auth Server ve Game Server arasındaki veri alışverişinde Sql Injection riski oldukça fazladır. Özellikle hesap oluşturma, giriş yapma, karakter oluşturma gibi işlemlerde kullanıcıdan gelen verilerin doğrulanması şarttır. Ayrıca DB Core üzerinden yapılan sorgularda da bu kontroller mutlaka yapılmalıdır. Bu tür sistemlerde C++ script geliştirme sırasında dikkat edilmesi gereken bazı önemli konular şunlardır:

- Sql sorgularında kullanıcı verisi doğrudan kullanılmamalıdır.
- Prepared statement desteği olan veritabanı sürücüleri tercih edilmelidir.
- Kullanıcı girdileri regex ile kontrol edilmelidir.
- Sistem loglamaları yapılarak şüpheli girişimler yakalanabilir.

Sonuç
Sql Injection, özellikle C++ tabanlı oyun sunucularında büyük güvenlik riskleri doğurabilir. Metin2 özel sunucu geliştiricileri, bu tür açıklardan korunmak için veritabanı bağlantılarında doğru teknikleri kullanmalı ve kullanıcı girdilerini dikkatli şekilde doğrulamalıdır. Bu sayede hem oyuncuların verileri güvende kalır hem de sunucu güvenliği sağlanır.


Sql Injection and Secure Coding Practices with C++


Introduction
Sql Injection is one of the most common security vulnerabilities found in database-driven applications. In C++ based systems like Metin2 private servers, such vulnerabilities can seriously threaten both player data and server security. This article will provide a detailed explanation of Sql Injection, how it occurs in C++ applications, and methods to prevent it. Additionally, security measures to consider during Metin2 development will be covered.

What is Sql Injection?
Sql Injection is an attack technique where malicious users inject harmful SQL commands into application database queries in order to steal, delete, or modify data. This type of attack usually occurs when user-provided input is included directly into SQL queries without validation. For example, inserting ' OR 1=1 -- into a username field could manipulate the SQL query to return all users.

Sql Injection in C++
While C++ was not designed specifically for database operations, C++ modules integrated with DB Core are commonly used in games like Metin2. Sql Injection risks arise here when user inputs are directly included in SQL queries without proper validation. Special attention must be paid in custom systems developed on Game Server or Auth Server components.

Incorrect Usage Example:
Kod:
char query[512];[BR][/BR]sprintf(query, "SELECT * FROM account WHERE login='%s'", user_input);

In this example, 'user_input' is directly embedded into the query without validation, creating a Sql Injection vulnerability.

Methods to Prevent Sql Injection
1. Prepared Statements: Using prepared statements is one of the most effective methods in C++ database operations. With this approach, user input is treated as parameters rather than being directly inserted into the query, preventing Sql Injection attacks.

2. Input Validation: Validating user inputs according to specific patterns is crucial. For instance, usernames should only allow letters, numbers, and underscores. Characters dangerous for Sql Injection should be filtered out.

3. Escape Functions: Some database drivers offer escape functions that convert dangerous characters into escape sequences. However, this method is less secure and prepared statements are preferred.

Security Against Sql Injection in Metin2 Development[/BR]Sql Injection risks are high in Metin2 private servers, especially in data exchanges between Auth Server and Game Server. User inputs must be validated during account creation, login, character creation, and other processes. Important considerations during C++ scripting in such systems include:

- Never directly use user data in SQL queries.
- Prefer database drivers supporting prepared statements.
- Validate user inputs using regex patterns.
- Implement logging to detect suspicious activities.

Conclusion
Sql Injection can pose significant security threats in C++ based game servers. Developers of Metin2 private servers must use correct techniques in database connections and carefully validate user inputs to avoid such vulnerabilities. This ensures both player data safety and overall server security.
 

Şuan Bu Konuyu Görüntüleyen Kullanıcılar (Toplam : 0, Üye : 0, Misafir : 0)

Benzer konular

Geri
Üst Alt