- 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.
log.cpp Dosyasını Düzenleme
Bu dosyadaki LogManager::Query fonksiyonunu bulunuz
Değiştiriyoruz:
db.cpp dosyasını açıp şunu arıyoruz:
Değiştiriyoruz:
Yine db.cpp dosyasını açıp şunu arıyoruz:
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
}