Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Плагины (от пользователей) » SteamID Protect (Плагин защиты SteamID с веб-интерфейсом)
SteamID Protect
G-Style Дата: Четверг, 30.08.2012, 22:45:53 | Сообщение # 1
Сообщений: 1
Репутация: 0 [ +/- ]
Я доделал плагин от SemJeF-a, теперь в нём есть:

-md5() хеширование повсюду, даже в сравнениях
-Защита от MySQL инъекций на сервере и веб панели
-Регистрация SteamID через сайт
-Возможность восстановления забытого пароля посредством "секретной фразы"
-RegEx в Веб части для проверки SteamID
-Файлы переводов в Web-части
-Удобный конфиг для Web-части

Веб часть запилена на коленке, и имеет кучу не завершенных идей.

В планах: полный рерайт кода веб части, ввиду того, что он пилился на коленке.
Исходник плагина давать не буду в виду некоторых нюансов безопасности. При этом я заявляю, что плагин ничего не натворит на Вашем сервере. Если не верите - не устанавливайте.

Веб демка: http://topteam-gaming.ru/forgot/
Демка на сервере: [v34] 217.28.219.226:28042

Прикрепления: steamid_securit.zip(59.9 Kb)


Сообщение отредактировал G-Style - Четверг, 30.08.2012, 22:49:23
 
_wS_ Дата: Четверг, 30.08.2012, 23:44:09 | Сообщение # 2
Мне кажется описание неполное. В addons/sourcemod/configs/databases.cfg же нужно создавать секцию "Protect" с данными для подключения (mysql, если хотят использовать web-часть).

Quote (G-Style)
Исходник плагина давать не буду в виду некоторых нюансов безопасности

Например?

Quote (G-Style)
Защита от MySQL инъекций на сервере и веб панели

mysql_real_escape_string? Если только оно, то мне кажется это сильно громко звучит, хоть я и не силен в php.

Quote (G-Style)
Регистрация SteamID через сайт

А что будет, если 1 человек зарегит 1 млн чужих стимов? Хотя, эта проблема и была вроде у SemJeF-a.
 
М9сНиК Дата: Пятница, 31.08.2012, 11:19:42 | Сообщение # 3
Сообщений: 61
Репутация: 0 [ +/- ]
А как на счёт защиты от url инъекции?
 
Beelzebub Дата: Воскресенье, 02.09.2012, 04:35:08 | Сообщение # 4
Сообщений: 202
Репутация: 13 [ +/- ]
G-Style, легче вскрыть твой smx и посмотреть что внутри :)). Так что кидай SP.

Добавлено (02.09.2012, 04:35:08)
---------------------------------------------
Вот собственно твой smx :D

Code
new PlVers:__version = 5;
new Float:NULL_VECTOR[3];
new String:NULL_STRING[1];
new Extension:__ext_core = 64;
new MaxClients;
new Extension:__ext_sdktools = 180;
new Extension:__ext_cstrike = 224;
new String:xbox_autothrottleValue[256][64];
new Handle:sprotect_site;
new Handle:g_hDb;
public Plugin:myinfo =
{
  name = "SteamID Protect System",
  description = "Protect SteamID from hacking",
  author = "igodsewer and S. Yakupov | Original plugin by SemJeF",
  version = "1.0b",
  url = "http://alliedmods.net"
};
public __ext_core_SetNTVOptional()
{
  MarkNativeAsOptional("GetFeatureStatus");
  MarkNativeAsOptional("RequireFeature");
  MarkNativeAsOptional("AddCommandListener");
  MarkNativeAsOptional("RemoveCommandListener");
  VerifyCoreVersion();
  return 0;
}

bool:StrEqual(String:str1[], String:str2[], bool:caseSensitive)
{
  return strcmp(str1, str2, caseSensitive) == 0;
}

public OnPluginStart()
{
  RegConsoleCmd("secure", Command_Protect, "", 0);
  CreateConVar("sm_sprotect_version", "1.0", "", 0, false, 0, false, 0);
  sprotect_site = CreateConVar("sm_sprotect_site", "http://mysite.net/", "Link to password retrieve script", 262144, false, 0, false, 0);
  db_setupDatabase();
  AutoExecConfig(true, "plugin_protect", "sourcemod");
  return 0;
}

public Action:Command_Protect(client, args)
{
  if (args != 2)
  {
   PrintToChat(client, "%s Errors in input! Example: /secure \"password\" \"secret phrase\"", "[SPS]");
   return Action:3;
  }
  decl String:szSteamId[32];
  GetClientAuthString(client, szSteamId, 32);
  decl String:query[256];
  Format(query, 255, "SELECT pass FROM protect WHERE steamid ='%s'", szSteamId);
  new Handle:hquery = SQL_Query(g_hDb, query, -1);
  new var1;
  if (hquery)
  {
   PrintToChat(client, "%s You are already registered!", "[SPS]");
   return Action:3;
  }
  CloseHandle(hquery);
  decl String:newpass[256];
  decl String:kod[256];
  decl String:Safenewpass5[256];
  decl String:Safekod5[256];
  GetCmdArg(1, newpass, 255);
  GetCmdArg(2, kod, 255);
  decl String:Safekod[512];
  SQL_EscapeString(g_hDb, kod, Safekod, 511, 0);
  decl String:Safenewpass[512];
  SQL_EscapeString(g_hDb, newpass, Safenewpass, 511, 0);
  MD5String(Safenewpass, Safenewpass5, 255);
  MD5String(Safekod, Safekod5, 255);
  Format(query, 255, "INSERT INTO protect (steamid, pass, kod) VALUES('%s', '%s', '%s');", szSteamId, Safenewpass5, Safekod5);
  SQL_TQuery(g_hDb, SQL_CheckCallback, query, any:0, DBPriority:1);
  decl String:SiteStr[256];
  GetConVarString(sprotect_site, SiteStr, 256);
  PrintToChat(client, "%s Sucessful! Password: %s", "[SPS]", newpass, kod);
  PrintToChat(client, "%s Don't forget to type in console xbox_autothrottle \"%s\" ", "[SPS]", newpass);
  PrintToChat(client, "%s Have Fun! Password Recover Link: %s", "[SPS]", SiteStr);
  return Action:3;
}

public db_setupDatabase()
{
  decl String:szError[256];
  g_hDb = SQL_Connect("Protect", false, szError, 255);
  if (g_hDb)
  {
   db_createTables();
   return 0;
  }
  LogError("[SPS] Unable to connect to database (%s)", szError);
  PrintToServer("[SPS] Unable to connect to database");
  return 0;
}

public db_createTables()
{
  SQL_LockDatabase(g_hDb);
  SQL_FastQuery(g_hDb, "CREATE TABLE IF NOT EXISTS protect (steamid VARCHAR(32) PRIMARY KEY, pass VARCHAR(128), kod VARCHAR(128));", -1);
  SQL_UnlockDatabase(g_hDb);
  return 0;
}

public SQL_CheckCallback(Handle:owner, Handle:hndl, String:error[], data)
{
  if (!hndl)
  {
   LogError("%s Error inserting into database (%s)", "[SPS]", error);
  }
  return 0;
}

public OnClientPutInServer(client)
{
  QueryClientConVar(client, "xbox_autothrottle", ClientConVar, client);
  return 0;
}

public ClientConVar(QueryCookie:cookie, client, ConVarQueryResult:result, String:cvarName[], String:cvarValue[])
{
  strcopy(xbox_autothrottleValue[client][0][0], 255, cvarValue);
  db_selectPlayer(client);
  return 0;
}

public db_selectPlayer(client)
{
  decl String:szQuery[256];
  decl String:szSteamId[32];
  GetClientAuthString(client, szSteamId, 32);
  Format(szQuery, 255, "SELECT pass FROM protect WHERE steamid ='%s'", szSteamId);
  SQL_TQuery(g_hDb, SQL_SelectPlayerCallback, szQuery, client, DBPriority:1);
  return 0;
}

public SQL_SelectPlayerCallback(Handle:owner, Handle:hndl, String:error[], data)
{
  if (hndl)
  {
   decl String:sValue[256];
   new client = data;
   decl String:xbox_autothrottleValue5[256];
   new var1;
   if (SQL_HasResultSet(hndl))
   {
    SQL_FetchString(hndl, 0, sValue, 256, 0);
    MD5String(xbox_autothrottleValue[client][0][0], xbox_autothrottleValue5[client], 256);
    if (StrEqual(sValue, xbox_autothrottleValue5[client], false))
    {
     PrintToChat(client, "%s sucessfully authorised! GL & HF", "[SPS]");
    }
    else
    {
     KickHim(client);
    }
   }
   return 0;
  }
  else
  {
   LogError("[%s Error loading player (%s)", "[SPS]", error);
  }
  return 0;
}

KickHim(client)
{
  decl String:SiteStr[256];
  GetConVarString(sprotect_site, SiteStr, 256);
  KickClient(client, "%s This SteamID is secured! If you forgot your pwd, follow this link: %s", "[SPS]", SiteStr);
  return 0;
}

MD5String(String:str[], String:output[], maxlen)
{
  decl x[2];
  decl buf[4];
  decl input[64];
  new i = 0;
  new ii = 0;
  new len = strlen(str);
  x[1] = 0;
  x[0] = 0;
  buf[0] = 1732584193;
  buf[1] = -271733879;
  buf[2] = -1732584194;
  buf[3] = 271733878;
  decl in[16];
  in[14] = x[0];
  in[15] = x[1];
  new mdi = x[0] >> 3 & 63;
  if (x[0] > len << 3 + x[0])
  {
   x[1] += 1;
  }
  x[0] = len << 3 + x[0];
  new var2 = x[1];
  var2 = len >> 29 + var2;
  new c = 0;
  len--;
  while (len)
  {
   input[mdi] = str[c];
   mdi += 1;
   c += 1;
   if (mdi == 64)
   {
    i = 0;
    ii = 0;
    while (i < 16)
    {
     in[i] = input[ii] | input[ii + 1] << 8 | input[ii + 2] << 16 | input[ii + 3] << 24;
     i++;
     ii += 4;
    }
    MD5Transform(buf, in);
    mdi = 0;
   }
  }
  decl padding[64];
  decl inx[16];
  inx[14] = x[0];
  inx[15] = x[1];
  mdi = x[0] >> 3 & 63;
  new var1;
  if (mdi < 56)
  {
   var1 = 56 - mdi;
  }
  else
  {
   var1 = 120 - mdi;
  }
  len = var1;
  in[14] = x[0];
  in[15] = x[1];
  mdi = x[0] >> 3 & 63;
  if (x[0] > len << 3 + x[0])
  {
   x[1] += 1;
  }
  x[0] = len << 3 + x[0];
  new var3 = x[1];
  var3 = len >> 29 + var3;
  c = 0;
  len--;
  while (len)
  {
   input[mdi] = padding[c];
   mdi += 1;
   c += 1;
   if (mdi == 64)
   {
    i = 0;
    ii = 0;
    while (i < 16)
    {
     in[i] = input[ii] | input[ii + 1] << 8 | input[ii + 2] << 16 | input[ii + 3] << 24;
     i++;
     ii += 4;
    }
    MD5Transform(buf, in);
    mdi = 0;
   }
  }
  i = 0;
  ii = 0;
  while (i < 14)
  {
   inx[i] = input[ii] | input[ii + 1] << 8 | input[ii + 2] << 16 | input[ii + 3] << 24;
   i++;
   ii += 4;
  }
  MD5Transform(buf, inx);
  decl digest[16];
  i = 0;
  ii = 0;
  while (i < 4)
  {
   digest[ii] = buf[i] & 255;
   digest[ii + 1] = buf[i] >> 8 & 255;
   digest[ii + 2] = buf[i] >> 16 & 255;
   digest[ii + 3] = buf[i] >> 24 & 255;
   i++;
   ii += 4;
  }
  FormatEx(output, maxlen, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", digest, digest[1], digest[2], digest[3], digest[4], digest[5], digest[6], digest[7], digest[8], digest[9], digest[10], digest[11], digest[12], digest[13], digest[14], digest[15]);
  return 0;
}

MD5Transform_FF(&a, &b, &c, &d, x, s, ac)
{
  a = d & ~b | c & b + x + ac + a;
  a = a >> 32 - s | a << s;
  a = b + a;
  return 0;
}

MD5Transform_GG(&a, &b, &c, &d, x, s, ac)
{
  a = ~d & c | d & b + x + ac + a;
  a = a >> 32 - s | a << s;
  a = b + a;
  return 0;
}

MD5Transform_HH(&a, &b, &c, &d, x, s, ac)
{
  a = d ^ c ^ b + x + ac + a;
  a = a >> 32 - s | a << s;
  a = b + a;
  return 0;
}

MD5Transform_II(&a, &b, &c, &d, x, s, ac)
{
  a = ~d | b ^ c + x + ac + a;
  a = a >> 32 - s | a << s;
  a = b + a;
  return 0;
}

MD5Transform(buf[], in[])
{
  new a = buf[0];
  new b = buf[1];
  new c = buf[2];
  new d = buf[3];
  MD5Transform_FF(a, b, c, d, in[0], 7, -680876936);
  MD5Transform_FF(d, a, b, c, in[1], 12, -389564586);
  MD5Transform_FF(c, d, a, b, in[2], 17, 606105819);
  MD5Transform_FF(b, c, d, a, in[3], 22, -1044525330);
  MD5Transform_FF(a, b, c, d, in[4], 7, -176418897);
  MD5Transform_FF(d, a, b, c, in[5], 12, 1200080426);
  MD5Transform_FF(c, d, a, b, in[6], 17, -1473231341);
  MD5Transform_FF(b, c, d, a, in[7], 22, -45705983);
  MD5Transform_FF(a, b, c, d, in[8], 7, 1770035416);
  MD5Transform_FF(d, a, b, c, in[9], 12, -1958414417);
  MD5Transform_FF(c, d, a, b, in[10], 17, -42063);
  MD5Transform_FF(b, c, d, a, in[11], 22, -1990404162);
  MD5Transform_FF(a, b, c, d, in[12], 7, 1804603682);
  MD5Transform_FF(d, a, b, c, in[13], 12, -40341101);
  MD5Transform_FF(c, d, a, b, in[14], 17, -1502002290);
  MD5Transform_FF(b, c, d, a, in[15], 22, 1236535329);
  MD5Transform_GG(a, b, c, d, in[1], 5, -165796510);
  MD5Transform_GG(d, a, b, c, in[6], 9, -1069501632);
  MD5Transform_GG(c, d, a, b, in[11], 14, 643717713);
  MD5Transform_GG(b, c, d, a, in[0], 20, -373897302);
  MD5Transform_GG(a, b, c, d, in[5], 5, -701558691);
  MD5Transform_GG(d, a, b, c, in[10], 9, 38016083);
  MD5Transform_GG(c, d, a, b, in[15], 14, -660478335);
  MD5Transform_GG(b, c, d, a, in[4], 20, -405537848);
  MD5Transform_GG(a, b, c, d, in[9], 5, 568446438);
  MD5Transform_GG(d, a, b, c, in[14], 9, -1019803690);
  MD5Transform_GG(c, d, a, b, in[3], 14, -187363961);
  MD5Transform_GG(b, c, d, a, in[8], 20, 1163531501);
  MD5Transform_GG(a, b, c, d, in[13], 5, -1444681467);
  MD5Transform_GG(d, a, b, c, in[2], 9, -51403784);
  MD5Transform_GG(c, d, a, b, in[7], 14, 1735328473);
  MD5Transform_GG(b, c, d, a, in[12], 20, -1926607734);
  MD5Transform_HH(a, b, c, d, in[5], 4, -378558);
  MD5Transform_HH(d, a, b, c, in[8], 11, -2022574463);
  MD5Transform_HH(c, d, a, b, in[11], 16, 1839030562);
  MD5Transform_HH(b, c, d, a, in[14], 23, -35309556);
  MD5Transform_HH(a, b, c, d, in[1], 4, -1530992060);
  MD5Transform_HH(d, a, b, c, in[4], 11, 1272893353);
  MD5Transform_HH(c, d, a, b, in[7], 16, -155497632);
  MD5Transform_HH(b, c, d, a, in[10], 23, -1094730640);
  MD5Transform_HH(a, b, c, d, in[13], 4, 681279174);
  MD5Transform_HH(d, a, b, c, in[0], 11, -358537222);
  MD5Transform_HH(c, d, a, b, in[3], 16, -722521979);
  MD5Transform_HH(b, c, d, a, in[6], 23, 76029189);
  MD5Transform_HH(a, b, c, d, in[9], 4, -640364487);
  MD5Transform_HH(d, a, b, c, in[12], 11, -421815835);
  MD5Transform_HH(c, d, a, b, in[15], 16, 530742520);
  MD5Transform_HH(b, c, d, a, in[2], 23, -995338651);
  MD5Transform_II(a, b, c, d, in[0], 6, -198630844);
  MD5Transform_II(d, a, b, c, in[7], 10, 1126891415);
  MD5Transform_II(c, d, a, b, in[14], 15, -1416354905);
  MD5Transform_II(b, c, d, a, in[5], 21, -57434055);
  MD5Transform_II(a, b, c, d, in[12], 6, 1700485571);
  MD5Transform_II(d, a, b, c, in[3], 10, -1894986606);
  MD5Transform_II(c, d, a, b, in[10], 15, -1051523);
  MD5Transform_II(b, c, d, a, in[1], 21, -2054922799);
  MD5Transform_II(a, b, c, d, in[8], 6, 1873313359);
  MD5Transform_II(d, a, b, c, in[15], 10, -30611744);
  MD5Transform_II(c, d, a, b, in[6], 15, -1560198380);
  MD5Transform_II(b, c, d, a, in[13], 21, 1309151649);
  MD5Transform_II(a, b, c, d, in[4], 6, -145523070);
  MD5Transform_II(d, a, b, c, in[11], 10, -1120210379);
  MD5Transform_II(c, d, a, b, in[2], 15, 718787259);
  MD5Transform_II(b, c, d, a, in[9], 21, -343485551);
  new var1 = buf;
  var1[0] = var1[0] + a;
  buf[1] += b;
  buf[2] += c;
  buf[3] += d;
  return 0;
}
 
SemJef Дата: Воскресенье, 02.09.2012, 18:01:38 | Сообщение # 5
Сообщений: 3
Репутация: 5 [ +/- ]
Quote (_wS_)
А что будет, если 1 человек зарегит 1 млн чужих стимов? Хотя, эта проблема и была вроде у SemJeF-a.

Да, именно поэтому в итоге забросил, этот плагин скорее нужно админам, есть много аналогов, но раньше они были платными.
 
September^^ Дата: Вторник, 18.09.2012, 22:54:03 | Сообщение # 6
Сообщений: 15
Репутация: 0 [ +/- ]
Выложи исходник. Или так не айс...

Добавлено (18.09.2012, 22:54:03)
---------------------------------------------
хех http://forums.alliedmods.net/showthread.php?t=191402

 
Форум » SourceMod >> CS:Source >> CSGO » Плагины (от пользователей) » SteamID Protect (Плагин защиты SteamID с веб-интерфейсом)
  • Страница 1 из 1
  • 1
Поиск: