Accueil > > > CODEC D'OBFUSCATION DE LIEN HTML (PHP5)
CODEC D'OBFUSCATION DE LIEN HTML (PHP5)
Information sur la source
Description
Il est souvent dangereux d'envoyer en clair les paramètres d'appels d'une pages html car celà donne des indications à tout le monde sur comment ils sont formés et comment on peut les exploiter pour trouver des failles dans le script. Les mettre en base64 n'empêche toujours pas d'en connaitre la nature, mais ça complique un peut les choses, et un hacker ou un pirate, c'est un flemmard : s'il n'y a pas grand chose à piquer, il préfèra aller ailleur où c'est moins sécurisé et/ou là où il y a plus a prendre ;) (parceque se taper une page de lien à décoder puis à mettre en action et à recoder avant de les injecter dans le browser, ça demande du temps...) Un niveau supérieur de sécurité est prévu : mélange des paramètres en base64 avec une chaine aléatoire et stockée dans la base de données en correspondance avec le numéro de session (ex: table session(id_session:char(255),not null;chaine_cryptage:char(255))) J'y reviendrais plus tard quand je serais devenu plus parano
Source
- <?php
-
- /*
- ///////////////////////////////////
- // Copyright LE DREFF Nicolas 2009
- // Libre d'utilisation à condition de conserver cette mention
- // Merci
- // http://www.phpcs.com/codes/CODEC-OBFUSCATION-LIEN-HTML_49615.aspx
- /////////////////////////////////
- // Classe 'codec' permettant de gérer des liens au format base64
- // Exemple d'utilisation:
- ////////////////////////////////
- // ex 1:
- // custumization des paramètres; Vous pouvez y mettre ce que vous voulez
- ///////////////////////////////
- <?php
- $anchor_html = new anchor_html();
-
- $anchor_html->anchor_web_page = 'upload_document.php';
-
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'doc_type','anchor_parameter_value'=>DOC_IMAGE);
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'to_do','anchor_parameter_value'=>'scale');
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'img_landscape_max_width','anchor_parameter_value'=>800);
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'img_portrait_max_height','anchor_parameter_value'=>800);
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'thumbnails_div','anchor_parameter_value'=>'');
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'id_image','anchor_parameter_value'=>'image_big');
- $anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'accepted_mimes','anchor_parameter_value'=>'jpg::gif::png');
-
- $anchor_64_base = $anchor_html->get_anchor_html();
- //echo $anchor_html->anchor_parameters_64_base;
- //echo base64_decode($anchor_html->anchor_parameters_64_base);
- //exit;
- $anchor_html->reset_anchor();
- ?>
- <iframe id="image_upload" width="600px" height="50px" src="<?php echo $anchor_64_base;?>" frameborder="0"></iframe>
- //////////////////////////////////////
- // ex 2:
- // le lien provient d'une base de données et est donc 'figé'. !!!!!!DOIT DEJA ETRE ASSAINI AVEC rawurlencode()!!!!!!!
- /////////////////////////////////////
- $menus_html_anchor_array = new anchor_html();
- $menus_html_anchor_array = explode('?',$this->menus_list[$this->index_menus_list]['menus_lien']);
- $anchor_html->anchor_fil_arianne = $_SERVER['REQUEST_URI'];
- $anchor_html->anchor_web_page = $menus_html_anchor_array[0];
- $anchor_html->anchor_parameters_html = $menus_html_anchor_array[1];
- $anchor_64_base = $anchor_html->get_menus_anchor_html();
-
- $this->user_menus_content .= '<p class="' . $this->menu_deep_array[($this->menus_deep*2)-1] . '" basic_class="' . $this->menu_deep_array[($this->menus_deep*2)-1] . '" href="' . $anchor_64_base . '" target="iframe_content" type="' . MENUS_DATA_TYPE_ANCHOR_LABEL . '" style="cursor:pointer" onmouseover="this.setAttribute(\'class\',\'' . $this->menu_deep_array[($this->menus_deep*2)-1] . '_over\')" onmouseout="this.setAttribute(\'class\',\'' . $this->menu_deep_array[($this->menus_deep*2)-1] . '\')" id="' . $id_link . '" >' . $label_to_display_root . $this->menus_list[$this->index_menus_list]['menus_label'] . '</p>' . "\n";
-
- //////////////////////////////////////
- // dans la page appellée il faut ajouter ceci pour avoir la liste des paramètres sous forme de variables globales (unserialized) du même nom
- /////////////////////////////////////
-
- <?php
-
- if(test_param($_GET['param'],TEST_ALPHA)){
- $anchor_html = new anchor_html();
- $anchor_html->anchor_parameters_64_base = $_GET['param'];
- $anchor_html->get_anchor_parameters();
- foreach($anchor_html->anchor_parameters as $anchor_parameters_index=>$anchor_parameters_value){
- $name = $anchor_parameters_value['anchor_parameter_name'];
- $value = $anchor_parameters_value['anchor_parameter_value'];
- $$name = $value;
- }
- }
- ?>
- */
-
- class anchor_html
- {
- public $anchor_web_page; // la page vers où je veux faire pointer mon lien
- public $anchor_parameters; // un tableau d'élements 'ancre' => array(array('anchor_parameter_name'=>'doc_type','anchor_parameter_value'=>DOC_IMAGE),array(...));
- public $anchor_parameters_html; // la chaine contenant les paramètres d'appels assainis avec rawurlencode et séparés par des '&'
- public $anchor_parameters_64_base; // la chaine contenant les paramètres d'appels au format base64
- public $anchor_html; // l'ancre complète avec la page d'appel et les paramètres en base64
- public $anchor_fil_arianne; // possibilité d'inserer une lien de retour en base64
-
- function __construct() // no comments
- {
- $this->anchor_web_page = '';
- $this->anchor_parameters = NULL;
- $this->anchor_parameters_html = '';
- $this->anchor_html = '';
- $this->anchor_fil_arianne = '';
- $this->anchor_parameters_64_base = '';
- }
-
- // cette fonction permet de nettoyer l'objet pour une deuxième utilisation
- function reset_anchor()
- {
- $this->__construct();
- }
-
- // on assemble les morceaux pour avoir une url propre
- function build_anchor_parameters_html()
- {
- $this->anchor_parameters_html = ''; // juste pour le cas où...
-
- $head_char = ''; // le premier paramètre d'appel ne sera pas précédé du '&'
- if(!empty($this->anchor_parameters)) // des paramètres d'appels?
- {
- $nb_paramters = count($this->anchor_parameters); // oui? combien?
- for($boucle_parameters = 0;$boucle_parameters < $nb_paramters;$boucle_parameters++) // on boucle
- {
- $this->anchor_parameters_html .= $head_char . $this->anchor_parameters[$boucle_parameters]['anchor_parameter_name'] . '=' . rawurlencode($this->anchor_parameters[$boucle_parameters]['anchor_parameter_value']); //construction du paramètre assaini
- $head_char = '&'; // si paramètre suivant il y a, le '&' le précèdera...
- }
- }
- if(!empty($this->anchor_fil_arianne)) //url de retour?
- {
- $this->anchor_parameters_html .= $head_char . 'fil_arianne=' . base64_encode($this->anchor_fil_arianne); // on rajoute le tout au lien en cours
- }
-
- //echo '-à-' . $this->anchor_parameters_html . '-à-';
- //exit();
- return($this->anchor_parameters_html); // byebye
- }
-
- // demande d'assemblage de l'ancre finale
- function build_anchor_html()
- {
- $this->anchor_html = $this->anchor_web_page . '?param='; // début du lien
- $this->anchor_html .= $this->encode_anchor_parameters_64_base(); // ajout des paramètres en base64
- return($this->anchor_html);
- }
-
- // demande d'assemblage de l'ancre finale pour les menus stocké en BDD qui ont donc une liste de paramètres déja assemblé
- function build_menus_anchor_html()
- {
- $this->anchor_html = $this->anchor_web_page . '?param='; // début du lien
- $this->anchor_html .= $this->encode_menus_anchor_parameters_64_base(); // ajout des paramètres en base64
- return($this->anchor_html);
- }
-
- // demande d'encodage des paramètres
- function encode_anchor_parameters_64_base()
- {
- $this->anchor_parameters_64_base = base64_encode($this->build_anchor_parameters_html()); // assemblage et conversion des paramètres
- return($this->anchor_parameters_64_base);
- }
- // demande d'encodage des paramètres déjà assemblé
- function encode_menus_anchor_parameters_64_base()
- {
- $this->anchor_parameters_64_base = base64_encode($this->anchor_parameters_html); // conversion des paramètres
- return($this->anchor_parameters_64_base);
- }
-
- // demande de décodage des paramètres base64
- function decode_anchor_64_base()
- {
- $this->anchor_parameters_html = base64_decode($this->anchor_parameters_64_base); // decodage de l'ancre
- return($this->anchor_parameters_html);
- }
-
- // demande de restitution des paramètres base64 en tableau
- function get_anchor_parameters()
- {
- $anchor_html_array = explode('&',$this->decode_anchor_64_base()); // on découpe les paramètres
- $this->anchor_parameters = NULL; // on vide le tableau pour éviter les surprises
- if(!empty($anchor_html_array)) // des paramètres?
- {
- $nb_paramters = count($anchor_html_array); // oui? combien?
- for($boucle_parameters = 0;$boucle_parameters < $nb_paramters;$boucle_parameters++) // on boucle
- {
- $anchor_parameter = explode('=',$anchor_html_array[$boucle_parameters]); // séparation des paramètres et de leur valeur
- $this->anchor_parameters[] = array('anchor_parameter_name'=>$anchor_parameter[0],'anchor_parameter_value'=>rawurldecode($anchor_parameter[1])); // remplissage du tableau
- }
- }
- return($this->anchor_parameters);
-
- }
-
- function get_anchor_html()
- {
- return($this->build_anchor_html()); // restitution de la variable $anchor_html
- }
- function get_menus_anchor_html()
- {
- return($this->build_menus_anchor_html()); // restitution de la variable $menus_anchor_html
- }
- }
- ?>
<?php
/*
///////////////////////////////////
// Copyright LE DREFF Nicolas 2009
// Libre d'utilisation à condition de conserver cette mention
// Merci
// http://www.phpcs.com/codes/CODEC-OBFUSCATION-LIEN-HTML_49615.aspx
/////////////////////////////////
// Classe 'codec' permettant de gérer des liens au format base64
// Exemple d'utilisation:
////////////////////////////////
// ex 1:
// custumization des paramètres; Vous pouvez y mettre ce que vous voulez
///////////////////////////////
<?php
$anchor_html = new anchor_html();
$anchor_html->anchor_web_page = 'upload_document.php';
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'doc_type','anchor_parameter_value'=>DOC_IMAGE);
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'to_do','anchor_parameter_value'=>'scale');
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'img_landscape_max_width','anchor_parameter_value'=>800);
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'img_portrait_max_height','anchor_parameter_value'=>800);
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'thumbnails_div','anchor_parameter_value'=>'');
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'id_image','anchor_parameter_value'=>'image_big');
$anchor_html->anchor_parameters[] = array('anchor_parameter_name'=>'accepted_mimes','anchor_parameter_value'=>'jpg::gif::png');
$anchor_64_base = $anchor_html->get_anchor_html();
//echo $anchor_html->anchor_parameters_64_base;
//echo base64_decode($anchor_html->anchor_parameters_64_base);
//exit;
$anchor_html->reset_anchor();
?>
<iframe id="image_upload" width="600px" height="50px" src="<?php echo $anchor_64_base;?>" frameborder="0"></iframe>
//////////////////////////////////////
// ex 2:
// le lien provient d'une base de données et est donc 'figé'. !!!!!!DOIT DEJA ETRE ASSAINI AVEC rawurlencode()!!!!!!!
/////////////////////////////////////
$menus_html_anchor_array = new anchor_html();
$menus_html_anchor_array = explode('?',$this->menus_list[$this->index_menus_list]['menus_lien']);
$anchor_html->anchor_fil_arianne = $_SERVER['REQUEST_URI'];
$anchor_html->anchor_web_page = $menus_html_anchor_array[0];
$anchor_html->anchor_parameters_html = $menus_html_anchor_array[1];
$anchor_64_base = $anchor_html->get_menus_anchor_html();
$this->user_menus_content .= '<p class="' . $this->menu_deep_array[($this->menus_deep*2)-1] . '" basic_class="' . $this->menu_deep_array[($this->menus_deep*2)-1] . '" href="' . $anchor_64_base . '" target="iframe_content" type="' . MENUS_DATA_TYPE_ANCHOR_LABEL . '" style="cursor:pointer" onmouseover="this.setAttribute(\'class\',\'' . $this->menu_deep_array[($this->menus_deep*2)-1] . '_over\')" onmouseout="this.setAttribute(\'class\',\'' . $this->menu_deep_array[($this->menus_deep*2)-1] . '\')" id="' . $id_link . '" >' . $label_to_display_root . $this->menus_list[$this->index_menus_list]['menus_label'] . '</p>' . "\n";
//////////////////////////////////////
// dans la page appellée il faut ajouter ceci pour avoir la liste des paramètres sous forme de variables globales (unserialized) du même nom
/////////////////////////////////////
<?php
if(test_param($_GET['param'],TEST_ALPHA)){
$anchor_html = new anchor_html();
$anchor_html->anchor_parameters_64_base = $_GET['param'];
$anchor_html->get_anchor_parameters();
foreach($anchor_html->anchor_parameters as $anchor_parameters_index=>$anchor_parameters_value){
$name = $anchor_parameters_value['anchor_parameter_name'];
$value = $anchor_parameters_value['anchor_parameter_value'];
$$name = $value;
}
}
?>
*/
class anchor_html
{
public $anchor_web_page; // la page vers où je veux faire pointer mon lien
public $anchor_parameters; // un tableau d'élements 'ancre' => array(array('anchor_parameter_name'=>'doc_type','anchor_parameter_value'=>DOC_IMAGE),array(...));
public $anchor_parameters_html; // la chaine contenant les paramètres d'appels assainis avec rawurlencode et séparés par des '&'
public $anchor_parameters_64_base; // la chaine contenant les paramètres d'appels au format base64
public $anchor_html; // l'ancre complète avec la page d'appel et les paramètres en base64
public $anchor_fil_arianne; // possibilité d'inserer une lien de retour en base64
function __construct() // no comments
{
$this->anchor_web_page = '';
$this->anchor_parameters = NULL;
$this->anchor_parameters_html = '';
$this->anchor_html = '';
$this->anchor_fil_arianne = '';
$this->anchor_parameters_64_base = '';
}
// cette fonction permet de nettoyer l'objet pour une deuxième utilisation
function reset_anchor()
{
$this->__construct();
}
// on assemble les morceaux pour avoir une url propre
function build_anchor_parameters_html()
{
$this->anchor_parameters_html = ''; // juste pour le cas où...
$head_char = ''; // le premier paramètre d'appel ne sera pas précédé du '&'
if(!empty($this->anchor_parameters)) // des paramètres d'appels?
{
$nb_paramters = count($this->anchor_parameters); // oui? combien?
for($boucle_parameters = 0;$boucle_parameters < $nb_paramters;$boucle_parameters++) // on boucle
{
$this->anchor_parameters_html .= $head_char . $this->anchor_parameters[$boucle_parameters]['anchor_parameter_name'] . '=' . rawurlencode($this->anchor_parameters[$boucle_parameters]['anchor_parameter_value']); //construction du paramètre assaini
$head_char = '&'; // si paramètre suivant il y a, le '&' le précèdera...
}
}
if(!empty($this->anchor_fil_arianne)) //url de retour?
{
$this->anchor_parameters_html .= $head_char . 'fil_arianne=' . base64_encode($this->anchor_fil_arianne); // on rajoute le tout au lien en cours
}
//echo '-à-' . $this->anchor_parameters_html . '-à-';
//exit();
return($this->anchor_parameters_html); // byebye
}
// demande d'assemblage de l'ancre finale
function build_anchor_html()
{
$this->anchor_html = $this->anchor_web_page . '?param='; // début du lien
$this->anchor_html .= $this->encode_anchor_parameters_64_base(); // ajout des paramètres en base64
return($this->anchor_html);
}
// demande d'assemblage de l'ancre finale pour les menus stocké en BDD qui ont donc une liste de paramètres déja assemblé
function build_menus_anchor_html()
{
$this->anchor_html = $this->anchor_web_page . '?param='; // début du lien
$this->anchor_html .= $this->encode_menus_anchor_parameters_64_base(); // ajout des paramètres en base64
return($this->anchor_html);
}
// demande d'encodage des paramètres
function encode_anchor_parameters_64_base()
{
$this->anchor_parameters_64_base = base64_encode($this->build_anchor_parameters_html()); // assemblage et conversion des paramètres
return($this->anchor_parameters_64_base);
}
// demande d'encodage des paramètres déjà assemblé
function encode_menus_anchor_parameters_64_base()
{
$this->anchor_parameters_64_base = base64_encode($this->anchor_parameters_html); // conversion des paramètres
return($this->anchor_parameters_64_base);
}
// demande de décodage des paramètres base64
function decode_anchor_64_base()
{
$this->anchor_parameters_html = base64_decode($this->anchor_parameters_64_base); // decodage de l'ancre
return($this->anchor_parameters_html);
}
// demande de restitution des paramètres base64 en tableau
function get_anchor_parameters()
{
$anchor_html_array = explode('&',$this->decode_anchor_64_base()); // on découpe les paramètres
$this->anchor_parameters = NULL; // on vide le tableau pour éviter les surprises
if(!empty($anchor_html_array)) // des paramètres?
{
$nb_paramters = count($anchor_html_array); // oui? combien?
for($boucle_parameters = 0;$boucle_parameters < $nb_paramters;$boucle_parameters++) // on boucle
{
$anchor_parameter = explode('=',$anchor_html_array[$boucle_parameters]); // séparation des paramètres et de leur valeur
$this->anchor_parameters[] = array('anchor_parameter_name'=>$anchor_parameter[0],'anchor_parameter_value'=>rawurldecode($anchor_parameter[1])); // remplissage du tableau
}
}
return($this->anchor_parameters);
}
function get_anchor_html()
{
return($this->build_anchor_html()); // restitution de la variable $anchor_html
}
function get_menus_anchor_html()
{
return($this->build_menus_anchor_html()); // restitution de la variable $menus_anchor_html
}
}
?>
Conclusion
Il est clair que c'est du basic mais ça marche plutôt pas mal. Outre de ralentir le processus de hackage, ça présente l'avantage de permettre de former des url complexes avec autant de paramètres que l'on veux avec sans se prendre la tête à mettre du rawurlencode() partout.
Reste à faire: -possibilité de passer des tableaux ou des objets (si, si, c'est possible comme ça) -possibilité de choisir le mode soit obfuscation, soit cryptage, soit en clair
Historique
- 02 avril 2009 10:02:45 :
- -Ajout du terme php5 dans le titre et petite modification de la fonction de construction de la liste des paramètres pour la gestion du fil d'arianne
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
comment charger une page sans lien [ par fifipil909 ]
salut je voulais savoir comment charger une page html sans lien ni formulaireapres l'appuis sur un lien qui charge mon menu.html dans ma left frame je
un lien n'apparait pas dans un code PHP [ par frabern ]
Dans le code ci-dessous ( en rouge ) j'ai une erreur de syntaxe ou autre. car ce lien n'apparait pas dans hotmail.com ou autre client email
Lien dans un tableau html/php [ par emma1006 ]
Salut à tous !Gros problème que je n'arrive pas à résoudre vue mon inexpérience en php + combinaison html et surtout javascri
mail [ par rich25200 ]
bonjour, je veux envoyé un mail a partir de la fonction mail mais j'ai un prob voial mon code : $to = "xxxxx@hotmail.com"; &
html , title / alt [ par BEAUBRIUS ]
Je sais que ma question n'a aucun raport au php. Mais j'ai chercher sur plien de site pour html , et j'ai rien trouvé ... :( Donc , j'ai un lien
Sessions et Lien HTML [ par nicographx ]
Bonjour Je cherche à passer des variables par sessions lorsque l'on clique sur un lien avec une balise <a href...> </a> J'ai essay&
appeler une fonction php dans un lien html [ par gaillardo ]
Bonjour,Voici mon souci : J'ai crée une page fonction.php qui regrouper toutes mes fonctions et j'aimerai pouvoir appeler l'une d'elles depuis ma p
Probleme Protection HTML avec PHP [ par nerone21 ]
Bonjour, je suis super débutant et j'ai un ti problème...Alors je m'explique, j'ai une page d'authentification en PHP qui fonctionne très bien pour to
prob de lien entre page html et php [ par simsgodzilla ]
Bonjour,J'ai un problème d'ouverture de fichier sur le serveur EasyPhp : J'ai une page d'accueil en Flash (nommée.html) et une page index en .php.J'ai
lien html text box [ par novaconcept ]
Salut, :) Voilà j'aurais besoin d'un truc tout con mais j'arrive pas à trouver comment le faire. Je voudrais pouvoir mettre un code dans une text b
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GOOGLE MAPGOOGLE MAP par fatmanajjar
Cliquez pour lire la suite par fatmanajjar
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|