Narutimmy Posted September 21, 2015 Share Posted September 21, 2015 Hola vengo con un problema urgente que esta creando muchos problemas en el servidor, hace unos meses instale este sistema de grupos muy como ya que permite dar diferentes permisos a tus miembros, el problema es que ahi 1 usuario o mas no lose que de alguna manera se Mete a los clanes sin permiso sin invitacion ni nada, por si fuera poco Expulsa a todos los demas miembros incluidos al lider y demas. El usuario se crea una cuenta con el name "Moderator" para que los usuarios crean que es alguien del staff pero no. El sistema es este: https://community.multitheftauto.com/ind ... ls&id=8291 Server: ------------------------------------------------------------------------------------ -- PROJECT: N/A -- RIGHTS: All rights reserved by developers -- FILE: groupSystem/group.slua -- DEVELOPER: Sebbe (Smart) ------------------------------------------------------------------------------------ local groupTable = {} local log = true -- Set this to false if you don't want group stuff to be logged in your server.log local debugInfo = true -- Set this to false if you don't want to see see group logs in your debug mode. local GAC = {} -- index = account (string), [1] = group name, [2] = rank, [3] = warning level, [4] = date Joined, [5] = last time online (Not Available) local users = {} local myGang = {} local char = "[^0-9a-zA-Z_]" local rankCache = {} local db = dbConnect("sqlite", "/database.db") dbExec(db, "CREATE TABLE IF NOT EXISTS groupmember (account TEXT, groupName TEXT, rank TEXT, warningLvl TEXT, joined TEXT, lastTime TEXT)") dbExec(db, "CREATE TABLE IF NOT EXISTS groups (name TEXT, leader TEXT, message TEXT, chatcolor TEXT, notecolor TEXT, date TEXT, turfcolor TEXT, cashflow TEXT)") dbExec(db, "CREATE TABLE IF NOT EXISTS groupRanks (groupName TEXT, name TEXT, permissions TEXT)") --Some misc functions _outputDebugString = outputDebugString function outputDebugString(string) if (debugInfo) then _outputDebugString(string) end end function getTime() local time = getRealTime() local date = string.format("%02d/%02d/%02d", time.monthday, (time.month+1), (time.year-100) ) local time = string.format("%02d:%02d", time.hour, time.minute) return date, time end MTAoutput = outputChatBox function outputChatBox(message, player, r, g, b, bool) if (isElement(message) and getElementType(message) == "player") then MTAoutput(player, message, r, g, b, bool) else MTAoutput(message, player, r, g, b, bool) end end function groupLog(group, message) if (log) then outputServerLog("GROUP: "..group.." - "..message) end if (debugInfo) then outputDebugString("GROUP: "..group.." - "..message) end end --Lets start local permToTable = { [1] = "invite", [2] = "promote", [3] = "demote", [4] = "kick", [5] = "warn", [6] = "delete", [7] = "deposit", [8] = "withdraw", [9] = "editInfo", [10] = "viewLog", [11] = "viewBlacklist", [12] = "addBlaclist", [13] = "changeTurfColor", [14] = "modifyAlliance", [15] = "modifyRanks", [16] = "withDrawMoney", } function account(plr) if (plr and isElement(plr)) then return getAccountName(getPlayerAccount(plr)) end end function loadGroupRanks(query) local the_table = dbPoll(query, 0) if (the_table) then for ind, data in pairs(the_table) do if (not rankCache[data.groupName]) then rankCache[data.groupName] = {} end if (not rankCache[data.groupName][data.name]) then rankCache[data.groupName][data.name] = {} end local JSONtable = fromJSON(data.permissions) for ind, value in pairs(JSONtable) do if (value and ind) then rankCache[data.groupName][data.name][ind] = true end end end end end dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks") function loadGroupStuff(query) local g_table = dbPoll(query, 0) if (not g_table) then return end for ind, data in ipairs(g_table) do groupTable[data.name] = {data.leader, data.message, data.chatcolor, data.notecolor, data.date, data.turfcolor, data.cashflow} end end dbQuery(loadGroupStuff, db, "SELECT * FROM groups") function loadClientGroup(query) local g_table = dbPoll(query, 0) if (not g_table) then return end for ind, data in ipairs(g_table) do if (getAccount(data.account)) then local player = getAccountPlayer(getAccount(data.account)) users[data.groupName] = {} table.insert(users[data.groupName], data.account) if (player) then setElementData(player, "Group", data.groupName) myGang[player] = data.groupName end GAC[data.account] = {data.groupName, data.rank, data.warningLvl, data.joined, data.lastTime or 0} end end end dbQuery(loadClientGroup, db, "SELECT * FROM groupmember") function addRank(group, rank, permissionTable) if (not rankCache[group]) then rankCache[group] = {} end --rankCache[group][rank] = {fromJSON(permissionTable)} dbExec(db, "INSERT INTO groupRanks VALUES (?, ?, ?)", tostring(group), tostring(rank), permissionTable) dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks") end function removeRank(group, rank) if (not rankCache[group]) then return true end if (rankCache[group][rank]) then rankCache[group][rank] = nil dbExec(db, "DELETE FROM groupRanks WHERE name=? AND groupName=?", tostring(rank), tostring(group)) dbQuery(loadGroupRanks, db, "SELECT * FROM groupRanks") return true end end function isRank(group, rank) if (not rankCache[group]) then return false end return rankCache[group][rank] end function groupMemberLogin() if (GAC[account(source)]) then myGang[source] = GAC[account(source)][1] setElementData(source, "Group", GAC[account(source)][1]) end end addEventHandler("onPlayerLogin", root, groupMemberLogin) function getGroupMembers(group) local temp = {} for ind, data in pairs(users) do if (ind == group) then table.insert(temp, data[1]) end end return temp end function getPlayerGroup(player) if (not GAC[account(player)]) then return false end return GAC[account(player)][1] end function getPlayerGroupRank(player) if (not GAC[account(player)]) then return false end return GAC[account(player)][2] end function getPlayerWarningLevel(player) if (not GAC[account(player)]) then return false end return GAC[account(player)][3] end function getGroupBankAmount(group) if (not groupTable[group]) then return end return groupTable[group][7] end function getPlayerJoinDate(player) if (not GAC[account(player)]) then return false end return GAC[account(player)][4] end function getHexCode(r, g, b) if (r and g and b) then return string.format("#%.2X%.2X%.2X", r, g, b) end end function getGroupChatColor(group) if (not groupTable[group]) then return 255, 255, 255 end local color = fromJSON(groupTable[group][3]) return color[1], color[2], color[3] end function outputGroupMessage(message, group) for ind, data in pairs(GAC) do if (data[1] == group) then local acc = getAccount(ind) if (getAccountPlayer(acc)) then local color = fromJSON(groupTable[group][3]) local hex = getHexCode(color[1], color[2], color[3]) outputChatBox(hex.."("..group..") #FFFFFF"..message, getAccountPlayer(acc), 255, 255, 255, true) groupLog(group, message) end end end end function checkGroupAccess(player, actionID) local rank = getPlayerGroupRank(player) local group = getPlayerGroup(player) if (not rankCache[group]) then return false end if (rankCache[group] and rankCache[group][rank]) then if (tostring(actionID)) then for ind, data in pairs(permToTable) do if (data == actionID) then actionID = ind break end end end local actionID = tonumber(actionID) if (rankCache[group][rank][actionID]) then return true end end end function getPermissionCount(group, rank) if (not rankCache[group]) then return false end local count = 0 if (rankCache[group] and rankCache[group][rank]) then for ind, data in pairs(rankCache[group][rank]) do count = count + 1 end end return count end Link to comment
UserToDelete Posted September 21, 2015 Share Posted September 21, 2015 Quizas solo sea tema de tener mas seguridad en Servidor, quizas sea un 'exploit' en el que le muestra todos los botones, pero no veo una seguridad que impida la verificacion del permiso en servidor, es decir, si soy miembro, y le doy a kick (por alguna casualidad), no me impidiria ningun argumento kickear a alguien, yo le pondria verificaciones, pero vamos, por el resto no veo nada raro Link to comment
Tomas Posted September 21, 2015 Share Posted September 21, 2015 ¿Cómo podríamos ayudarte a resolver el retraso de tus players? Osea, no entiendo que podriamos hacer ._. Link to comment
Narutimmy Posted September 21, 2015 Author Share Posted September 21, 2015 ¿Cómo podríamos ayudarte a resolver el retraso de tus players? Osea, no entiendo que podriamos hacer ._. no no, osea ejemplo tu creas tu gang osea tu grupo no? y yo soy un usuario normal entonces mediante un bug o Algo entro a tu grupo sin tu permiso y me pongo rango fundador y te saco de tu grupo y me adueño de el, eso estan haciendo. Link to comment
Castillo Posted September 21, 2015 Share Posted September 21, 2015 Porque no le preguntas a alguno de los jugadores que lo haya hecho? Link to comment
Narutimmy Posted September 22, 2015 Author Share Posted September 22, 2015 Porque no le preguntas a alguno de los jugadores que lo haya hecho? Porque no son usuarios comunes son Brasileños, estan robando clanes ya que al meterse al clan sin permiso tienen acceso a la base o demas cosas. Link to comment
Kilfwan Posted September 22, 2015 Share Posted September 22, 2015 Porque no le preguntas a alguno de los jugadores que lo haya hecho? Porque no son usuarios comunes son Brasileños, estan robando clanes ya que al meterse al clan sin permiso tienen acceso a la base o demas cosas. Como siempre buscan alguna forma de encontrar un bug en tu server ._. , Podrias averiguar como se hiso esto, promocionando que daras VIP-Pro temporalmente a alguna persona que lo hizo, sera la unica forma de saber como lo hicieron. Link to comment
Tomas Posted September 22, 2015 Share Posted September 22, 2015 Busca en el server.log las cuentas de los exploiters, todo está logueado así que debería estar ahí el problema. Link to comment
Narutimmy Posted September 22, 2015 Author Share Posted September 22, 2015 Logre comvencerlo y me dijo como se hace y si, amm como puedo hacer para que cuando se cree el gang no se puedan usar caracteres como !,#, y eso que solo se puedan letras y numeros? tengo asi : local char = "[^0-9a-zA-Z_]" Link to comment
Enargy, Posted September 22, 2015 Share Posted September 22, 2015 Logre comvencerlo y me dijo como se hace y si, amm como puedo hacer para que cuando se cree el gang no se puedan usar caracteres como !,#, y eso que solo se puedan letras y numeros? tengo asi : local char = "[^0-9a-zA-Z_]" string.find string.gsub Link to comment
Tomas Posted September 22, 2015 Share Posted September 22, 2015 Logre comvencerlo y me dijo como se hace y si, amm como puedo hacer para que cuando se cree el gang no se puedan usar caracteres como !,#, y eso que solo se puedan letras y numeros? tengo asi : local char = "[^0-9a-zA-Z_]" Claro.. Tu sistema de grupos utiliza el sistema de cuentas de MTA y esos carácteres son excluídos.. desde la 1.5 las cuentas no tienen case sensitive, si tu grupo se llama 'xXElGrupoProXx' y alguien intenta usar 'xxelgrupoproxx' pasaría lo mismo... Link to comment
UserToDelete Posted September 23, 2015 Share Posted September 23, 2015 Si es mediante GUI la creacion, usa ValidationString en la GUI Como siempre buscan alguna forma de encontrar un bug en tu server ._. , Podrias averiguar como se hiso esto, promocionando que daras VIP-Pro temporalmente a alguna persona que lo hizo, sera la unica forma de saber como lo hicieron. Los bugs surgen, y no todos tenemos "VIP-Pro", los desarrolladores mismos deberian buscar los bugs, ya que son los unicos que se saben el codigo 'a pie a pa', Cuando desarrollé mi group system recuerdo haber testado hasta uniendome de guest con el panel GUI (Aun sin logearme, osea, el panel de login de fondo), y nada, no habia ningun exploit de este tipo, el filtro que yo le habia puesto era una comparacion de grupo, es decir, si no era EXACTAMENTE igual el nombre del grupo al asignado, no tenia ningun poder sobre otra gang, por eso digo, que el error es muy raro Link to comment
Recommended Posts