PHP CHMOD Avec $_POST
Résolu
Bilow
Messages postés
1014
Date d'inscription
Statut
Membre
Dernière intervention
-
Bilow Messages postés 1014 Date d'inscription Statut Membre Dernière intervention -
Bilow Messages postés 1014 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Php chmod 777
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Chmod - r 777 ✓ - Forum Ubuntu
- Alert php ✓ - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
4 réponses
Salut,
T'as différents fonctions, tel que system(), ou exec() (voir le manuel : http://ch2.php.net/manual/en/function.system.php).
Fait quand même très attention à comment du passe le nom de fichier, ça risque d'être utilisé pour prendre contrôle de ton serveur si tu ne le fais pas correctement (ne fait pas un $_GET['$file'], c'est très mauvais, mais plutôt une liste de fichiers ou dossier qui peuvent être modifiés (avec un switch() par exemple)).
T'as différents fonctions, tel que system(), ou exec() (voir le manuel : http://ch2.php.net/manual/en/function.system.php).
Fait quand même très attention à comment du passe le nom de fichier, ça risque d'être utilisé pour prendre contrôle de ton serveur si tu ne le fais pas correctement (ne fait pas un $_GET['$file'], c'est très mauvais, mais plutôt une liste de fichiers ou dossier qui peuvent être modifiés (avec un switch() par exemple)).
Salut !
Exec et system sont des fonctions qui sont bannies sur mon hebergeur (one.com).
Ne t'inquiete pas, je ne suis pas con au point de laisser n'importe qui prendre le controle du serveur. Le fichier provient d'une liste prédéfinie, et il faut un mot de passe pour accéder à la page. Et j'ai encore l'une ou l'autre sécurité avant d'arriver à cette ligne.
J'avais déjà pensé a php.net, j'avais déjà vu que le décimal était incorrect. Voila pourquoi je poste un message.
Nous voici maintenant enfin là où on doit etre : le coeur du sujet. Il faut convertir une chaine en nombre, et ensuite en octal. C'est là que je coincais. Je vais maintenant essayer, et je vous direz quoi.
Merci !
Exec et system sont des fonctions qui sont bannies sur mon hebergeur (one.com).
Ne t'inquiete pas, je ne suis pas con au point de laisser n'importe qui prendre le controle du serveur. Le fichier provient d'une liste prédéfinie, et il faut un mot de passe pour accéder à la page. Et j'ai encore l'une ou l'autre sécurité avant d'arriver à cette ligne.
J'avais déjà pensé a php.net, j'avais déjà vu que le décimal était incorrect. Voila pourquoi je poste un message.
Nous voici maintenant enfin là où on doit etre : le coeur du sujet. Il faut convertir une chaine en nombre, et ensuite en octal. C'est là que je coincais. Je vais maintenant essayer, et je vous direz quoi.
Merci !
Je n'y arrives pas...
Pour éxécuter intval($param) en base 8, c'est intval($param, 8).
Donc, j'arrives avec $chaine = $_POST['new_chmod'];
On oublie temporairement les sécurités.
$chaine vaut "775" (il n'y a pas de zéro avant, l'utilisateur est averti). J'en rajoute un : $chaine = "0" . $chaine; Maintenant, $chaine vaut "0775";
J'aurais aussi pu, tout de suite, avoir un nombre : $nombre = (int)$chaine;
Donc, je me retrouve avec $chaine = "0775" et $nombre = 775;
Que faire maintenant ?
Une petite liste de résultats qui peuvent etre intéressants :
Edit : Je viens de découvrir la fonction decoct(); Je vais un peu regarder.
Pour éxécuter intval($param) en base 8, c'est intval($param, 8).
Donc, j'arrives avec $chaine = $_POST['new_chmod'];
On oublie temporairement les sécurités.
$chaine vaut "775" (il n'y a pas de zéro avant, l'utilisateur est averti). J'en rajoute un : $chaine = "0" . $chaine; Maintenant, $chaine vaut "0775";
J'aurais aussi pu, tout de suite, avoir un nombre : $nombre = (int)$chaine;
Donc, je me retrouve avec $chaine = "0775" et $nombre = 775;
Que faire maintenant ?
Une petite liste de résultats qui peuvent etre intéressants :
intval(755, 8) = 755 intval(0755, 8) = 509 intval("755", 8) = 509 intval("0755", 8) = 509
Edit : Je viens de découvrir la fonction decoct(); Je vais un peu regarder.
C'est bon, j'ai trouvé !
En fait, il faut envoyer, comme prévu, une valeur octale à chmod(); Mais si on lui donne une valeur décimale, ca le convertit !
Il faut donc envoyer une valeur décimale, qui n'a rien à voir avec notre vrai chmod, et chmod() la convertira en octal correct.
Voici donc un code avec des exemples des fonctions setchmod et getchmod que j'ai créées, et qui sont bien pratiques :
Observez qu'on envoi une valeur décimale à chmod(); On la converti en "sur"-décimale, puis le chmod s'occupe de la convertir en octale, qui en fait sera décimale, ce qui nous arrange bien.
Au final, on trompe chmod();
C'est un peu dur à comprendre, mais ca fonctionne ! :D
Merci !
En fait, il faut envoyer, comme prévu, une valeur octale à chmod(); Mais si on lui donne une valeur décimale, ca le convertit !
Il faut donc envoyer une valeur décimale, qui n'a rien à voir avec notre vrai chmod, et chmod() la convertira en octal correct.
Voici donc un code avec des exemples des fonctions setchmod et getchmod que j'ai créées, et qui sont bien pratiques :
<?php function setchmod($file, $int_chmod){ return chmod($file, octdec($int_chmod)); } function getchmod($file){ return (int)substr(sprintf('%o', fileperms($file)), -4); } setchmod("index.php", 775); echo getchmod("index.php"); // Renvoi 775 $chaine = $_POST['new_chmod']; // "777" $nombre = (int)$chaine; // 777 setchmod("fichier", $nombre); echo getchmod("fichier"); // Renvoi 777 (en int) ?>
Observez qu'on envoi une valeur décimale à chmod(); On la converti en "sur"-décimale, puis le chmod s'occupe de la convertir en octale, qui en fait sera décimale, ce qui nous arrange bien.
Au final, on trompe chmod();
C'est un peu dur à comprendre, mais ca fonctionne ! :D
Merci !
voir
https://www.php.net/manual/fr/function.chmod.php
Ben alors il n'y a pas de question, puisque la réponse se trouve dans le premier poste non ?
Ou j'ai loupé quelque chose ... ?
Edit : J'ai compris le problème ... ^^
Le deuxième paramètre est un int.
Tu dois donc caster ta variable en int comme ça :
ou
J'ai pas essayé. Dis si ça ne va pas.
Par contre, la doc indique qu'une notation en décimale risque d'être correcte. Essaye de voir avec la fonction intval, et de changer la base en base 8.
A voir.