Neler yeni
XenForo Bannerlar
Modern AdBlock Uyarısı

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Kod C++] Anti-SQL Injection Koruması

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
3,261
Tepkime puanı
4,780
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut
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.

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, ...)

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
}
 

Benzer konular

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar