Je suis étonné de la participation, je pensais que le sujet allé coulé vite fait dans les oubliettes
J'ai oublié de l'enlever, merci ^^
Je vous fait passer les MPs qui n'ont pas aboutie, et le complément d'information qui va avec:
Pour l'injection SQL, vous avez raison de penser à cela, c'est de ma faute car je ne vous est pas fournit suffisament d'informations.
J'ai le magic_quote d'activé, donc l'injection n'est ici pas possible.
De plus, j'utilise une couche au dessus de mysql_query que j'ai retiré pour vous simplifier les choses.
Pour chaque requete, si il y a une erreur SQL elle n'est pas affiché à l'utilisateur (il ne connait donc rien de la structure de la base de données). De plus, un message privé m'est envoyé avec l'IP, l'ID, l'heure, toutes les variables en GET/POST, et le nom du script. De la sorte, ceux qui voudraient faire des tentatives n'ont aucun droit à l'erreur.
Mais vous avez eu raison de soupconner ce point avec les informations que vous aviez
Il y a de l'idée aussi.
Si un joueur met dans $_GET['annuler'] l'ID d'une attaque qui ne lui appartient pas, la seconde condition ne sera pas vérifier, il n'y aurat donc aucune attaque de selectionné.
Je précise accesoirement que le champ ID de attaque est en auto-incremente (il est donc unique).
Edit: Je me suis un peu emmêlé les pinceaux avec les quotes
LexLxUs a écrit :Une accolade en trop à la fin ? iffle:
J'ai oublié de l'enlever, merci ^^
Je vous fait passer les MPs qui n'ont pas aboutie, et le complément d'information qui va avec:
NicoMSEvent a écrit :tu as eu une injection de SQL dans la variable : $_GET['annuler'] ?
Pouratant, une des premiere chose qu'on apprend en sécurité, est de ne jamais faire confiance aux données entrées... faut tester la validité, faire des "escape" et tout ce qu'il faut pour éviter ça...
Si ce n'est pas ça, je te suggère quand meme de vérifier ce point 16
Kéké a écrit :Règle numéro 1 en PHP : ne jamais utiliser GET.
Est-ce là toute l'erreur de ton script ? ou bien il y a quelque chose d'encore plus profond à trouver ?
Kéké.
uriak a écrit :pas certain, mais étant donné la configuration des fonctions et leur point d'entrées, je soupçonne de l'injection SQL dans la variable $_GET['annuler']
par exemple avec un "0 OR IDAttaquant = (Id d'un autre joueur)"
on pourrait alors provoquer l'annulation d'une attaque récente de la part d'un autre joueur dont on aurait récupéré l'ID.
Bien entendu, simplement vérifier que $_GET['annuler'] est un nombre rend caduque cette attaque.
par contre comme je ne vois pas trop le lien avec la seconde partie du script je ne suis pas sûr de mon coup..
orditeck a écrit :Déjà, comme dis Lex, y'a une accolade de trop à la fin ce qui résulte à une erreur PHP.
Je vois pas comment tes joueurs peuvent afficher cette page 1
Sinon, tu fais un :
DELETE from attaque WHERE IDAttaquant='$ID' AND ID='".$_GET['annuler']."'
Ensuite, un joueur fait un petit :
Armee.php?annuler=1' DROP DATABASE 'jeu
Et le tour est joué... enfin, ça fonctionne seulement si magic_quotes_gpc est désactivé. Mais pour des raisons pratiques, je crois que c'est mieux qu'il soit activé.
S'il n'est pas activé, voici un petit bout de code utile qui arrange tout ça, bien que j'imagine que ta faille est corrigée depuis longtemps... !
Code PHP :
$get_arr = array();
foreach ($_GET as $key => $get_arr) {
$_GET[$key] = addslashes($get_arr);
}
J'ai trouvé, au moins ?
Pour l'injection SQL, vous avez raison de penser à cela, c'est de ma faute car je ne vous est pas fournit suffisament d'informations.
J'ai le magic_quote d'activé, donc l'injection n'est ici pas possible.
De plus, j'utilise une couche au dessus de mysql_query que j'ai retiré pour vous simplifier les choses.
Pour chaque requete, si il y a une erreur SQL elle n'est pas affiché à l'utilisateur (il ne connait donc rien de la structure de la base de données). De plus, un message privé m'est envoyé avec l'IP, l'ID, l'heure, toutes les variables en GET/POST, et le nom du script. De la sorte, ceux qui voudraient faire des tentatives n'ont aucun droit à l'erreur.
Mais vous avez eu raison de soupconner ce point avec les informations que vous aviez
NicoMSEvent a écrit :autre point que je vois, c'est : Armee.php?annuler='.$donnees['ID']Si l'attaque à déjà était annulé, et que tu ré exécute le script plus tard, la requete SELECT * from attaque WHERE IDAttaquant='$ID' AND ID='".$_GET['annuler']."' ne selectionnera rien puisque l'attaque n'existeras plus, le script va ajouter 0 armée.
Rien n'empeche de sauver le lien, et le lancer plus tard. A moins que tu ne vérifies si la durée de validité du lien est ok lorsque qu'il est activé (avec un message du genre : 'trop tard!' si il n'est plus valide).
Il y a de l'idée aussi.
LexLxUs a écrit :Bonjour 2Dans la requete qui selectionne l'attaque, il y a deux conditions: ID='".$_GET['annuler']."' pour selectionner l'attaque du GET, et IDAttaquant='$ID', $ID correspondant a l'ID du joueur qui à lancé l'attaque et qui exécute le script.
Le problème ne serait pas que le fait de passer l'id de l'attaque à annuler en GET permet au joueur d'annuler une attaque qui n'est pas la sienne ?
L.
Si un joueur met dans $_GET['annuler'] l'ID d'une attaque qui ne lui appartient pas, la seconde condition ne sera pas vérifier, il n'y aurat donc aucune attaque de selectionné.
Je précise accesoirement que le champ ID de attaque est en auto-incremente (il est donc unique).
Edit: Je me suis un peu emmêlé les pinceaux avec les quotes
"L’avenir ne peut être prédit mais les avenirs peuvent être inventés"
Denis Gabor.
Denis Gabor.