begin process at 2012 05 27 17:44:11
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Javascript / DHTML

 > PETIT CLIENT + AJAX + PHP

PETIT CLIENT + AJAX + PHP


 Description

Cliquez pour voir la capture en taille normale
Permet d'executer des commandes via la commande shell_exec(), Les requettes qui sont envoyer via la page html au script php.

Pour le fonctionnement, deux fichiers.
shell.php qui execute $_GET['shell']; et affiche le resultat.
et le fichier shell.html qui permet d'envoyer la requette au script php qui permet l'affiche du resultat de la commande, via XMLHttpRequest.

Source

  • shell.html :
  • <html>
  • <head>
  • <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  • <style type="text/css">
  • body { background-color:black; color:white; font-size:10px; }
  • pre { padding-top:2px; }
  • #input_ { border:1px solid black; width:70%; background-color:black; color:white; }
  • #status { display:block; position:fixed; right:1px; bottom:1px; background-color:red; }
  • </style>
  • <script type="text/javascript">
  • //AJAX
  • var FILE_SCRIPT="shell.php"
  • function status_write(txt)
  • {
  • document.getElementById('status').innerHTML=txt;
  • }
  • function getXhr()
  • {
  • var xhr = null;
  • if(window.XMLHttpRequest) // Firefox et autres
  • xhr = new XMLHttpRequest();
  • else if(window.ActiveXObject){ // Internet Explorer
  • try {
  • xhr = new ActiveXObject("Msxml2.XMLHTTP");
  • } catch (e) {
  • xhr = new ActiveXObject("Microsoft.XMLHTTP");
  • }
  • }
  • else {
  • status_write("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  • xhr = false;
  • }
  • return xhr;
  • }
  • function ajax_load() //quand ca charge
  • {
  • status_write("Chargement en cours ...");
  • }
  • function ajax_end(){ // quand ca a fini
  • status_write("Chargement terminé");
  • }
  • function wget(get)
  • {
  • var xhr_object=getXhr();
  • ajax_load();
  • xhr_object.open("GET", get, false);
  • xhr_object.setRequestHeader("Content-type","text/html ; charset=utf-8");
  • xhr_object.send(null);
  • ajax_end();
  • if(xhr_object.readyState == 4)
  • return (xhr_object.responseText);
  • }
  • //FIN AJAX
  • function submit_f()
  • {
  • document.getElementById('txt').innerHTML=root+input+"\n"+wget(FILE_SCRIPT+"?shell="+encodeURIComponent(document.getElementById("input_").value)+"");
  • document.getElementById('input_').focus();
  • return false;
  • }
  • var root="<span style='color:red'>root@kiki67100</span>:<span style='color:blue'>~</span># ";
  • var input="<input name='s' type='text' id='input_'>";
  • window.onload=function()
  • {
  • document.getElementById("txt").innerHTML=root+input;
  • document.getElementById("input_").focus();
  • }
  • </script>
  • </head>
  • <body>
  • <div id="status"></div>
  • <form name="form" onsubmit="return submit_f()" >
  • <pre id="txt"></pre>
  • </form>
  • </body>
  • </html>
  • shell.php :
  • <?php
  • if(isset($_GET['shell']))
  • echo shell_exec($_GET['shell']);
  • ?>
shell.html :

<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
body 	{ background-color:black; color:white; font-size:10px;				}
pre  	{ padding-top:2px; 								}
#input_ { border:1px solid black; width:70%; background-color:black; color:white; 	}
#status { display:block; position:fixed; right:1px; bottom:1px;  background-color:red;  }
</style>
<script type="text/javascript">
//AJAX
var FILE_SCRIPT="shell.php"

function status_write(txt)
{
	document.getElementById('status').innerHTML=txt;
}

function getXhr()
{
	var xhr = null; 
	if(window.XMLHttpRequest) // Firefox et autres
		xhr = new XMLHttpRequest(); 
	else if(window.ActiveXObject){ // Internet Explorer 
		try {
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		 } catch (e) {
			xhr = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	else { 
		status_write("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
		xhr = false; 
	} 
return xhr;
}

function ajax_load() //quand ca charge
{ 
	status_write("Chargement en cours ...");
} 
function ajax_end(){ // quand ca a fini
	status_write("Chargement terminé");
}
function wget(get)
{ 
	var xhr_object=getXhr();
	ajax_load();
	xhr_object.open("GET", get, false);
	xhr_object.setRequestHeader("Content-type","text/html ; charset=utf-8");
	xhr_object.send(null);
	ajax_end();
	if(xhr_object.readyState == 4) 
		return (xhr_object.responseText);    
}

//FIN AJAX

function submit_f()
{
	document.getElementById('txt').innerHTML=root+input+"\n"+wget(FILE_SCRIPT+"?shell="+encodeURIComponent(document.getElementById("input_").value)+"");
	document.getElementById('input_').focus();

	return false;
}

var root="<span style='color:red'>root@kiki67100</span>:<span style='color:blue'>~</span># ";
var input="<input name='s' type='text' id='input_'>";

window.onload=function()
{	
	document.getElementById("txt").innerHTML=root+input;
	document.getElementById("input_").focus();
}

</script>
</head>
<body>
<div id="status"></div>
<form name="form" onsubmit="return submit_f()" >
<pre id="txt"></pre>
</form>
</body>
</html>

shell.php :

<?php
if(isset($_GET['shell']))
	echo shell_exec($_GET['shell']);
?>

 Conclusion

Le script ne gère pas tous ce qui est "intéractif" ( nano, vi, dialog ...).

Si vous voulez changer le nom du script php changer juste la variable "FILE_SCRIPT" par ce que vous voulez.

À vos clavier.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

INCLUDE "SECURISÉ" VIA FICHIER INI FACILEMENT EDITABLE
Source avec Zip NAVIGATEUR FTP
Source avec Zip Source avec une capture EXPLORATEUR DE FICHIER PHP
CHECK MSN VERIFIE SI UNE PERSONNE EST CONNECTÉ SUR MSN
Source avec Zip SCRIPT ANTI ASPIRATEUR SANS BDD

 Sources de la même categorie

Source avec Zip Source avec une capture PHPJSVFORM : DES CLASSES PHP, DES JAVASCRIPTS POUR CRÉER FAC... par synanceia
BOUTON POUR SITE WEB PAYMENT par Tom56340
Source avec Zip Source avec une capture BOÎTE À ONGLETS / MENUS ET SOUS-MENUS / JAVASCRIPT / PHP / D... par Heirem
Source avec Zip Source avec une capture JUKEBOX EN LIGNE par Flachy Joe
Source avec Zip Source avec une capture ONGLET GÉNÉRÉ EN PHP ET REQUETE AJAX par djmmix

 Sources en rapport avec celle ci

INFORMATION SUR L'UTILISATEUR par sephirothgeek
Source avec Zip Source avec une capture TODO LIST (AJAX/PHP5) par VinceMonkeyz
Source avec Zip CLIENT / SERVEUR : LES SOCKETS par Morphinof
Source avec Zip Source avec une capture GESTION CLIENT ESTS par marocbaladeuse
Source avec Zip Source avec une capture SYSTEM DE VOTE AJAX. par Dav_c

Commentaires et avis

Commentaire de codefalse le 03/02/2009 21:58:00 administrateur CS

En fait, j'aurai une seule question : pourquoi faire ?? Non, vraiment, je suis curieux ! :)

Parce qu'en lisant ta source, j'ai tous mes capteurs orientés sécurité qui clignotent rouge dans tous les sens :p

Commentaire de kiki67100 le 03/02/2009 22:19:30

CODEFALSE, je n'ai pas penser à le securité dans ce code ( encore heureux ..). J'ai trouver le résultat assez sympa, alors je l'ai partager.

Commentaire de neigedhiver le 03/02/2009 23:35:21

Salut,

Penser sécurité c'est OBLIGATOIRE, INDISPENSABLE et CAPITAL quand on exécute directement une commande shell qui vient d'une entrée utilisateur !!
Ne pas le faire, c'est mettre son serveur ENTIER en danger !
Avertissement donc : cette source est dangereuse en l'état, ne l'utiliser qu'en local à des fins didactiques !

Du coup, j'ai même pas regardé tellement shell.php est une monstruosité, l'exemple type de ce qu'il ne FAUT PAS faire... Désolé...

Commentaire de codefalse le 04/02/2009 00:22:41 administrateur CS

A mon avis, ton code aurait plus ses chances (j'ai pas dit TOUTES ses chances), du côté Javascript de Codes-Sources.
Car sur Phpcs, si l'on ne regarde que le côté PHP, il n'y a qu'une condition et une fonction appelée.

Si l'on veux pousser le vice, il n'y a aucun tests effecutés sur le retour de la fonction, aucune action effectuée si la condition n'est pas remplie, aucuns tests de sécurité (même si ce n'était pas à l'ordre du jour, je te l'accorde).

Je (on) ne veux pas te décourager de ton travail. Je sais que lorsque l'on publie une de ces sources, c'est parce que l'on en est fier. Mais imagine toi crée une petite bête toute mignone, tu as raison d'être fier de toi, tellement que tu veux la déposer dans la savane. Je te laisse imaginer la suite ? ;)

Il ne faut pas te décourager !

Commentaire de winwarrior le 04/02/2009 00:29:04

Il suffit de rajouter un htaccess dans le dossier et voilà, plus de problème de sécurité.. Par contre j'aurais plutot mis ce code sur javascriptfr (vu le peu de php).

Sinon quelques idées d'amélirations :

- var root="<span style='color:red'>root@kiki67100</span>:<span style='color:blue'>~</span># ";
T'as des commandes unix pour recuperer le vrai utilisateur (whoami) et le vrai host (hostname), ça pourrait être sympa qu'il le récupere dynamiquement au chargement du script..

- Pareil pour le nom du dossier, "~" c'est le dossier utilisateur, ça pourrait être sympa qu'il indique le dossier courant (pwd), comme un vrai shell

- Pareil pour le "#" qui indique que l'utilisateur est root.. Ca parrait peu probable pour un serveur web, je pense que dans 99,9% des cas, un "$" serait plus convenable

- Pourquoi avoir créé les fonctions ajax_load() et ajax_end() comme elles sont appellées qu'a un seul endroit (une fois) ?

- Tant qu'à faire, pourquoi ne pas se passer de shell.php et rester sur la meme page, genre en haut de la page: "if(isset($_GET['shell'])) { echo shell_exec($_GET['shell']); die(); }"

- Un dernier truc sympa (et l'interet que ça aurait eu de le faire en ajax plutot qu'avec une banale iframe), ça aurait été de garder un historique des commandes passées

Bon courage,
@+

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Select box + php + ajax [ par geek1983 ] Bonjour, j'ai une petite question.J'utilise php/mysql pour populer un select box de ce type:&lt;select name="client" id="client"&gt;    &lt;option&gt; Client IRC en PHP AJAX (ou Javascript) [ par OscarWell ] Bonjour, Je suis à la recherche d'un client IRC entièrement écrit en PHP / AJAX. Je ne veux surtout pas un client en Flash ou Applet Java. J'ai beau PHP/AJAX : Affichage des sessions définies dans le fichier de requêtes AJAX [ par cla85 ] Bonjour, Je pensais faire un script simple en php / ajax, mais je me retrouve à galérer avec les sessions : Il s'agit d'un formulaire (formulaire.php) probleme message d erreur [ par aureliemerlin ] Bonjour Voici mon problème : 1ére étape : j'affiche ma liste de client (jusque la pas de problème) 2éme étape : je clique sur une ligne pour modifie probleme récupération numéro [ par aureliemerlin ] Bonjour Lorsque je crée un client je voudrais récupérer son numéro pour l'insérer dans un champ de la même table voici le code que je fais mais j'a aide comment faire des autres tableau dans cette base qui est crée automatiquement [ par anissaied ] Principale GESTIONDECLIENT <?php $connect=mysql_connect("localhost", "root", "") or requete Limit ou not in ? [ par gfpl ] Bonjour, J'ai un problème. je m'explique j'ai une facturation a gérer il génère une facture par mois en regroupant les factures par mois par clien Impression serveur/client [ par kwyzix ] Bonjour, Je suis en train de faire un logiciel en PHP avec base de donnée MYSQL (et un peu de JAVASCRIPT). Je génère des impressions en PDF avec FPDF Notation avec etoiles et Ajax [ par KasPe ] Salut à tous et merci de m'aider, J'essaye de débuter avec Ajax. Dans cet exemple je cherche à faire un bête système de notation avec des étoiles, le Développer un client Web XMPP [ par demsking ] Je veux développer une messagerie instantanée Web (de préférence en AJAX -PHP,JavaScript,XML-) basée sur le protocole XMPP. Le truc c'est que je ne sa


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales