## OLUŞABİLECEK TÜM SQL İNJECTİON AÇIKLARININ FİXİ ## 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 35

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
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 FİXİ C++ ORTAMINDA

SQL Injection, veritabanına bağlanan uygulamaların karşılaştığı en yaygın güvenlik açıklarından biridir. Özellikle Metin2 gibi sunucu tabanlı oyun projelerinde, kullanıcıdan gelen verilerin kontrolsüz şekilde veritabanına gönderilmesi büyük riskler doğurabilir. Bu yazıda C++ ortamında geliştirilen Metin2 server src projelerinde oluşabilecek tüm SQL Injection açıklarının fix yöntemlerini detaylı olarak ele alacağız.

SQL Injection Nedir?
SQL Injection, saldırganların uygulamanın veritabanı sorgularını manipüle ederek yetkisiz erişim sağladığı bir güvenlik zaafiyetidir. Girdi alanları yeterince filtrelenmediğinde, saldırgan ' veya 1=1 gibi ifadelerle sorguyu bypass edebilir. Bu da veritabanında istenmeyen veri silinmesine, değişiklik yapılmasına ya da tamamen verinin çalınmasına yol açabilir.

C++ ve Metin2 Sunucu Mimarisi
Metin2 özel sunucularında genellikle auth ve game server olarak iki ana servis bulunur. Auth server, kullanıcı girişlerini; game server ise oyun içi işlemlerini yönetir. Her iki sunucuda da veritabanı işlemleri yoğun şekilde yapılır. Bu yüzden SQL injection saldırılarına karşı koruma mekanizmaları bu yapıda kritik öneme sahiptir.

SQL Injection Fix Yöntemleri C++ Ortamında

1. Prepared Statements Kullanımı
Prepared statements, SQL injection'a karşı en etkili koruma yöntemlerinden biridir. Sorgu hazırlanırken parametreler ayrılır ve daha sonra güvenli bir şekilde yerleştirilir. MySQL için örnek:

Kod:
[BR][/BR]MYSQL_STMT *stmt = mysql_stmt_init(conn);[BR][/BR]const char *query = "SELECT id FROM accounts WHERE login = ? AND password = ?";[BR][/BR]mysql_stmt_prepare(stmt, query, strlen(query));[BR][/BR]...[BR][/BR]


2. Girdi Doğrulama
Kullanıcıdan gelen verilerin belirli kurallara göre filtrelenmesi gerekir. Örneğin kullanıcı adında sadece harf ve rakamlara izin verilmeli. Regex veya manuel kontrol ile bu sağlanabilir. Bu işlem auth serverda özellikle önemlidir.

3. Escape Fonksiyonları
MySQL kütüphanesinde bulunan mysql_real_escape_string fonksiyonu ile özel karakterler kaçış karakteriyle dönüştürülür. Ancak bu yöntem prepared statements kadar güvenli değildir ve tercih edilmez.

4. Yetkilendirme ve Erişim Kontrolü
Veritabanı kullanıcı hesaplarının minimum izinlerle çalıştırılması, potansiyel zararı azaltır. Örneğin auth server için sadece account tablosuna erişimi olan bir kullanıcı oluşturulmalıdır.

5. Günlük Tutma ve İzleme
SQL sorgularının loglanması, şüpheli girişimlerin erken tespit edilmesini sağlar. Bu sayede saldırının kaynağı analiz edilebilir ve önlem alınabilir.

Metin2 Sunucularda Pratik Fix Önerileri

- Oyuncu adı, şifre gibi alanlar için mutlaka prepared statement kullanın.
- client src tarafında gönderilen verileri tekrar sunucuda kontrol edin.
- DB core dosyalarında doğrulama fonksiyonlarını merkezi olarak tanımlayın.
- Kaynak kodunuzda SQL sorgularını sabit string olarak yazmaktan kaçının.

Sonuç
SQL injection, Metin2 özel sunucularında ciddi güvenlik açıklarına neden olabilir. C++ tabanlı sunucu yazılımlarında bu açıkların önüne geçmek için prepared statements, girdi doğrulama ve doğru erişim kontrolü gibi yöntemlerin uygulanması şarttır. Bu fixleri uygulamak, hem oyuncularınızın güvenliğini hem de sunucunuzun bütünlüğünü korumak açısından kritiktir.


FIXING ALL POSSIBLE SQL INJECTION VULNERABILITIES IN C++

SQL Injection is one of the most common security vulnerabilities faced by database-connected applications. Especially in projects like Metin2 private servers, sending user-provided input directly to the database without proper validation can lead to serious risks. In this article, we will examine in detail how to fix all possible SQL injection vulnerabilities that may occur in Metin2 server src projects developed in C++ environment.

What is SQL Injection?
SQL Injection is a security flaw that allows attackers to manipulate database queries made by the application and gain unauthorized access. If input fields are not properly filtered, attackers can bypass queries with inputs such as ' OR 1=1. This could result in unwanted data deletion, modification, or even full data theft from the database.

C++ and Metin2 Server Architecture
In Metin2 private servers, there are generally two main services: auth and game server. The auth server handles user logins, while the game server manages in-game processes. Both servers perform intensive database operations, making protection mechanisms against SQL injection attacks critical in this architecture.

SQL Injection Prevention Methods in C++ Environment

1. Use of Prepared Statements
Prepared statements are among the most effective ways to prevent SQL injection. Parameters are separated when the query is prepared and then safely inserted. Example for MySQL:

Kod:
[BR][/BR]MYSQL_STMT *stmt = mysql_stmt_init(conn);[BR][/BR]const char *query = "SELECT id FROM accounts WHERE login = ? AND password = ?";[BR][/BR]mysql_stmt_prepare(stmt, query, strlen(query));[BR][/BR]...[BR][/BR]


2. Input Validation
Input received from users must be filtered according to specific rules. For example, only letters and numbers should be allowed in usernames. This can be achieved using regex or manual checks, especially important on the auth server.

3. Escape Functions
The mysql_real_escape_string function in the MySQL library converts special characters using escape sequences. However, this method is not as secure as prepared statements and is not recommended.

4. Authorization and Access Control
Running database user accounts with minimal permissions reduces potential damage. For instance, a user account used by the auth server should only have access to the account table.

5. Logging and Monitoring
Logging SQL queries helps detect suspicious attempts early. This allows for analysis of the attack source and taking preventive measures.

Practical Fixes for Metin2 Servers

- Always use prepared statements for fields like player names and passwords.
- Re-validate data sent from the client src on the server side.
- Define validation functions centrally in your DB core files.
- Avoid hardcoding SQL queries in your source code.

Conclusion
SQL injection can cause serious security vulnerabilities in Metin2 private servers. To prevent these vulnerabilities in C++ based server software, implementing methods such as prepared statements, input validation, and proper access control is essential. Applying these fixes is crucial to protect both your players' security and the integrity of your server.
 

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

Benzer konular

Geri
Üst Alt