- Katılım
- 6 Mayıs 2022
- Konular
- 48,291
- Mesajlar
- 48,601
- Tepkime puanı
- 75
- M2 Yaşı
- 3 yıl 11 ay 10 gün
- Trophy Puan
- 48
- M2 Yang
- 488,879
Sunucularınızı SQL Injection, özellikle ; ile yapılan sorgu yığınlama saldırılarına karşı korumak için basit bir yöntem paylaşacağım.
Bu kod ne işe yarar? SQL Injection, birinin login ekranına DROP TABLE item_proto; gibi zararlı komutlar yazmasıdır. Bu kod, sorgudaki ilk '' ; ''
sonrasını keser ve şüpheli girişleri loglar,böylece art arda sorgu gönderilmesini engeller ve sunucunuzu daha güvenli hâle getirir.
Uyarı: Bu yöntem iyi korur, ama tam güvenlik için parametreli sorgular ve giriş kontrolü şarttır.
Korumayı Aktif Etme
service.h veya CommonDefines.h dosyanızın en üstüne aşağıdaki kodu ekleyin. Bu, korumayı aktif edip kapatmamızı sağlayacak anahtardır.
log.cpp Dosyasını Düzenleme
Bu dosyadaki LogManager::Query fonksiyonunu bulunuz
Değiştiriyoruz:
db.cpp dosyasını açıp şunu arıyoruz:
Değiştiriyoruz:
Yine db.cpp dosyasını açıp şunu arıyoruz:
Değiştiriyoruz:
C++ dilinde geliştirilen Metin2 özel sunucularında SQL Injection saldırılarına karşı koruma sağlamak, sunucu güvenliği açısından kritik öneme sahiptir.
Metin2 özel sunucularında, kullanıcı girdilerinin doğrudan SQL sorgularına dahil edilmesi durumunda, saldırganlar zararlı sorgular göndererek veritabanına erişebilir veya verileri değiştirebilir.
Bu tür güvenlik açıklarını önlemek için, doğru anti-sql injection stratejileri uygulanmalıdır.
SQL Injection Nedir?
SQL Injection, bir saldırganın kötü niyetli SQL kodları aracılığıyla bir uygulamanın veritabanında yetkisiz işlemler yapmasını sağlayan bir güvenlik zaafiyetidir.
Özellikle kullanıcıdan alınan verilerin doğrudan SQL sorgusuna yerleştirildiği durumlarda, bu tür saldırılara karşı açık hale gelinir.
Metin2 özel sunucularında bu genellikle login, karakter oluşturma veya envanter gibi kullanıcı etkileşimli alanlarda görülür.
SQL Injection Riskleri
Kötü yapılandırılmış bir giriş noktası üzerinden, bir saldırgan tüm veritabanına erişim sağlayabilir.
Hatta veritabanındaki tüm kullanıcı hesaplarını çalabilir veya silinebilir.
Bu da hem sunucu sahibi hem de oyuncular için ciddi riskler yaratır.
C++ ile SQL Injection Koruması Nasıl Sağlanır?
C++ dilinde yazılmış Metin2 sunucu sistemlerinde SQL Injection'a karşı korunmak için aşağıdaki yöntemler önerilir:
1. Parametreli Sorgular Kullanımı (Prepared Statements)
Bu yöntem, kullanıcı girdilerinin doğrudan SQL sorgusuna yerleştirilmesini engeller.
SQL sorgusu derlenir ve parametreler daha sonra güvenli bir şekilde eklenir.
Örneğin, bir login işlemi şu şekilde yapılabilir:
2. Girdi Doğrulama (Input Validation)
Kullanıcıdan gelen veriler, belirli kalıplara göre kontrol edilmelidir.
Harf, rakam ve izin verilen özel karakterler dışında bir şey kabul edilmemelidir.
Örneğin kullanıcı adı sadece harf ve rakam içermeli.
3. Escape Fonksiyonları
C++ içinde bazı SQL kütüphaneleri escape fonksiyonları sunar.
Bu fonksiyonlar, kullanıcı girdisindeki potansiyel SQL karakterlerini güvenli hale getirir.
4. Yetkilendirme ve Erişim Kontrolü
Veritabanı kullanıcılarının minimum gerekli izinlere sahip olması sağlanmalıdır.
Bu sayede, bir saldırı gerçekleşse bile veritabanında büyük hasarlar oluşması engellenir.
Metin2 Sunucularında Uygulama Örnekleri
Metin2 özel sunucularında genellikle auth ve game sunucuları için farklı veritabanı bağlantıları kullanılır.
Her iki sistemde de yukarıda belirtilen koruma yöntemleri ayrı ayrı uygulanmalıdır.
Özellikle karakter isimleri, envanter içerikleri gibi kullanıcı girdilerinin olduğu yerlerde dikkatli olunmalıdır.
Sonuç
SQL Injection, Metin2 özel sunucularında ciddi güvenlik riskleri doğurabilir.
Ancak doğru uygulamalarla bu riskler minimize edilebilir.
Geliştiricilerin bu konuda bilinçli olmaları, sunucuların güvenliğini artırmada kilit rol oynar.
C++ based Metin2 private servers must implement protection against SQL Injection attacks to ensure server security.
In Metin2 private servers, directly inserting user inputs into SQL queries may allow attackers to send malicious queries and access or modify database information.
To prevent such vulnerabilities, proper anti-SQL injection strategies must be applied.
What is SQL Injection?
SQL Injection is a security vulnerability that allows an attacker to perform unauthorized operations on a database by injecting malicious SQL code.
This typically occurs when user input is directly inserted into SQL queries without proper validation.
In Metin2 private servers, this often happens in areas like login, character creation, or inventory systems where user interaction occurs.
Risks of SQL Injection
Through a poorly configured input point, an attacker can gain full access to the entire database.
They might steal or delete all user accounts, creating serious risks for both server owners and players.
How to Protect Against SQL Injection in C++?
The following methods are recommended to protect against SQL Injection in C++ based Metin2 server systems:
1. Use Parameterized Queries (Prepared Statements)
This method prevents direct insertion of user input into SQL queries.
The SQL query is compiled first, and parameters are safely attached afterwards.
For example, a login operation can be performed like this:
2. Input Validation
User inputs should be validated according to specific patterns.
Only letters, numbers, and allowed special characters should be accepted; anything else should be rejected.
For instance, usernames should contain only letters and numbers.
3. Escape Functions
Some SQL libraries in C++ provide escape functions.
These functions make potentially harmful SQL characters from user input safe to use.
4. Authorization and Access Control
Database users should have minimal required permissions.
This way, even if an attack occurs, major damage to the database can be prevented.
Implementation Examples in Metin2 Servers
In Metin2 private servers, different database connections are usually used for auth and game servers.
The above-mentioned protective measures must be applied separately in both systems.
Special attention must be paid to areas involving user inputs, such as character names and inventory contents.
Conclusion
SQL Injection can cause significant security risks in Metin2 private servers.
However, these risks can be minimized with correct implementations.
Developers' awareness of this topic plays a key role in enhancing server security.
Bu kod ne işe yarar? SQL Injection, birinin login ekranına DROP TABLE item_proto; gibi zararlı komutlar yazmasıdır. Bu kod, sorgudaki ilk '' ; ''
sonrasını keser ve şüpheli girişleri loglar,böylece art arda sorgu gönderilmesini engeller ve sunucunuzu daha güvenli hâle getirir.
Uyarı: Bu yöntem iyi korur, ama tam güvenlik için parametreli sorgular ve giriş kontrolü şarttır.
Korumayı Aktif Etme
service.h veya CommonDefines.h dosyanızın en üstüne aşağıdaki kodu ekleyin. Bu, korumayı aktif edip kapatmamızı sağlayacak anahtardır.
Kod:
#define ENABLE_SQL_INJECT_CONTROL_ON_QUERY // Sql Inject Protect
log.cpp Dosyasını Düzenleme
Bu dosyadaki LogManager::Query fonksiyonunu bulunuz
Kod:
void LogManager::Query(const char * c_pszFormat, ...)
Değiştiriyoruz:
Kod:
void LogManager::Query(const char * c_pszFormat, ...) { LOG_LEVEL_CHECK_N_RET(LOG_LEVEL_MIN); char szQuery[4096]; va_list args; va_start(args, c_pszFormat); vsnprintf(szQuery, sizeof(szQuery), c_pszFormat, args); va_end(args); if (test_server) sys_log(0, "LOG: %s", szQuery); #ifdef ENABLE_SQL_INJECT_CONTROL_ON_QUERY std::string sQuery(szQuery); m_sql.AsyncQuery(sQuery.substr(0, sQuery.find_first_of(";") == std::string::npos ? sQuery.length(): sQuery.find_first_of(";")).c_str()); #else m_sql.AsyncQuery(szQuery); #endif }
db.cpp dosyasını açıp şunu arıyoruz:
Kod:
void DBManager::Query(const char * c_pszFormat, ...)
Değiştiriyoruz:
Kod:
void DBManager::Query(const char* c_pszFormat, ...) { char szQuery[4096]; va_list args; va_start(args, c_pszFormat); vsnprintf(szQuery, sizeof(szQuery), c_pszFormat, args); va_end(args); #ifdef ENABLE_SQL_INJECT_CONTROL_ON_QUERY std::string sQuery(szQuery); m_sql.AsyncQuery(sQuery.substr(0, sQuery.find_first_of(";") == std::string::npos ? sQuery.length(): sQuery.find_first_of(";")).c_str()); #else m_sql.AsyncQuery(szQuery); #endif }
Yine db.cpp dosyasını açıp şunu arıyoruz:
Kod:
SQLMsg* DBManager::DirectQuery(const char* c_pszFormat, ...)
Değiştiriyoruz:
Kod:
SQLMsg* DBManager::DirectQuery(const char* c_pszFormat, ...) { char szQuery[4096]; va_list args; va_start(args, c_pszFormat); vsnprintf(szQuery, sizeof(szQuery), c_pszFormat, args); va_end(args); #ifdef ENABLE_SQL_INJECT_CONTROL_ON_QUERY std::string sQuery(szQuery); return m_sql_direct.DirectQuery(sQuery.substr(0, sQuery.find_first_of(";") == -1 ? sQuery.length() : sQuery.find_first_of(";")).c_str()); #else return m_sql_direct.DirectQuery(szQuery); #endif }
C++ dilinde geliştirilen Metin2 özel sunucularında SQL Injection saldırılarına karşı koruma sağlamak, sunucu güvenliği açısından kritik öneme sahiptir.
Metin2 özel sunucularında, kullanıcı girdilerinin doğrudan SQL sorgularına dahil edilmesi durumunda, saldırganlar zararlı sorgular göndererek veritabanına erişebilir veya verileri değiştirebilir.
Bu tür güvenlik açıklarını önlemek için, doğru anti-sql injection stratejileri uygulanmalıdır.
SQL Injection Nedir?
SQL Injection, bir saldırganın kötü niyetli SQL kodları aracılığıyla bir uygulamanın veritabanında yetkisiz işlemler yapmasını sağlayan bir güvenlik zaafiyetidir.
Özellikle kullanıcıdan alınan verilerin doğrudan SQL sorgusuna yerleştirildiği durumlarda, bu tür saldırılara karşı açık hale gelinir.
Metin2 özel sunucularında bu genellikle login, karakter oluşturma veya envanter gibi kullanıcı etkileşimli alanlarda görülür.
SQL Injection Riskleri
Kötü yapılandırılmış bir giriş noktası üzerinden, bir saldırgan tüm veritabanına erişim sağlayabilir.
Hatta veritabanındaki tüm kullanıcı hesaplarını çalabilir veya silinebilir.
Bu da hem sunucu sahibi hem de oyuncular için ciddi riskler yaratır.
C++ ile SQL Injection Koruması Nasıl Sağlanır?
C++ dilinde yazılmış Metin2 sunucu sistemlerinde SQL Injection'a karşı korunmak için aşağıdaki yöntemler önerilir:
1. Parametreli Sorgular Kullanımı (Prepared Statements)
Bu yöntem, kullanıcı girdilerinin doğrudan SQL sorgusuna yerleştirilmesini engeller.
SQL sorgusu derlenir ve parametreler daha sonra güvenli bir şekilde eklenir.
Örneğin, bir login işlemi şu şekilde yapılabilir:
Kod:
sql.prepare('SELECT * FROM accounts WHERE login = ? AND password = ?')
2. Girdi Doğrulama (Input Validation)
Kullanıcıdan gelen veriler, belirli kalıplara göre kontrol edilmelidir.
Harf, rakam ve izin verilen özel karakterler dışında bir şey kabul edilmemelidir.
Örneğin kullanıcı adı sadece harf ve rakam içermeli.
3. Escape Fonksiyonları
C++ içinde bazı SQL kütüphaneleri escape fonksiyonları sunar.
Bu fonksiyonlar, kullanıcı girdisindeki potansiyel SQL karakterlerini güvenli hale getirir.
4. Yetkilendirme ve Erişim Kontrolü
Veritabanı kullanıcılarının minimum gerekli izinlere sahip olması sağlanmalıdır.
Bu sayede, bir saldırı gerçekleşse bile veritabanında büyük hasarlar oluşması engellenir.
Metin2 Sunucularında Uygulama Örnekleri
Metin2 özel sunucularında genellikle auth ve game sunucuları için farklı veritabanı bağlantıları kullanılır.
Her iki sistemde de yukarıda belirtilen koruma yöntemleri ayrı ayrı uygulanmalıdır.
Özellikle karakter isimleri, envanter içerikleri gibi kullanıcı girdilerinin olduğu yerlerde dikkatli olunmalıdır.
Sonuç
SQL Injection, Metin2 özel sunucularında ciddi güvenlik riskleri doğurabilir.
Ancak doğru uygulamalarla bu riskler minimize edilebilir.
Geliştiricilerin bu konuda bilinçli olmaları, sunucuların güvenliğini artırmada kilit rol oynar.
C++ based Metin2 private servers must implement protection against SQL Injection attacks to ensure server security.
In Metin2 private servers, directly inserting user inputs into SQL queries may allow attackers to send malicious queries and access or modify database information.
To prevent such vulnerabilities, proper anti-SQL injection strategies must be applied.
What is SQL Injection?
SQL Injection is a security vulnerability that allows an attacker to perform unauthorized operations on a database by injecting malicious SQL code.
This typically occurs when user input is directly inserted into SQL queries without proper validation.
In Metin2 private servers, this often happens in areas like login, character creation, or inventory systems where user interaction occurs.
Risks of SQL Injection
Through a poorly configured input point, an attacker can gain full access to the entire database.
They might steal or delete all user accounts, creating serious risks for both server owners and players.
How to Protect Against SQL Injection in C++?
The following methods are recommended to protect against SQL Injection in C++ based Metin2 server systems:
1. Use Parameterized Queries (Prepared Statements)
This method prevents direct insertion of user input into SQL queries.
The SQL query is compiled first, and parameters are safely attached afterwards.
For example, a login operation can be performed like this:
Kod:
sql.prepare('SELECT * FROM accounts WHERE login = ? AND password = ?')
2. Input Validation
User inputs should be validated according to specific patterns.
Only letters, numbers, and allowed special characters should be accepted; anything else should be rejected.
For instance, usernames should contain only letters and numbers.
3. Escape Functions
Some SQL libraries in C++ provide escape functions.
These functions make potentially harmful SQL characters from user input safe to use.
4. Authorization and Access Control
Database users should have minimal required permissions.
This way, even if an attack occurs, major damage to the database can be prevented.
Implementation Examples in Metin2 Servers
In Metin2 private servers, different database connections are usually used for auth and game servers.
The above-mentioned protective measures must be applied separately in both systems.
Special attention must be paid to areas involving user inputs, such as character names and inventory contents.
Conclusion
SQL Injection can cause significant security risks in Metin2 private servers.
However, these risks can be minimized with correct implementations.
Developers' awareness of this topic plays a key role in enhancing server security.
