Fethi Polat 1
Fethi Polat
TuZaKK 1
TuZaKK
xranzei 1
xranzei
Agresifizm 1
Agresifizm
Bvural41 1
Bvural41
Hikaye Ekle

SQL Fixleyenler Lonca Bugunu Kapatmalı...

  • Konuyu başlatan Konuyu başlatan selim990
  • Başlangıç tarihi Başlangıç tarihi
  • Cevaplar Cevaplar 11
  • Görüntüleme Görüntüleme 4K

Ayyıldız2 | 2008 TR Yapısı • 1-99 Orta Emek Destan • Oto Avsız • 10 Temmuz 21:00 HEMEN TIKLA!

Sql açığını fixlemek için girdiğiniz kodlar lonca buguna sebep olmaktadır bug aynı lonca isminden herkes açabilir bunu fixlemek için lonca kodunu hiç değiştirmenize gerek yok orjinalini kullanın sql açığı sadece messenger de mevcuttu loncada yok

guild_manager.cpp içerisinde kod satırını orjinal ile değiştirin.

Kod:
DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
	if (!gcp.master)
		return 0;

	if (!check_name(gcp.name))
	{
		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#44600;&#46300; &#51060;&#47492;&#51060; &#51201;&#54633;&#54616;&#51648; &#50506;&#49845;&#45768;&#45796;."));
		return 0;
	}

	std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
				get_table_postfix(), gcp.name));

	if (pmsg->Get()->uiNumRows > 0)
	{
		MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);

		if (!(row[0] && row[0][0] == '0'))
		{
			gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#51060;&#48120; &#44057;&#51008; &#51060;&#47492;&#51032; &#44600;&#46300;&#44032; &#51080;&#49845;&#45768;&#45796;."));
			return 0;
		}
	}
	else
	{
		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#44600;&#46300;&#47484; &#49373;&#49457;&#54624; &#49688; &#50630;&#49845;&#45768;&#45796;."));
		return 0;
	}

	// new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
	// other game server calls CGuildManager::LoadGuild to load guild.
	CGuild * pg = M2_NEW CGuild(gcp);
	m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
	return pg->GetID();
}

Bugtan ss
3399023_resim1.png
 
Moderatör tarafında düzenlendi:

En Çok Reaksiyon Alan Mesajlar

Sql açığını fixlemek için girdiğiniz kodlar lonca buguna sebep olmaktadır bug aynı lonca isminden herkes açabilir bunu fixlemek için lonca kodunu hiç değiştirmenize gerek yok orjinalini kullanın sql açığı sadece messenger de mevcuttu loncada yok

guild_manager.cpp içerisinde kod satırını orjinal ile değiştirin.

Kod:
DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
	if (!gcp.master)
		return 0;

	if (!check_name(gcp.name))
	{
		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#44600;&#46300; &#51060;&#47492;&#51060; &#51201;&#54633;&#54616;&#51648; &#50506;&#49845;&#45768;&#45796;."));
		return 0;
	}

	std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
				get_table_postfix(), gcp.name));

	if (pmsg->Get()->uiNumRows > 0)
	{
		MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);

		if (!(row[0] && row[0][0] == '0'))
		{
			gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#51060;&#48120; &#44057;&#51008; &#51060;&#47492;&#51032; &#44600;&#46300;&#44032; &#51080;&#49845;&#45768;&#45796;."));
			return 0;
		}
	}
	else
	{
		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#44600;&#46300;&#47484; &#49373;&#49457;&#54624; &#49688; &#50630;&#49845;&#45768;&#45796;."));
		return 0;
	}

	// new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
	// other game server calls CGuildManager::LoadGuild to load guild.
	CGuild * pg = M2_NEW CGuild(gcp);
	m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
	return pg->GetID();
}

Bugtan ss
Öğeyi görmek için üye olmalısınız.


ALTER TABLE `guild`
ADD UNIQUE INDEX `name` (`name`) USING BTREE ;

İle orjinal kodları değiştirmeden buna engel olabilirsiniz. Kullanıcı tarafından gelen dataların EscapeString ile sanitize edilmesi gerekmektedir ve çok büyük sorunlara sebep olmaktadır açık yoktur diye kaldırmanız tehlike arz edebilir.

Bu tip veritabanı işlemlerinin db çekirdeğine taşınması gerekiyor Ymir geliştiricilerinin zamanında kısa sürede maksimum verim kafasında bazı şeyleri planlamadan ve denemeden geliştirdiğiniz örneğidir bu.
Sql açığını fixlemek için girdiğiniz kodlar lonca buguna sebep olmaktadır bug aynı lonca isminden herkes açabilir bunu fixlemek için lonca kodunu hiç değiştirmenize gerek yok orjinalini kullanın sql açığı sadece messenger de mevcuttu loncada yok

guild_manager.cpp içerisinde kod satırını orjinal ile değiştirin.

Kod:
DWORD CGuildManager::CreateGuild(TGuildCreateParameter& gcp)
{
	if (!gcp.master)
		return 0;

	if (!check_name(gcp.name))
	{
		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#44600;&#46300; &#51060;&#47492;&#51060; &#51201;&#54633;&#54616;&#51648; &#50506;&#49845;&#45768;&#45796;."));
		return 0;
	}

	std::auto_ptr<SQLMsg> pmsg(DBManager::instance().DirectQuery("SELECT COUNT(*) FROM guild%s WHERE name = '%s'",
				get_table_postfix(), gcp.name));

	if (pmsg->Get()->uiNumRows > 0)
	{
		MYSQL_ROW row = mysql_fetch_row(pmsg->Get()->pSQLResult);

		if (!(row[0] && row[0][0] == '0'))
		{
			gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#51060;&#48120; &#44057;&#51008; &#51060;&#47492;&#51032; &#44600;&#46300;&#44032; &#51080;&#49845;&#45768;&#45796;."));
			return 0;
		}
	}
	else
	{
		gcp.master->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<&#44600;&#46300;> &#44600;&#46300;&#47484; &#49373;&#49457;&#54624; &#49688; &#50630;&#49845;&#45768;&#45796;."));
		return 0;
	}

	// new CGuild(gcp) queries guild tables and tell dbcache to notice other game servers.
	// other game server calls CGuildManager::LoadGuild to load guild.
	CGuild * pg = M2_NEW CGuild(gcp);
	m_mapGuild.insert(std::make_pair(pg->GetID(), pg));
	return pg->GetID();
}

Bugtan ss
kNsAh.png


ALTER TABLE `guild`
ADD UNIQUE INDEX `name` (`name`) USING BTREE ;

İle orjinal kodları değiştirmeden buna engel olabilirsiniz. Kullanıcı tarafından gelen dataların EscapeString ile sanitize edilmesi gerekmektedir ve çok büyük sorunlara sebep olmaktadır açık yoktur diye kaldırmanız tehlike arz edebilir.

Bu tip veritabanı işlemlerinin db çekirdeğine taşınması gerekiyor Ymir geliştiricilerinin zamanında kısa sürede maksimum verim kafasında bazı şeyleri planlamadan ve denemeden geliştirdiğiniz örneğidir bu.
 
Buda olabilir name değerini unique yapmissin yani tabanda bundan 1 tane olacak baska olmayacak bunu yapinca evet veritabani ayni ismi birdaha yazmaz fakat oyun içerisinde yinede lonca acildi mesajını verebilir bunu bir test etmek gerekiyor.
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst