Offline Shop SQL Injection Fix

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
/usr/src/src/server/game/src Kısmına girilir
char.cpp açılır bulunur:

Kod:
char szQuery2[512]; snprintf(szQuery2,sizeof(szQuery2),"INSERT INTO %soffline_shop_npc(owner_id, sign, name, time, x, y, z, mapIndex, channel) VALUES(%u, '%s', '%s', %d, %ld, %ld, %ld, %ld, %d)", get_table_postfix(),GetPlayerID(), c_pszSign,GetName(), iTime,GetX(),GetY(),GetZ(),GetMapIndex(), g_bChannel); DBManager::Instance().DirectQuery(szQuery2);

Fonksiyon değiştirilir:
Kod:
char szSign2[SHOP_SIGN_MAX_LEN+1]; DBManager::instance().EscapeString(szSign2,sizeof( szSign2), c_pszSign, strlen(c_pszSign)); char szQuery2[512]; snprintf(szQuery2,sizeof(szQuery2),"INSERT INTO %soffline_shop_npc(owner_id, sign, name, time, x, y, z, mapIndex, channel) VALUES(%u, '%s', '%s', %d, %ld, %ld, %ld, %ld, %d)", get_table_postfix(),GetPlayerID(), szSign2,GetName(), iTime,GetX(),GetY(),GetZ(),GetMapIndex(), g_bChannel); DBManager::Instance().DirectQuery(szQuery2);


Offline Shop SQL Injection Fix

Metin2 özel sunucularında güvenlik en kritik konulardan biridir. Özellikle kullanıcıların verilerinin korunması ve sunucu güvenliğinin sağlanması açısından SQL Injection açıkları büyük risk taşır. Bu yazıda, Offline Shop modülünde meydana gelen olası SQL Injection açıklarını nasıl düzelteceğimizi detaylıca ele alacağız. Bu modül, oyuncuların offline durumdayken eşyalarını satın alıp satabilmesini sağlayan bir sistemdir. Ancak doğru şekilde kodlanmazsa ciddi güvenlik açıklarına neden olabilir.

SQL Injection Nedir?

SQL Injection, saldırganların veritabanına doğrudan erişim sağlamak amacıyla kötü niyetli SQL komutları yerleştirmesine dayanan bir siber saldırı türüdür. Özellikle kullanıcıdan gelen verilerin kontrolsüz kullanılması bu tür açıklara yol açabilir. Metin2 özel sunucularında C++ tabanlı server-side işlemler sırasında kullanıcıdan gelen verilerin filtrelenmemesi büyük risk oluşturur.

Offline Shop Modülünde Olası Açıklar

Offline Shop sistemi, genellikle Python veya C++ ile geliştirilir. Veritabanına yapılan işlemlerde kullanıcıdan gelen verilerin doğrudan sorguya eklenmesi, SQL Injection zaafiyetine sebep olabilir. Örneğin, bir oyuncu item adı veya fiyat gibi alanlara özel karakterler girerek veritabanında istenmeyen sorgular çalıştırmayı deneyebilir.

Fix Uygulamaları

Py Root veya Game Server tarafında yapılan işlemlerde, kullanıcıdan gelen verilerin sanitize edilmesi yani temizlenmesi gereklidir. Özellikle MySQL veya DB Core kullanılırken prepared statements kullanılmalıdır. Bu sayede kullanıcıdan gelen veriler doğrudan sorguya değil, önceden tanımlanmış parametreler üzerinden gönderilir. Böylece injection saldırısı engellenmiş olur.

Python Tarafında Örnek Fix

Py Root üzerinde çalışan bir Offline Shop sisteminde, kullanıcı verileriyle işlem yapılırken şu yapı kullanılmalıdır:

Kod:
[BR][/BR]cursor.execute('SELECT * FROM items WHERE owner_id = %s AND name = %s', (owner_id, item_name))[BR][/BR]


Bu yapı sayesinde kullanıcıdan gelen veriler doğrudan sorguya yerleştirilmez, dolayısıyla SQL Injection saldırısı mümkün olmaz.

C++ Tarafında Örnek Fix

Metin2 server src tarafında, genellikle game core içinde C++ ile yazılmış sorgular bulunur. Burada da kullanıcıdan gelen verilerin sanitize edilmesi gerekir. Örneğin, bir fonksiyon içinde item adı veya fiyat gibi değerler doğrudan sorguya ekleniyorsa, bunun önüne geçmek için özel karakterlerin filtrelenmesi gerekir. Core seviyesinde SQL Injection fix için string fonksiyonları kullanarak kullanıcı girdilerini temizlemek önemlidir.

Sunucu Güvenliği İçin Ekstra Adımlar

Metin2Dev süreçlerinde güvenlik her zaman öncelikli olmalıdır. Sunucu kodlarında sadece offline shop değil, tüm modüllerde kullanıcıdan gelen verilerin kontrol edilmesi gerekir. Özellikle auth ve channel sistemlerinde de benzer kontroller yapılmalıdır. Ayrıca loglama işlemleri sayesinde olası saldırılar daha erken tespit edilebilir.

Sonuç

Offline Shop modülünde SQL Injection açıklarını önlemek için kullanıcı verilerini doğrudan sorguya göndermekten kaçınmalı ve her zaman filtreleme işlemleri uygulanmalıdır. Hem Python hem de C++ taraflarında bu kontrollerin yapılması sunucu güvenliği açısından hayati öneme sahiptir. Metin2 Lobby olarak bu tür açıkların önlenmesi için sürekli gelişmeler yapılıyor ve toplulukla paylaşılıyor.


Offline Shop SQL Injection Fix

Metin2 private servers face significant security challenges, especially regarding user data protection and overall server safety. SQL Injection vulnerabilities pose a major threat in this context. In this article, we will detail how to fix potential SQL Injection flaws within the Offline Shop module. This module allows players to buy and sell items while being offline, but improper coding can lead to serious security loopholes.

What Is SQL Injection?

SQL Injection is a type of cyberattack where attackers insert malicious SQL commands into input fields to gain unauthorized access to databases. When user inputs are not properly validated or sanitized, such vulnerabilities emerge. In Metin2 private servers, uncontrolled use of user inputs in C++-based server operations may cause critical issues.

Potential Vulnerabilities in Offline Shop Module

The Offline Shop system is typically developed using Python or C++. Direct insertion of user inputs into database queries without validation may result in SQL Injection. For example, if players insert special characters into fields like item names or prices, they might attempt to execute unintended database commands.

Fix Implementation

In Py Root or Game Server operations, sanitizing user inputs is essential. When working with MySQL or DB Core, using prepared statements is crucial. This method ensures that user inputs are treated as parameters rather than direct query components, effectively preventing injection attacks.

Example Fix in Python

Within a Offline Shop system operating on Py Root, always use parameterized queries like the following:

Kod:
[BR][/BR]cursor.execute('SELECT * FROM items WHERE owner_id = %s AND name = %s', (owner_id, item_name))[BR][/BR]


This approach prevents direct insertion of user data into the query, thus blocking SQL Injection attempts.

Example Fix in C++

Within the Metin2 server src, particularly in the game core, C++ queries often involve user inputs. To avoid direct insertion of user-provided values, filtering mechanisms must be implemented. At the core level, cleaning user inputs using string functions helps prevent SQL Injection vulnerabilities.

Additional Security Steps for Servers

In Metin2Dev processes, security should always be a priority. Validation of user inputs must be applied across all modules, not just the offline shop. Similar checks are necessary in auth and channel systems as well. Logging mechanisms can also help detect potential attacks early.

Conclusion

To prevent SQL Injection in the Offline Shop module, never directly pass user inputs into queries. Always implement filtering and validation. Applying these measures in both Python and C++ environments is vital for server security. At Metin2 Lobby, continuous efforts are made to address such vulnerabilities and share solutions with the community.​
 

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

Benzer konular

Geri
Üst Alt