Merhaba arkadaşlar, daha önce konusu paylaşılmıştı fakat o paylaşılanda derleyici verilen -1 değerinden dolayı uyarı veriyor.
Sorunsuz halini paylaşmak istedim.
Sadece 2 satırda değişiklik yapılmıştır.
Umarım işinize yarar. İyi forumlar.
OLUŞABİLECEK TÜM SQL INJECTION AÇIKLARININ FIXI [C++] METİN2 GELİŞTİRME REHBERİ
GİRİŞ
Metin2 özel sunucu geliştirme süreçlerinde güvenlik en önemli konulardan biridir. Özellikle veritabanı bağlantısı kurulan sistemlerde SQL Injection açıkları büyük riskler doğurabilir. Bu tür açıklar sayesinde kötü niyetli kullanıcılar veritabanına erişim sağlayabilir, verileri değiştirebilir veya silip sunucuyu tamamen çökertebilir. Bu nedenle SQL Injection açıklarının tümünü engellemek, Metin2 geliştiricileri için kritik öneme sahiptir. Bu yazıda, C++ tabanlı Metin2 sunucularında oluşabilecek tüm SQL Injection açıklarının fix yöntemlerini detaylı olarak ele alacağız.
SQL INJECTION NEDİR?
SQL Injection, kullanıcı girdilerinin kontrolsüz bir şekilde SQL sorgularına entegre edilmesiyle ortaya çıkan bir güvenlik zaafiyetidir. Kötü niyetli kullanıcılar, giriş alanlarına özel karakterler veya SQL komutları girerek veritabanı üzerinde yetkisiz işlemler yapabilir. Örneğin, kullanıcı adı kısmına ' OR '1'='1 gibi ifadeler yazarak kimlik doğrulamayı atlatmak mümkündür.
TEMEL SQL INJECTION TÜRLERİ
1. Union-Based Injection: Birden fazla sorguyu birleştirerek veri sızdırma amaçlıdır.
2. Boolean-Based Injection: Sorgunun doğru ya da yanlış sonucuna göre veri sızdırılır.
3. Time-Based Injection: Sorguların yanıt süresine göre veri alınmaya çalışılır.
4. Error-Based Injection: Hata mesajlarından yararlanarak veri sızdırılır.
C++ KODLARINDA SQL INJECTION FIX YÖNTEMLERİ
1. Prepared Statements Kullanımı
C++ projelerinde MySQL ile çalışırken, mysql_stmt_bind_param fonksiyonu kullanılarak parametreli sorgular oluşturulmalıdır. Bu yöntem, kullanıcı girdisinin doğrudan sorguya entegre edilmesini engeller. Örneğin:
2. Escape Fonksiyonları
MySQL C API'sinde bulunan mysql_real_escape_string fonksiyonu, gelen kullanıcı girdisini temizler. Ancak bu yöntem prepared statements kadar güvenli değildir.
3. Girdi Doğrulama
Giriş yapılan verileri önceden filtrelemek, harf/digit kontrolleri yapmak önemlidir. Örneğin kullanıcı adı yalnızca harf ve rakam içermeli, özel karakterler reddedilmelidir.
METİN2 SUNUCULARINDA ÖZEL DURUMLAR
Metin2 sunucularında genellikle iki ana veritabanı bulunur: auth ve game. Auth DB kullanıcı kimlik doğrulaması, game DB ise karakter verileri için kullanılır. Her ikisinde de kullanıcıdan gelen verilerin kontrolsüz kullanılması ciddi güvenlik açıklarına yol açabilir. Özellikle login, character creation, chat system, item storage gibi alanlarda dikkatli olunmalıdır.
GERÇEK UYGULAMA ÖRNEĞİ[/BR]
Aşağıda örnek bir login fonksiyonunda prepared statement kullanımına dair örnek verilmiştir:
SONUÇ
SQL Injection açıklarını engellemek, Metin2 özel sunucularının güvenliğini sağlamada temel adımlardan biridir. C++ tabanlı sistemlerde güvenliği artırmak için mutlaka prepared statements kullanılmalı, kullanıcı girdileri filtrelenmelidir. Bu tür güvenlik önlemleri alınmadığı takdirde, sunucu saldırıya açık hale gelir ve veriler kaybedilebilir. Bu nedenle her geliştirici, güvenlik konusunda duyarlı olmalı ve tüm girdileri kontrol altına almalıdır.
FIXING ALL POSSIBLE SQL INJECTION VULNERABILITIES [C++] METIN2 DEVELOPMENT GUIDE
INTRODUCTION
Security is one of the most important aspects during the development of Metin2 private servers. Particularly in database-connected systems, SQL Injection vulnerabilities can lead to major risks. Malicious users may gain access to the database, alter or delete data, and even crash the entire server. Therefore, preventing all types of SQL Injection attacks is critical for Metin2 developers. In this article, we will detail how to fix all possible SQL Injection vulnerabilities in C++-based Metin2 server environments.
WHAT IS SQL INJECTION?
SQL Injection is a security vulnerability that occurs when user input is incorporated into SQL queries without proper validation. Attackers can insert special characters or SQL commands into input fields to perform unauthorized operations on the database. For instance, by entering ' OR '1'='1 in the username field, they might bypass authentication.
TYPES OF SQL INJECTION
1. Union-Based Injection: Uses UNION commands to extract data from multiple queries.
2. Boolean-Based Injection: Extracts data based on whether the query returns true or false responses.
3. Time-Based Injection: Relies on response times of queries to infer information.
4. Error-Based Injection: Exploits error messages to retrieve data.
FIXING SQL INJECTION IN C++ CODES
1. Use of Prepared Statements
When working with MySQL in C++, the mysql_stmt_bind_param function should be used to create parameterized queries. This prevents direct insertion of user input into SQL queries. Example:
2. Escape Functions
The mysql_real_escape_string function in the MySQL C API sanitizes incoming user input. However, this method is less secure than using prepared statements.
3. Input Validation
Validating user input before processing—such as ensuring usernames only contain alphanumeric characters—is crucial to prevent injection attacks.
SPECIAL CASES IN METIN2 SERVERS
In Metin2 servers, two main databases are usually present: auth and game. The auth database handles user authentication, while the game database stores character data. Unsafe use of user-provided data in both can lead to serious vulnerabilities. Special attention must be paid in areas such as login, character creation, chat system, and item storage.
REAL-WORLD EXAMPLE
Below is an example of a login function utilizing prepared statements:
CONCLUSION
Preventing SQL Injection vulnerabilities is a fundamental step in securing Metin2 private servers. In C++-based systems, prepared statements must be used, and user inputs should be properly validated. Without these measures, the server remains vulnerable to attacks, risking data loss. Therefore, every developer must remain vigilant about security and ensure all inputs are controlled.
Sorunsuz halini paylaşmak istedim.
Sadece 2 satırda değişiklik yapılmıştır.
Umarım işinize yarar. İyi forumlar.
Ziyaretçiler için gizlenmiş link,görmek için üye olmalısınız!
Giriş yap veya üye ol.
OLUŞABİLECEK TÜM SQL INJECTION AÇIKLARININ FIXI [C++] METİN2 GELİŞTİRME REHBERİ
GİRİŞ
Metin2 özel sunucu geliştirme süreçlerinde güvenlik en önemli konulardan biridir. Özellikle veritabanı bağlantısı kurulan sistemlerde SQL Injection açıkları büyük riskler doğurabilir. Bu tür açıklar sayesinde kötü niyetli kullanıcılar veritabanına erişim sağlayabilir, verileri değiştirebilir veya silip sunucuyu tamamen çökertebilir. Bu nedenle SQL Injection açıklarının tümünü engellemek, Metin2 geliştiricileri için kritik öneme sahiptir. Bu yazıda, C++ tabanlı Metin2 sunucularında oluşabilecek tüm SQL Injection açıklarının fix yöntemlerini detaylı olarak ele alacağız.
SQL INJECTION NEDİR?
SQL Injection, kullanıcı girdilerinin kontrolsüz bir şekilde SQL sorgularına entegre edilmesiyle ortaya çıkan bir güvenlik zaafiyetidir. Kötü niyetli kullanıcılar, giriş alanlarına özel karakterler veya SQL komutları girerek veritabanı üzerinde yetkisiz işlemler yapabilir. Örneğin, kullanıcı adı kısmına ' OR '1'='1 gibi ifadeler yazarak kimlik doğrulamayı atlatmak mümkündür.
TEMEL SQL INJECTION TÜRLERİ
1. Union-Based Injection: Birden fazla sorguyu birleştirerek veri sızdırma amaçlıdır.
2. Boolean-Based Injection: Sorgunun doğru ya da yanlış sonucuna göre veri sızdırılır.
3. Time-Based Injection: Sorguların yanıt süresine göre veri alınmaya çalışılır.
4. Error-Based Injection: Hata mesajlarından yararlanarak veri sızdırılır.
C++ KODLARINDA SQL INJECTION FIX YÖNTEMLERİ
1. Prepared Statements Kullanımı
C++ projelerinde MySQL ile çalışırken, mysql_stmt_bind_param fonksiyonu kullanılarak parametreli sorgular oluşturulmalıdır. Bu yöntem, kullanıcı girdisinin doğrudan sorguya entegre edilmesini engeller. Örneğin:
Kod:
std::string query = "SELECT * FROM accounts WHERE name = ?";[BR][/BR]// Prepared statement kullanarak kullanıcı girdisi güvenli bir şekilde bağlanır.
2. Escape Fonksiyonları
MySQL C API'sinde bulunan mysql_real_escape_string fonksiyonu, gelen kullanıcı girdisini temizler. Ancak bu yöntem prepared statements kadar güvenli değildir.
3. Girdi Doğrulama
Giriş yapılan verileri önceden filtrelemek, harf/digit kontrolleri yapmak önemlidir. Örneğin kullanıcı adı yalnızca harf ve rakam içermeli, özel karakterler reddedilmelidir.
METİN2 SUNUCULARINDA ÖZEL DURUMLAR
Metin2 sunucularında genellikle iki ana veritabanı bulunur: auth ve game. Auth DB kullanıcı kimlik doğrulaması, game DB ise karakter verileri için kullanılır. Her ikisinde de kullanıcıdan gelen verilerin kontrolsüz kullanılması ciddi güvenlik açıklarına yol açabilir. Özellikle login, character creation, chat system, item storage gibi alanlarda dikkatli olunmalıdır.
GERÇEK UYGULAMA ÖRNEĞİ[/BR]
Aşağıda örnek bir login fonksiyonunda prepared statement kullanımına dair örnek verilmiştir:
Kod:
bool check_login(const char* username, const char* password) {[BR][/BR] MYSQL_STMT *stmt = mysql_stmt_init(conn);[BR][/BR] const char *query = "SELECT id FROM account WHERE login = ? AND password = ?";[BR][/BR] mysql_stmt_prepare(stmt, query, strlen(query));[BR][/BR] // Parametreler bağlanır...[BR][/BR] mysql_stmt_execute(stmt);[BR][/BR]}
SONUÇ
SQL Injection açıklarını engellemek, Metin2 özel sunucularının güvenliğini sağlamada temel adımlardan biridir. C++ tabanlı sistemlerde güvenliği artırmak için mutlaka prepared statements kullanılmalı, kullanıcı girdileri filtrelenmelidir. Bu tür güvenlik önlemleri alınmadığı takdirde, sunucu saldırıya açık hale gelir ve veriler kaybedilebilir. Bu nedenle her geliştirici, güvenlik konusunda duyarlı olmalı ve tüm girdileri kontrol altına almalıdır.
FIXING ALL POSSIBLE SQL INJECTION VULNERABILITIES [C++] METIN2 DEVELOPMENT GUIDE
INTRODUCTION
Security is one of the most important aspects during the development of Metin2 private servers. Particularly in database-connected systems, SQL Injection vulnerabilities can lead to major risks. Malicious users may gain access to the database, alter or delete data, and even crash the entire server. Therefore, preventing all types of SQL Injection attacks is critical for Metin2 developers. In this article, we will detail how to fix all possible SQL Injection vulnerabilities in C++-based Metin2 server environments.
WHAT IS SQL INJECTION?
SQL Injection is a security vulnerability that occurs when user input is incorporated into SQL queries without proper validation. Attackers can insert special characters or SQL commands into input fields to perform unauthorized operations on the database. For instance, by entering ' OR '1'='1 in the username field, they might bypass authentication.
TYPES OF SQL INJECTION
1. Union-Based Injection: Uses UNION commands to extract data from multiple queries.
2. Boolean-Based Injection: Extracts data based on whether the query returns true or false responses.
3. Time-Based Injection: Relies on response times of queries to infer information.
4. Error-Based Injection: Exploits error messages to retrieve data.
FIXING SQL INJECTION IN C++ CODES
1. Use of Prepared Statements
When working with MySQL in C++, the mysql_stmt_bind_param function should be used to create parameterized queries. This prevents direct insertion of user input into SQL queries. Example:
Kod:
std::string query = "SELECT * FROM accounts WHERE name = ?";[BR][/BR]// User inputs are safely bound using prepared statements.
2. Escape Functions
The mysql_real_escape_string function in the MySQL C API sanitizes incoming user input. However, this method is less secure than using prepared statements.
3. Input Validation
Validating user input before processing—such as ensuring usernames only contain alphanumeric characters—is crucial to prevent injection attacks.
SPECIAL CASES IN METIN2 SERVERS
In Metin2 servers, two main databases are usually present: auth and game. The auth database handles user authentication, while the game database stores character data. Unsafe use of user-provided data in both can lead to serious vulnerabilities. Special attention must be paid in areas such as login, character creation, chat system, and item storage.
REAL-WORLD EXAMPLE
Below is an example of a login function utilizing prepared statements:
Kod:
bool check_login(const char* username, const char* password) {[BR][/BR] MYSQL_STMT *stmt = mysql_stmt_init(conn);[BR][/BR] const char *query = "SELECT id FROM account WHERE login = ? AND password = ?";[BR][/BR] mysql_stmt_prepare(stmt, query, strlen(query));[BR][/BR] // Parameters are bound here...[BR][/BR] mysql_stmt_execute(stmt);[BR][/BR]}
CONCLUSION
Preventing SQL Injection vulnerabilities is a fundamental step in securing Metin2 private servers. In C++-based systems, prepared statements must be used, and user inputs should be properly validated. Without these measures, the server remains vulnerable to attacks, risking data loss. Therefore, every developer must remain vigilant about security and ensure all inputs are controlled.
