Résolu [php] include dans un textarea , ne pas executer le php !

Solutions (10)
Tags :
  • Script
  • Programmation
, Programmation (collector) |
Bonjours a tous !

donc voila sur mon site j'ai fais un petit script qui me permet de modifier le code source de mes page en ligne

sont principe est simple : je récupère dans $_POST['fichier'] le nom de la page ( ex : index.php )
je la place dans un textarea et a la validation du formulaire , je remplace le contenu de la page par le contenue du textarea ...

donc voila petit code qui me pose probleme ...
  1. <textarea name="post" rows="20" cols="120">
  2. <?php
  3. include($_POST['fichier']) ;
  4. ?>
  5. </textarea>';


le code php arrive exécuter dans le textarea ... et-il possible de récupérais un code brut ?

et aussi vers quel fonction doit-je me tournée pour avant de modifier le contenu du fichier , cree une sauvegarde ? ( copier un fichier , renommée , déplacer )

Merci
Contenus similaires
Meilleure solution
partage
|
Ouais c'est bien, la fonction file_get_contents() revient exactement au même que fopen,fread... elle est juste plus simple à utiliser, mais moin sécuritaire... mais c'est pas grave ça fonctionne bien quand même...

Ya par contre quelques petites choses qui pourraient être optimisées dans ton code, si tu veux bien de mes conseils..
par exemple, ton input hidden avec la valeur 'ok', il est un peu inutile, vu que tu vérifies déjà si $_POST['fichier'] contient quelque chose...

aussi, Aulieu de faire :
$backupfichier = 'old/';
$backupfichier .= $_POST['fichier'];
$backupfichier .= time();

Tu pourrais tout simplement faire :
$backupfichier = 'old/' . $_POST['fichier'] . time();


---

Ensuite, tu devrais utiliser la fonction htmlspecialchars() pour écrire le contenu de ton fichier dans ton textarea... sinon le code HTML va s'exécuter dans ta page, même s'il est dnas une balise textarea...
pour l'utiliser, dans ton echo, remplace ta ligne par :

echo htmlspecialchars(file_get_contents($_POST['fichier']));

Ne t'inquiète pas t'auras pas besoin de faire l'inverse pour remettre les bons caracteres par la suite pour l'enregistrement, ils setont déjà correcte dans ton textarea...juste ton stripslashes c'Est parfait

---

Dernière petite chose, j'imagines que tu as mis ces fichiers dans un repertoire admin par exemple, et que tu as mis un mot de passe ou un fichier .htacces...
si tu ne l'as pas fait, il faudrait le faire sinon n'importe qui peut modifier le code de tes pages, et encore pire, bypasser facilement ton select pour modfier n'importe quel page même admin.php (que tu avais enlevé de ton select)

Donc sur ce, je te souhaite bonne journée, et amuses toi bien dans ta programmation PHP, tu as l'air à bien te débrouiller! ;) 
  • Commenter cette solution |
Score
0
òh
òi
|
Dernière petite chose pour la sécurité de ton site web...
je crois que tu as mal compris ce que je voulais dire pour la page admin...
le 'ok' ne changera rien, il est tres facile de reproduire un POST qui renvois aussi un 'ok'.. et aussi facile de modifier la page admin avec ton script même s'il n'Est pas dans le select..

Il ne faut jamais faire confiance au code HTML pour la sécurité, il est controlé par le navigateur, donc par l'ordinateur du client, et non par le servuer... donc pour un petit pirate il tres facile de modifier les requetes comme on veut...
pour être sécuritaire, tu dois mettre des vérifications niveau Serveur, jamais au niveau HTML... donc un mot de passe pour entrer sur les pages de modifications, autant pour admin que pour mod-page.php (tu peux mettre le mot de passe dans une variable de session par exemple pour ne pas etre obligé de le rentrer 2 fois.)

Au plaisir de te venir en aide,
Olivier.
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
Meilleure réponse sélectionnée par andrelec1.
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
admin es bien enlever dans le select

et le ok , sert justement a vérifier que l'on es bien passer par la page admin qui possède un script de connections ...
( je sais on pourrais utilisee les variable de sessions ^^ )
bon je vais prendre les htmlspecialchars et $backupfichier = 'old/' . $_POST['fichier'] . time();

Merci
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
oups dsl je n'avais pas vue t'es deux poste... on a pas fais pareil !

moi j'ai utilisée : echo file_get_contents($_POST['fichier']);
pour retournée le code source de la page non exécuter ....
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
Merci mais j'ai fini par trouvais !
voila mon code au complet

sur la page admin de mon site :

  1. echo '<form action="mod_pag.php" method="post" >';
  2. echo '<br>';
  3. echo '<select name="fichier" size="1">';
  4. $dir = opendir("../www/" );
  5. while($file = readdir($dir))
  6. {
  7. $files = strlen($file);
  8. if ( $files > 7 AND $file!='admin.php' AND $file!='mod_pag.php' ){
  9. echo '<option>'. $file .'';
  10. }
  11. }
  12. closedir($dir);
  13. echo '</select>';
  14. echo '<br>';
  15. echo '<input name="v" type="hidden" value="ok">';
  16. echo '<input type="submit" value="ENVOYER" />';
  17. echo '</form>';


et la page mod-page.php

  1. <?php
  2. // Verification si les variable n'existe pas on la cree .
  3. if (isset($_POST['v']) AND $_POST['v']=='ok' AND isset($_POST['fichier'])){
  4. if (isset($_POST['post'])){
  5.  
  6. $backupfichier = 'old/'; //
  7. $backupfichier .= $_POST['fichier']; //
  8. $backupfichier .= time(); // Sauvegarde du fichier source
  9. if (!copy($_POST['fichier'],$backupfichier)){ //
  10. echo "erreur copy"; //
  11. } //
  12.  
  13. $monfichier = fopen($_POST['fichier'], "w"); //
  14. fputs($monfichier, stripslashes($_POST['post'])); // Modification ficher
  15. fclose($monfichier); //
  16. header('Location: admin.php'); // redirection
  17. }
  18. else{
  19. }
  20. //----
  21.  
  22. ?>
  23. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" rel="nofollow" target="_blank">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">
  24. <html xmlns="<a href="http://www.w3.org/1999/xhtml" rel="nofollow" target="_blank">http://www.w3.org/1999/xhtml</a>">
  25. <head>
  26. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  27. <title>Document sans titre</title>
  28. <link href="disgn_ad.css" rel="stylesheet" type="text/css">
  29. </head>
  30. <body>
  31. <h1>
  32. /!\ ne pas utilisée pas encor totalement operationel /!\</h1>
  33. <form action="mod_pag.php" method="post" >
  34. <textarea name="post" rows="20" cols="120">
  35. <?php
  36. echo file_get_contents($_POST['fichier']);
  37. ?>
  38. </textarea>';
  39. <br>
  40. <input name="v" type="hidden" value="ok" />
  41. <input name="fichier" type="hidden" value="<?php echo $_POST['fichier']; ?>" />
  42. <input type="submit" value="ENVOYER" />
  43. </form>
  44.  
  45.  
  46. </body>
  47. </html>
  48. <?php
  49. }
  50. //---
  51. // si non on redirige vers page admon !
  52. else{
  53. header('Location: admin.php');
  54. }
  55. ?>


donc ce script vous fais un listing de toute les page présente dans le dossier courant ! et vous permet de les modifier en ligne ...

si vous voyer des amélioration a faire dit leu !
  • Commenter cette réponse |
Score
0
òh
òi
|
Ah j'oubliais... Pour ensuite réécrire le fichier... c'est le même principe... mais avec la fonction fwrite...

Voila un exemple dans ton fichier que le Action de ton form renvoi...
disons qu'il renvois au fichier sauvegarder.php avec la methode POST et que le nom du textarea est aussi post (comme dans ton code)..
Dans ton form de ta page de modification, ajoute un input de type hidden, nommé fichier, qui va contenir le nom du fichier (avec la destination)

Voici le contenu du fichier sauvegarde.php (par exemple) :

<?php

$fichier= fopen($_POST['fichier'], "w" ); // On ouvre le fichier, à noter qu'on utilise le 2iem parametre w aulieu de r pour dire qu'on veut écrire dedans
$data = fwrite($fichier,$_POST['post']); // On Enregistre le contenu du post dans le fichier...
fclose($fichier); // On ferme le fichier

?>

Voila

Amuses toi bien
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour andrelec1,
Ce que tu veux faire est tout à fait possible.

Tu ne peux toutefois pas utiliser le include pour faire ceci car ton serveur php va exécuter le code php de la page, et en plus, le code HTML qui restera sera aussi exécuté dans ta page web par ton navigateur.... Tu dois utiliser les fonctions propres à php pour lire les fichiers..
Voici comment faire :

<textarea name="post" rows="20" cols="120">
<?php

$fichier= fopen($_POST['fichier'], "r"); // On ouvre le fichier
$data = fread($fichier,filesize($_POST['fichier'])); // On lit les données du fichier et on les place dans $data
fclose($fichier); // On ferme le fichier

echo htmlspecialchars($data); // On affiche le contenu de $data dans le textarea, tout en remplaçant automatiquement les caracteres html pour ne pas les exécuter dans le navigateur
?>
</textarea>

Et voila le tour est joué...
  • Commenter cette réponse |
Score
0
òh
òi
, Programmation (collector) |
n'y a t'il pas une autre commande semblable a input() ? qui n'exécuterais pas le code ?
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,

Dans ton fichier include, remplace <? par < ;?
Par contre ca ne s'éxécutera pas non plus, sur ta vrai page...

Je vois pas trop de solution!

Pour ton autre question: je pense que cecie peut t'aider http://blog.studiovitamine.com/actualite,107,fr/creer-f...
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS