mirror of
https://github.com/jimathy/jim_bridge.git
synced 2026-08-17 05:56:02 +01:00
Add exploit protection for :Crafting:GetItem
I unfortunately forgot to add this before when adding the extra exploit protection. Now demands an auth token before allowing crafting results to help reduce exploiters calling it externally
This commit is contained in:
@@ -371,8 +371,10 @@ function makeItem(data)
|
|||||||
anim = anim,
|
anim = anim,
|
||||||
flag = 49,
|
flag = 49,
|
||||||
icon = data.item,
|
icon = data.item,
|
||||||
|
request = true,
|
||||||
}) then
|
}) then
|
||||||
TriggerServerEvent(getScript()..":Crafting:GetItem", data.item, data.craft, data.stashName, metadata)
|
TriggerServerEvent(getScript()..":Crafting:GetItem", data.item, data.craft, data.stashName, metadata, currentToken)
|
||||||
|
currentToken = nil -- clear client cached token
|
||||||
CreateThread(function()
|
CreateThread(function()
|
||||||
if data.craft["hasCrafted"] ~= nil then
|
if data.craft["hasCrafted"] ~= nil then
|
||||||
debugPrint("hasCrafted Found, marking '"..data.item.."' as crafted for player")
|
debugPrint("hasCrafted Found, marking '"..data.item.."' as crafted for player")
|
||||||
@@ -431,8 +433,28 @@ end
|
|||||||
--- @param stashName string|table The stash name(s) to remove ingredients from.
|
--- @param stashName string|table The stash name(s) to remove ingredients from.
|
||||||
--- @param metadata table (optional) Metadata for the crafted item.
|
--- @param metadata table (optional) Metadata for the crafted item.
|
||||||
--- @usage
|
--- @usage
|
||||||
RegisterNetEvent(getScript()..":Crafting:GetItem", function(ItemMake, craftable, stashName, metadata)
|
RegisterNetEvent(getScript()..":Crafting:GetItem", function(ItemMake, craftable, stashName, metadata, token)
|
||||||
local src = source
|
local src = source
|
||||||
|
debugPrint(GetInvokingResource())
|
||||||
|
if GetInvokingResource() and GetInvokingResource() ~= getScript() and GetInvokingResource() ~= "qb-core" then
|
||||||
|
debugPrint("^1Error^7: ^1Possible exploit^7, ^1vital function was called from an external resource^7")
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if token == nil then
|
||||||
|
debugPrint("^1Auth^7: ^1No token recieved^7")
|
||||||
|
dupeWarn(src, item, "Auth: Player "..src.." attempted to spawn "..item.." without an auth token")
|
||||||
|
else
|
||||||
|
if token ~= validTokens[src] then
|
||||||
|
debugPrint("^1Auth^7: ^1Tokens don't match! ^7", token, validTokens[src])
|
||||||
|
dupeWarn(src, item, "Auth: "..src.." attempted to trigger server only events with an incorrect auth token")
|
||||||
|
else
|
||||||
|
debugPrint("^1Auth^7: ^2Client and Server Auth tokens match^7!", token, validTokens[src])
|
||||||
|
validTokens[src] = nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
local hasItems, hasTable = hasItem(ItemMake, 1, src)
|
local hasItems, hasTable = hasItem(ItemMake, 1, src)
|
||||||
if stashName then
|
if stashName then
|
||||||
local itemRemove = {}
|
local itemRemove = {}
|
||||||
|
|||||||
@@ -23,18 +23,23 @@ function GetPlayer(source)
|
|||||||
if isStarted(QBExport) then
|
if isStarted(QBExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetPlayer^7() QBExport")
|
debugPrint("^6Bridge^7: ^3GetPlayer^7() QBExport")
|
||||||
return exports[QBExport]:GetCoreObject().Functions.GetPlayer(source)
|
return exports[QBExport]:GetCoreObject().Functions.GetPlayer(source)
|
||||||
|
|
||||||
elseif isStarted(QBXExport) then
|
elseif isStarted(QBXExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetPlayer^7() QBOXExport")
|
debugPrint("^6Bridge^7: ^3GetPlayer^7() QBOXExport")
|
||||||
return exports[QBXExport]:GetCoreObject().Functions.GetPlayer(source)
|
return exports[QBXExport]:GetCoreObject().Functions.GetPlayer(source)
|
||||||
|
|
||||||
elseif isStarted(ESXExport) then
|
elseif isStarted(ESXExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetPlayer^7() ESXExport")
|
debugPrint("^6Bridge^7: ^3GetPlayer^7() ESXExport")
|
||||||
return ESX.GetPlayerFromId(source)
|
return ESX.GetPlayerFromId(source)
|
||||||
|
|
||||||
elseif isStarted(OXCoreExport) then
|
elseif isStarted(OXCoreExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetPlayer^7() OXCoreExport")
|
debugPrint("^6Bridge^7: ^3GetPlayer^7() OXCoreExport")
|
||||||
return exports[OXCoreExport]:GetPlayer(source)
|
return exports[OXCoreExport]:GetPlayer(source)
|
||||||
|
|
||||||
elseif isStarted(RSGExport) then
|
elseif isStarted(RSGExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetPlayer^7() RSGExport")
|
debugPrint("^6Bridge^7: ^3GetPlayer^7() RSGExport")
|
||||||
return exports[RSGExport]:GetCoreObject().Functions.GetPlayer(source)
|
return exports[RSGExport]:GetCoreObject().Functions.GetPlayer(source)
|
||||||
|
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@@ -63,15 +68,19 @@ function GetMetadata(player, key)
|
|||||||
if isStarted(QBExport) or isStarted(QBXExport) then
|
if isStarted(QBExport) or isStarted(QBXExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetMetadata^7() QBExport/QBXExport", key)
|
debugPrint("^6Bridge^7: ^3GetMetadata^7() QBExport/QBXExport", key)
|
||||||
return player.PlayerData.metadata[key]
|
return player.PlayerData.metadata[key]
|
||||||
|
|
||||||
elseif isStarted(ESXExport) then
|
elseif isStarted(ESXExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetMetadata^7() ESXExport", key)
|
debugPrint("^6Bridge^7: ^3GetMetadata^7() ESXExport", key)
|
||||||
return player.getMeta(key)
|
return player.getMeta(key)
|
||||||
|
|
||||||
elseif isStarted(OXCoreExport) then
|
elseif isStarted(OXCoreExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetMetadata^7() OXCoreExport", key)
|
debugPrint("^6Bridge^7: ^3GetMetadata^7() OXCoreExport", key)
|
||||||
return player.get(key)
|
return player.get(key)
|
||||||
|
|
||||||
elseif isStarted(RSGExport) then
|
elseif isStarted(RSGExport) then
|
||||||
debugPrint("^6Bridge^7: ^3GetMetadata^7() RSGExport", key)
|
debugPrint("^6Bridge^7: ^3GetMetadata^7() RSGExport", key)
|
||||||
return player.PlayerData.metadata[key]
|
return player.PlayerData.metadata[key]
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
return nil
|
return nil
|
||||||
@@ -118,15 +127,19 @@ function SetMetadata(player, key, value)
|
|||||||
if isStarted(QBExport) or isStarted(QBXExport) then
|
if isStarted(QBExport) or isStarted(QBXExport) then
|
||||||
debugPrint("^6Bridge^7: ^3SetMetadata^7() using QBExport/QBXExport")
|
debugPrint("^6Bridge^7: ^3SetMetadata^7() using QBExport/QBXExport")
|
||||||
player.Functions.SetMetaData(key, value)
|
player.Functions.SetMetaData(key, value)
|
||||||
|
|
||||||
elseif isStarted(ESXExport) then
|
elseif isStarted(ESXExport) then
|
||||||
debugPrint("^6Bridge^7: ^3SetMetadata^7() using ESXExport")
|
debugPrint("^6Bridge^7: ^3SetMetadata^7() using ESXExport")
|
||||||
player.setMeta(key, value)
|
player.setMeta(key, value)
|
||||||
|
|
||||||
elseif isStarted(OXCoreExport) then
|
elseif isStarted(OXCoreExport) then
|
||||||
debugPrint("^6Bridge^7: ^3SetMetadata^7() using OXCoreExport")
|
debugPrint("^6Bridge^7: ^3SetMetadata^7() using OXCoreExport")
|
||||||
player.set(key, value)
|
player.set(key, value)
|
||||||
|
|
||||||
elseif isStarted(RSGExport) then
|
elseif isStarted(RSGExport) then
|
||||||
debugPrint("^6Bridge^7: ^3SetMetadata^7() using RSGExport")
|
debugPrint("^6Bridge^7: ^3SetMetadata^7() using RSGExport")
|
||||||
player.Functions.SetMetaData(key, value)
|
player.Functions.SetMetaData(key, value)
|
||||||
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user