Sql İnjeckt Fix Source Kaynaklı.!

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

Admin

Metin2Lobby
Yönetici
Founder
Katılım
6 Mayıs 2022
Mesajlar
52,647
Ticaret : 1 / 0 / 0
messenger_manager.cpp: acılır
mesenger manager içi aratılır:MessengerManager::RemoveFromList
Değiştirilir:
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(companionEscaped, 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)); }

Acılır:guild_manager.cpp:
Aratılır:CGuildManager::CreateGuild
Kod:
[COLOR=#000000]std[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]unique_ptr[/COLOR][COLOR=#666600]<[/COLOR][COLOR=#660066]SQLMsg[/COLOR][COLOR=#666600]>[/COLOR][COLOR=#000000] pmsg[/COLOR][COLOR=#666600]([/COLOR][COLOR=#660066]DBManager[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]instance[/COLOR][COLOR=#666600]().[/COLOR][COLOR=#660066]DirectQuery[/COLOR][COLOR=#666600]([/COLOR][COLOR=#008800]"SELECT COUNT(*) FROM guild%s WHERE name = '%s'"[/COLOR][COLOR=#666600],[/COLOR] [COLOR=#000000]                                                                   get_table_postfix[/COLOR][COLOR=#666600](),[/COLOR][COLOR=#000000] __escape_name[/COLOR][COLOR=#666600]));[/COLOR]


Oluşturulur
Yada
Kod:
[/FONT][/COLOR][COLOR=#000000]std[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]auto_ptr[/COLOR][COLOR=#666600]<[/COLOR][COLOR=#660066]SQLMsg[/COLOR][COLOR=#666600]>[/COLOR][COLOR=#000000] pmsg[/COLOR][COLOR=#666600]([/COLOR][COLOR=#660066]DBManager[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]instance[/COLOR][COLOR=#666600]().[/COLOR][COLOR=#660066]DirectQuery[/COLOR][COLOR=#666600]([/COLOR][COLOR=#008800]"SELECT COUNT(*) FROM guild%s WHERE name = '%s'"[/COLOR][COLOR=#666600],[/COLOR] [COLOR=#000000]                get_table_postfix[/COLOR][COLOR=#666600](),[/COLOR][COLOR=#000000] gcp[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]name[/COLOR][COLOR=#666600]));[/COLOR][COLOR=#000000][FONT=Verdana]
bu olur
---
Ve Bu eklenti uzerine
Kod:
[/FONT][/COLOR][COLOR=#000088]static[/COLOR][COLOR=#000000] [/COLOR][COLOR=#000088]char[/COLOR][COLOR=#000000] __escape_name[/COLOR][COLOR=#666600][[/COLOR][COLOR=#000000]GUILD_NAME_MAX_LEN [/COLOR][COLOR=#666600]*[/COLOR][COLOR=#000000] [/COLOR][COLOR=#006666]2[/COLOR][COLOR=#000000] [/COLOR][COLOR=#666600]+[/COLOR][COLOR=#000000] [/COLOR][COLOR=#006666]1[/COLOR][COLOR=#666600]];[/COLOR] [COLOR=#000000]    [/COLOR][COLOR=#660066]DBManager[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]instance[/COLOR][COLOR=#666600]().[/COLOR][COLOR=#660066]EscapeString[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000000]__escape_name[/COLOR][COLOR=#666600],[/COLOR][COLOR=#000000] [/COLOR][COLOR=#000088]sizeof[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000000]__escape_name[/COLOR][COLOR=#666600]),[/COLOR][COLOR=#000000] [/COLOR][COLOR=#000088]static_cast[/COLOR][COLOR=#666600]<[/COLOR][COLOR=#000088]const[/COLOR][COLOR=#000000] [/COLOR][COLOR=#000088]char[/COLOR][COLOR=#000000] [/COLOR][COLOR=#666600]*>([/COLOR][COLOR=#000000]gcp[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]name[/COLOR][COLOR=#666600]),[/COLOR][COLOR=#000000] [/COLOR][COLOR=#000088]sizeof[/COLOR][COLOR=#666600]([/COLOR][COLOR=#000000]gcp[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]name[/COLOR][COLOR=#666600]));[/COLOR][COLOR=#000000][FONT=Verdana]

Aratılır
Kod:
get_table_postfix[COLOR=#666600](),[/COLOR] gcp[COLOR=#666600].[/COLOR]name

Değiştirilir
Kod:
[COLOR=#000000][FONT=Verdana]get_table_postfix[/FONT][/COLOR][COLOR=#666600][FONT=Verdana](),[/FONT][/COLOR][COLOR=#000000][FONT=Verdana] __escape_name[/FONT][/COLOR][COLOR=#000000][FONT=Verdana][COLOR=#222222][FONT=Tahoma]



Kod:
[COLOR=#000000]std[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]auto_ptr[/COLOR][COLOR=#666600]<[/COLOR][COLOR=#660066]SQLMsg[/COLOR][COLOR=#666600]>[/COLOR][COLOR=#000000] pmsg[/COLOR][COLOR=#666600]([/COLOR][COLOR=#660066]DBManager[/COLOR][COLOR=#666600]::[/COLOR][COLOR=#000000]instance[/COLOR][COLOR=#666600]().[/COLOR][COLOR=#660066]DirectQuery[/COLOR][COLOR=#666600]([/COLOR][COLOR=#008800]"SELECT COUNT(*) FROM guild%s WHERE name = '%s'"[/COLOR][COLOR=#666600], [/COLOR][COLOR=#000000]                get_table_postfix[/COLOR][COLOR=#666600](),[/COLOR][COLOR=#000000] gcp[/COLOR][COLOR=#666600].[/COLOR][COLOR=#000000]name[/COLOR][COLOR=#666600]));[/COLOR]

Sql İnjeckt Fix Source Kaynaklı

Metin2 Lobby olarak Metin2 özel sunucu geliştirme konusunda uzmanlaşmış bir platformsunuz. Bu yazıda SQL Injection açıklarının source seviyesinde nasıl düzeltileceği konusuna değineceğiz. Source bazlı çözümler, güvenlik açığı olan veritabanı sorgularını doğrudan kod seviyesinde düzelterek kalıcı bir çözüm sunar.

SQL Injection Nedir?
SQL Injection, kullanıcıdan gelen verilerin kontrolsüz bir şekilde veritabanına gönderilmesiyle ortaya çıkan ciddi bir güvenlik zaafiyetidir. Özellikle auth server ve game server gibi sistemlerde bu tür açıklar büyük riskler yaratır. Bu açıklar sayesinde saldırganlar veritabanındaki kullanıcı bilgilerine, karakter verilerine veya hatta sunucu yapılandırmalarına erişebilir.

Neden Source Tabanlı Çözüm Gerekir?[/BR]Sadece client-side önlemler almak yeterli değildir. Gerçek çözüm, C++ tabanlı server source kodlarında yapılır. Python ile yazılmış db komut dosyalarında da benzer kontroller sağlanmalıdır. Source edit yaparak, kullanıcıdan gelen tüm verileri filtrelemek ve güvenli hale getirmek mümkündür.

C++ İçinde SQL Injection Engelleme Yöntemleri
C++ tabanlı Metin2 sunucu sistemlerinde prepared statements (hazırlanmış ifadeler) kullanmak, SQL injection saldırılarını engellemenin en etkili yoludur. Örneğin, kullanıcı adı ile giriş yapılırken doğrudan sorguya kullanıcı verisi yerleştirmek yerine, parametreli sorgular kullanılır. Bu sayede kullanıcıdan gelen veri sorgunun bir parçası değil, sadece bir değer olarak işlenir.

Python DB Core Güvenliği
Python ile yazılmış db core sistemlerinde de benzer şekilde parameterized queries kullanılmalıdır. Kullanıcıdan gelen veriler, doğrudan SQL sorgusuna konumlandırılmadan önce filtrelenmelidir. Bu, hem game server hem de auth server tarafında kritik önem taşır.

Yanlış Uygulama Örneği:
SELECT * FROM accounts WHERE login=' + username + ' AND password=' + password + ' gibi doğrudan string birleştirme yapan sorgular büyük güvenlik riski taşır.

Doğru Uygulama Örneği:
SELECT * FROM accounts WHERE login=? AND password=? gibi parametreli sorgular, kullanıcı verisinin doğrudan sorguya enjekte edilmesini önler.

Martysama ve Diğer Sistemlerde Uygulamalar
Martysama gibi Metin2 kaynak kodları üzerinde çalışırken, core seviyesinde yapılan değişiklikler, tüm sistem üzerinde kalıcı etki yaratır. Game core ve auth core üzerinde yapılan düzenlemeler, sadece bir modül değil, tüm sistemi korur. Bu nedenle, source edit sırasında dikkatli ve bilinçli hareket etmek büyük önem taşır.

Kaynak Kod Düzeltmeleri İçin Öneriler
Metin2 server src üzerinde çalışırken, tüm girdi noktalarında doğrulama mekanizması kurun. Py Root ve UIScript içinde de kullanıcıdan gelen veriler kontrol edilmeli. Client src tarafında da bazı kontroller yapılabilir ancak asıl koruma, sunucu tarafında sağlanmalıdır. Compile işlemi öncesinde, tüm bu kontrollerin doğru uygulanmış olduğundan emin olun.

Sonuç
SQL Injection açıklarını tamamen kapatmak için source seviyesinde değişiklikler yapmak zorunludur. Hem C++ hem de Python tabanlı sistemlerde güvenli sorgu yapıları kurmak, sunucunuzun güvenliğini ciddi anlamda artırır. Metin2 Lobby olarak, bu tür güvenlik açıklarına karşı farkındalık yaratmak ve çözümler sunmak hedefimizdir.


Sql Injection Fix Based on Source

Metin2 Lobby is a platform specialized in Metin2 private server development. In this article, we will discuss how to fix SQL Injection vulnerabilities at the source level. Solutions based on source provide a permanent fix by directly correcting vulnerable database queries within the code.

What is SQL Injection?
SQL Injection is a serious security vulnerability that occurs when user input is sent to the database without proper validation. Such vulnerabilities create significant risks in systems like auth server and game server. Attackers can gain access to user information, character data, or even server configurations through these vulnerabilities.

Why Is a Source-Based Solution Needed?[/BR]Relying solely on client-side measures is insufficient. The real solution lies in editing the C++-based server source codes. Similar checks should also be implemented in Python-based db scripts. By performing source edit, all user inputs can be filtered and secured directly at the code level.

Methods for Preventing SQL Injection in C++
Using prepared statements in C++-based Metin2 server systems is the most effective way to prevent SQL injection attacks. For example, instead of placing user data directly into the query during login, parameterized queries are used. This ensures that user input is treated only as a value, not as part of the query itself.

Python DB Core Security
In Python-based db core systems, parameterized queries must also be used. User inputs should be filtered before being inserted directly into SQL queries. This is critical for both game server and auth server sides.

Example of Incorrect Implementation:
Queries such as SELECT * FROM accounts WHERE login=' + username + ' AND password=' + password + ' that directly concatenate strings pose a major security risk.

Example of Correct Implementation:
Parameterized queries like SELECT * FROM accounts WHERE login=? AND password=? prevent user data from being injected directly into the query.

Implementations in Martysama and Other Systems
When working with Metin2 source codes like Martysama, changes made at the core level have a lasting impact across the entire system. Modifications to game core and auth core protect not just a single module but the entire system. Therefore, it is crucial to act carefully and consciously while performing source edit.

Suggestions for Source Code Fixes
While working on Metin2 server src, implement validation mechanisms at all input points. Inputs from users must be checked in Py Root and UIScript as well. Some validations may be done on the Client src side, but the main protection must come from the server side. Before the compile process, ensure that all these controls have been properly applied.

Conclusion
To fully eliminate SQL Injection vulnerabilities, changes must be made at the source level. Implementing secure query structures in both C++ and Python-based systems significantly enhances your server's security. As Metin2 Lobby, our goal is to raise awareness and provide solutions against such security vulnerabilities.
 

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

Benzer konular

Geri
Üst Alt