C++] Anti-SQL Injection Koruması (1 İzleyici)

C++] Anti-SQL Injection Koruması
0
175

admin

PATRON
SİTE YETKİLİSİ
Moderator
ÜYE
Katılım
23 Eki 2022
Mesajlar
3,514
Çözümler
9
Tepkime puanı
2,145
Puanları
113
Yaş
28
Ticaret Puanı: 0 / 0 / 0
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:
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
}
 

Konuya görüntüleyenler

Benzer konular

R10dev.net'i ana ekrana ekle!
Üst