JeuWeb - Crée ton jeu par navigateur
Crontab - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Crontab (/showthread.php?tid=7586)

Pages : 1 2 3 4


Crontab - Sôbi - 09-02-2016

Bonjour,

Je suis actuellement en train de faire un script php qui permettrait par exemple d'ajouter un point de déplacement toutes les minutes, j'ai donc ceci :

script.php 
Code PHP :
<?php 
// l'include de ma connexion en php


$nombre_pa_heure = 1;
$nombre_pa = 600;

$update_point = "UPDATE `players` SET `pas_restant`= if(`pas_restant` < '$nbr_pa' AND `pas_restant`+'$nbr_pa_heure' < '$nbr_pa', `j_pas_restant`+'$nbr_pa_heure', '$nbr_pa') WHERE id_player=1";
mysql_query($update_point ) or die('Erreur SQL !'.$update_point .'<br>'.mysql_error());

dans mon crontab -e j'ai ceci :
Code :
*/1 * * * * php /root/script.php >> /root/cronlog.log

et du coup, j'ai une erreur qui est celle-ci :
Citation :Erreur SQL !UPDATE `players` SET `j_pas_restant`= if(`pas_restant` < '600' AND `pas_restant`+'1' < '600', `pas_restant`+'1', '600') WHERE id_player=1<br>Access denied for user 'root'@'localhost' (using password: NO)

mais je vois pas trop ce que je peux y faire la ...

Can you help me please ? Big Grin

Thx


RE: Crontab - Sôbi - 09-02-2016

Ne pouvant pas supprimer mon message, j'ai résolu l'affaire finalement ...
Le problème venait d'un mauvais include... Le chemin était faux...

Merci quand même T_T


RE: Crontab - Xenos - 09-02-2016

Code :
$nombre_pa_heure = 1;
$nombre_pa = 600;

J'espère que ce n'est pas juste pour l'exemple et que ces variables sont en fait des constantes, parce que ta query, niveau injectabilité... Smile


RE: Crontab - Sôbi - 10-02-2016

(09-02-2016, 11:46 PM)Xenos a écrit :
Code :
$nombre_pa_heure = 1;
$nombre_pa = 600;

J'espère que ce n'est pas juste pour l'exemple et que ces variables sont en fait des constantes, parce que ta query, niveau injectabilité... Smile

Oui oui c'est bien que en tant qu'exemple ! Smile
Je met rarement les bons noms de tables/colonnes et les bonnes variables. Smile
Et ma query est, pour moi, un "brouillon". C'est un test minime pour le passé ensuite en PDO et enlever toutes injectabilités Smile


RE: Crontab - Xenos - 10-02-2016

Okay.

Au fait
 if(`pas_restant` < '600' AND `pas_restant`+'1' < '600', `pas_restant`+'1', '600')

==>

 LEAST(`pas_restant`+1, '600')

Wink


RE: Crontab - MadMass - 10-02-2016

(09-02-2016, 11:46 PM)Xenos a écrit :
Code :
$nombre_pa_heure = 1;
$nombre_pa = 600;

J'espère que ce n'est pas juste pour l'exemple et que ces variables sont en fait des constantes, parce que ta query, niveau injectabilité... Smile

En quoi cela pose-t-il un problème d'injectabilité ? Même si quelqu'un arrivait à mettre la main sur le nom de la variable, lui allouer une valeur via GET/POST ne changera rien puisqu'elle est réallouée au début du script Smile


RE: Crontab - Xenos - 10-02-2016

Me: " et que ces variables sont en fait des constantes"
Oui, dans le cas présent, ce n'est pas injectable si tu considère tout le code, qui a surement été modifié pour les besoins post.

De plus, constantes ou pas, si tu codes avec une espèce de "vision d'ensemble", en te disant "je sais que, dans cette instruction-ci, telle variable vient de tel endroit sûr", alors tu vas créer des dépendances cachées qui te porteront préjudice par la suite.

J'ai souvent vu passer des

function doThis($id) {
query("SELECT ... WHERE id=".$id);
}
...
doThis(42);

Du coup, à la relecture, on me dit "Boah non, c'est pas injectable, regarde: ça vaut 42" ou "Je fais l'échappement avant d'appeler doThis". Je ne te dis pas le bazar que c'est 6 mois après, quand quelqu'un d'autre fait un doThis($truc): t'es obligé d'analyser tout le code pour savoir si c'est injectable (aka, tu simules mentalement l'exécution du code).

Allez, pour le coup, j'essaie de synthétiser l'idée en un article Smile


RE: Crontab - julp - 10-02-2016

(10-02-2016, 10:25 AM)Xenos a écrit :
 min(`pas_restant`+1, '600')
LEAST plutôt, non ?

Et pour revenir sur les injections, qu'est-ce que tu veux injecter sur un script qui tourne exclusivement en cron système ? Il n'y a que $argv et des données cherchées ailleurs (réponses à des requêtes HTTP, fichiers au format XML/INI/texte/JSON/etc, ...) qui sont susceptibles d'en engendrer une.


RE: Crontab - Xenos - 10-02-2016

LEAST ouep, je me gourre à chaque coup !

Apparemment personne n'a lu ma question initiale: J'espère que ce n'est pas juste pour l'exemple et que ces variables sont en fait des constantes, car si ces données viennent de argv (ce qui est probable car Sobi a surement raccourci le code pour se concentrer sur ma query), alors oui il y a injection possible (ce sera surement pas des injections volontaires, venant de argv).



Je vais poser ma remarque autrement (parce que c'est cette idée ci-dessous que je veux faire passer): dans la query de Sobi, qu'est ce qui te dis qu'il n'y a pas d'injection? Ce n'est pas l'instruction elle-même mais l'exécution mentale du code que tu fais: tu remontes le fil d'exécution, jusqu'à la déclaration de la variable, pour en déduire "ah ben la variable étant déclarée constante ici en haut, plus bas, je n'aurai pas d'injection". Et avec ce genre de méthode, tu arrives à un méli-mélo de code injectable de partout (et une gymnastique mentale inutile).


RE: Crontab - MadMass - 10-02-2016

Oui je vois, c'est plus pour limiter les risques dus à la complexification inutile du code Smile