From ebc77f7fbc4db8dbfae1221960383a781c114833 Mon Sep 17 00:00:00 2001 From: Catalin Novgorodschi <1140613+Shadowss@users.noreply.github.com> Date: Thu, 2 Apr 2026 10:02:54 +0300 Subject: [PATCH] Issue #77 Issue #77 --- GameEngine/Database.php | 39 +- GameEngine/Lang/fr.php | 3032 +++++++++++++++++++-------------------- 2 files changed, 1548 insertions(+), 1523 deletions(-) diff --git a/GameEngine/Database.php b/GameEngine/Database.php index f794b521..e7feb0d2 100755 --- a/GameEngine/Database.php +++ b/GameEngine/Database.php @@ -3024,15 +3024,40 @@ public function getBestOasisCropBonus($x, $y) { // no need to cache this method function getAlliancePermission($ref, $field, $mode) { list($ref, $field, $mode) = $this->escape_input($ref, $field, $mode); + $mode = (int)$mode; + $ref = (int)$ref; - if(!$mode) { - $q = "SELECT $field FROM " . TB_PREFIX . "ali_permission where uid = ". (int) $ref . " LIMIT 1"; - } else { - $q = "SELECT $field FROM " . TB_PREFIX . "ali_permission where username = '$ref' LIMIT 1"; + // 🔒 Validazione del campo (prevenzione SQL injection indiretta) + $allowed_fields = ['ap1', 'ap2', 'ap3', 'ap4', 'ap5', 'ap6', 'ap7', 'ap8', 'ap9', 'ap10', 'owner', 'admin']; + if (!in_array($field, $allowed_fields)) { + error_log("Invalid field in getAlliancePermission: $field"); + return false; } - $result = mysqli_query($this->dblink,$q); - //$dbarray = mysqli_fetch_array($result); - some error in here ! - return $dbarray[$field]; + + // Costruisci la query + if (!$mode) { + $q = "SELECT `$field` FROM " . TB_PREFIX . "ali_permission WHERE uid = $ref LIMIT 1"; + } else { + $q = "SELECT `$field` FROM " . TB_PREFIX . "ali_permission WHERE username = '$ref' LIMIT 1"; + } + + // Esegui query + $result = mysqli_query($this->dblink, $q); + + // 🔴 Controllo errore query + if (!$result) { + error_log("SQL Error in getAlliancePermission: " . mysqli_error($this->dblink) . " | Query: $q"); + return false; + } + + // 🔍 Nessun risultato? + if (mysqli_num_rows($result) == 0) { + return false; + } + + // ✅ Estrai e restituisci il valore + $row = mysqli_fetch_array($result); + return $row[$field]; } function getAlliance($id, $use_cache = true) { diff --git a/GameEngine/Lang/fr.php b/GameEngine/Lang/fr.php index f5e020e0..805c5cef 100644 --- a/GameEngine/Lang/fr.php +++ b/GameEngine/Lang/fr.php @@ -1,1516 +1,1516 @@ -Plus"); -define("CONTACT","Contactez-nous !"); -define("GAME_RULES","Règles du jeu"); - -//MENU -define("REG","Inscription"); -define("FORUM","Forum"); -define("CHAT","Chat"); -define("IMPRINT","Mentions légales"); -define("MORE_LINKS","Plus de liens"); -define("TOUR","Visite du jeu"); - - -//ERRORS -define("USRNM_EMPTY","(Nom d'utilisateur vide)"); -define("USRNM_TAKEN","(Nom déjà pris.)"); -define("USRNM_SHORT","(min. ".USRNM_MIN_LENGTH." figure)"); -define("USRNM_CHAR","(Caractères non valides)"); -define("PW_EMPTY","(Mot de passe vide)"); -define("PW_SHORT","(min. ".PW_MIN_LENGTH." figure)"); -define("PW_INSECURE","(Mot de passe non sécurisé. Veuillez en choisir un plus sûr.)"); -define("EMAIL_EMPTY","(Adresse e-mail vide)"); -define("EMAIL_INVALID","(Adresse e-mail invalide)"); -define("EMAIL_TAKEN","(Adresse e-mail déjà utilisée)"); -define("TRIBE_EMPTY","
  • Veuillez choisir une tribu.
  • "); -define("AGREE_ERROR","
  • Vous devez accepter les règles du jeu ainsi que les conditions générales pour vous inscrire.
  • "); -define("LOGIN_USR_EMPTY","Veuillez saisir votre nom."); -define("LOGIN_PASS_EMPTY","Veuillez saisir votre mot de passe."); -define("EMAIL_ERROR","Les adresses e-mail ne correspondent pas"); -define("PASS_MISMATCH","Les mots de passe ne correspondent pas"); -define("ALLI_OWNER","Veuillez nommer un chef d'alliance avant la suppression"); -define("SIT_ERROR","Substitut déjà défini ou joueur introuvable"); -define("USR_NT_FOUND","Ce nom n'existe pas."); -define("LOGIN_PW_ERROR","Mot de passe incorrect."); -define("WEL_TOPIC","Conseils et informations utiles"); -define("ATAG_EMPTY","Tag vide"); -define("ANAME_EMPTY","Nom vide"); -define("ATAG_EXIST","Tag déjà pris"); -define("ANAME_EXIST","Nom déjà pris"); -define("ALREADY_ALLY_MEMBER","Vous faites déjà partie d'une alliance"); -define("ALLY_TOO_LOW", "vous devez avere un'ambassade di niveau 3 o superiore"); -define("USER_NOT_IN_YOUR_ALLY","Cet utilisateur ne fait pas partie de votre alliance !"); -define("CANT_EDIT_YOUR_PERMISSIONS","Vous ne pouvez pas modifier vos propres permissions !"); -define("CANT_EDIT_LEADER_PERMISSIONS","Les permissions du chef d'alliance ne peuvent pas être modifiées !"); -define("NO_PERMISSION", "Non vous avez assez autorizzazioni!"); -define("NAME_OR_DIPL_EMPTY", "Nom o diplomazia vuoti"); -define("ALLY_DOESNT_EXISTS","L'alliance n'existe pas"); -define("CANNOT_INVITE_SAME_ALLY","Vous ne pouvez pas inviter votre propre alliance"); -define("WRONG_DIPLOMACY","Vous avez fait le mauvais choix"); -define("INVITE_ALREADY_SENT","Soit vous avez déjà envoyé un pacte à cette alliance, soit elle vous en a déjà envoyé un, soit vous avez déjà un pacte avec elle"); -define("INVITE_SENT","Invitation envoyée"); -define("DECLARED_WAR_ON","a déclaré la guerre à"); -define("OFFERED_NON_AGGRESION_PACT_TO","a proposé un pacte de non-agression à"); -define("OFFERED_CONFED_TO","a proposé une confédération à"); -define("ALLY_TOO_MUCH_PACTS","Soit vous ne pouvez plus proposer de pactes de ce type, soit cette alliance a atteint sa limite pour ce type de pactes"); -define("ALLY_PERMISSIONS_UPDATED","Permissions mises à jour"); -define("ALLY_FORUM_LINK_UPDATED", "Lien du forum mis à jour"); -define("NO_FORUMS_YET","Il n'y a pas encore de forums."); -define("ALLY_USER_KICKED"," a été expulsé de l'alliance"); -define("NOT_OPENED_YET","Le serveur n'a pas encore démarré."); -define("REGISTER_CLOSED","Les inscriptions sont fermées. Vous ne pouvez pas vous inscrire sur ce serveur."); -define("NAME_EMPTY","Veuillez saisir un nom"); -define("NAME_NO_EXIST","Aucun utilisateur ne porte le nom "); -define("ID_NO_EXIST","Aucun utilisateur ne porte l'identifiant "); -define("SAME_NAME","Vous ne pouvez pas vous inviter vous-même"); -define("ALREADY_INVITED"," déjà invité"); -define("ALREADY_IN_ALLY"," fait déjà partie de cette alliance"); -define("ALREADY_IN_AN_ALLY"," fait déjà partie d'une alliance"); -define("NAME_OR_TAG_CHANGED","Nom ou tag modifié"); -define("VAC_MODE_WRONG_DAYS","Vous avez saisi un nombre de jours incorrect"); - -//COPYRIGHT -define("TRAVIAN_COPYRIGHT","TravianZ - Clone de Travian 100 % open source."); - -//BUILD.TPL -define("CUR_PROD","Production actuelle"); -define("NEXT_PROD","Production au niveau "); -define("CONSTRUCT_BUILD","Construire le bâtiment"); - -//BUILDINGS -define("B1","Bûcheron"); -define("B1_DESC","Le bûcheron abat les arbres pour produire du bois. Plus son niveau est élevé, plus la production de bois augmente."); -define("B2","Carrière d'argile"); -define("B2_DESC","L'argile est produite ici. Plus son niveau est élevé, plus la production d'argile augmente."); -define("B3","Mine de fer"); -define("B3_DESC","Les mineurs y extraient le fer. Plus le niveau de la mine augmente, plus sa production de fer augmente."); -define("B4","Champ de céréales"); -define("B4_DESC","La nourriture de votre population est produite ici. Plus le niveau du champ augmente, plus la production de céréales progresse."); - -//DORF1 -define("LUMBER","Bois"); -define("CLAY","Argile"); -define("IRON","Fer"); -define("CROP","Céréales"); -define("LEVEL","Niveau"); -define("CROP_COM",CROP." consumo"); -define("PER_HR","par heure"); -define("PROD_HEADER","Production"); -define("MULTI_V_HEADER","Villages"); -define("ANNOUNCEMENT","Annonce"); -define("GO2MY_VILLAGE","Aller à mon village"); -define("VILLAGE_CENTER","Centre du village"); -define("FINISH_GOLD","Terminer immédiatement tous les ordres de construction et de recherche dans ce village pour 2 ors ?"); -define("WAITING_LOOP","(en attente)"); -define("CROP_NEGATIVE","Votre production de céréales est négative, vous n'atteindrez jamais la quantité de ressources requise."); -define("HRS","(h.)"); -define("DONE_AT","terminé à"); -define("CANCEL","annuler"); -define("LOYALTY","Loyauté"); -define("CALCULATED_IN","Calculé en"); -define("SEVER_TIME","Heure du serveur :"); -define("HI","Bonjour"); -define("P_IN","dans"); - -//QUEST -define("Q_CONTINUE","Poursuivez avec la tâche suivante."); -define("Q_REWARD","Votre récompense :"); -define("Q_BUTN","tâche terminée"); -define("Q0","Bienvenue à "); -define("Q0_DESC","Comme je le vois, vous avez été nommé chef de ce petit village. Je serai votre conseiller pendant les premiers jours et je ne quitterai jamais votre côté (droit)."); -define("Q0_OPT1","Vers la première tâche."); -define("Q0_OPT2","Regarder autour de moi seul."); -define("Q0_OPT3","Ne pas faire de tâches."); - -define("Q1","Tâche 1 : Bûcheron"); -define("Q1_DESC","Quatre forêts verdoyantes entourent votre village. Construisez un bûcheron sur l'une d'elles. Le bois est une ressource importante pour notre nouvelle colonie."); -define("Q1_ORDER","Ordre:<\/p>Construisez un bûcheron."); -define("Q1_RESP","Oui, de cette façon vous gagnez plus de bois. Je vous ai donné un petit coup de pouce et j'ai terminé l'ordre instantanément."); -define("Q1_REWARD","Bûcheron terminé immédiatement."); - -define("Q2","Tâche 2: Céréales"); -define("Q2_DESC","maintenant vos sujets hanno fame pour aver lavorato toute la journée. améliorer un terreno coltivato pour améliorer l'approvisionnement devos sujets. retourner ici une fois le bâtiment terminé."); -define("Q2_ORDER","Ordre:<\/p>améliorer un terreno coltivato."); -define("Q2_RESP","Très bien. maintenant vos sujets hanno de nouveau assez à manger..."); -define("Q2_REWARD","Il votre récompense:<\/p>1 jour Travian"); - -define("Q3","Tâche 3: Il Nom du votre village"); -define("Q3_DESC","Comme vous êtes créatif, vous pouvez donner à votre village le nom qui lui convient.

    Cliquez sur 'Profil' dans le menu de gauche puis sélectionnez 'Modifier le profil'..."); -define("Q3_ORDER","Ordre:<\/p>Cambia il Nom du votre village in qualcosa di carino."); -define("Q3_RESP","Wow, un beau nom pour votre village. Avrebbe potuto être il Nom du mio village!..."); - -define("Q4","Tâche 4: Autres joueurs"); -define("Q4_DESC","dans le ". SERVER_NAME ." giochi ensemble a miliardi di autres joueurs. Cliquez 'statistiques' dans le menu in élevé pour cercare il votre rang e inserirlo ici."); -define("Q4_ORDER","Ordre:<\/p>Cerca il votre rang dans les statistiques e inseriscilo ici."); -define("Q4_BUTN","Tâche terminé"); -define("Q4_RESP","exactement! ce è il votre rang."); - -define("Q5","Tâche 5: Due ordini di construction"); -define("Q5_DESC","Construisez une mine de fer et une carrière d'argile. Le fer et l'argile ne sont jamais suffisants."); -define("Q5_ORDER","Ordre:<\/p>