begin process at 2012 05 27 22:21:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > CODEC D'OBFUSCATION DE LIEN HTML (PHP5)

CODEC D'OBFUSCATION DE LIEN HTML (PHP5)


 Information sur la source

Note :
Aucune note
Catégorie :Sécurité & Cryptage Classé sous :obfuscation, lien, html, codec Niveau :Débutant Date de création :24/03/2009 Date de mise à jour :02/04/2009 10:02:45 Vu :4 474

Auteur : masternico

Ecrire un message privé
Commentaire sur cette source (8)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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 du même auteur

SNIPPET : REDIMENSIONNER UN IMAGE SANS UTILISER LA BIBLIO GD
Source avec Zip Source avec une capture TÉLÉCHARGEMENT FICHIERS AVEC TICKET DE TÉLÉCHARGEMENT
TRANSMITION DES ARGUMENTS VERS UNE PAGE DANS UNE FRAME
LA DATE DU MÊME JOUR, LE MOIS SUIVANT

 Sources de la même categorie

Source avec Zip Source avec une capture CAPTCHA AJAX ANTI-BOT par darkvador59
Source avec Zip Source avec une capture ACCÈS, ESPACE MEMBRE AVEC INSCRIPTION ET DÉSINSCRIPTION PAR ... par stephelle
Source avec Zip CRYPTAGE REVERSIBLE par Mokost
Source avec Zip Source avec une capture CREATION DE COMPTE AVEC CRYPTAGE ET ESPACE DE CONNEXION SEC... par bm1982
PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien

 Sources en rapport avec celle ci

PROTÉGEZ VOS LIENS DE TÉLÉCHARGEMENT PAR MOT DE PASSE ET/OU ... par unlien
TRANSFORMER DU PBB CODE EN CODE HTML par audain
CACHER SES LIENS DE L'URL par cod57
LISTER DES LIENS / URLS DEPUIS UN TEXTE par gmni
Source avec Zip ENVOIE MAIL EN HTML AVEC PHP PAS DE SPAM SUR HOTMAIL ET GMAI... par Dje33

Commentaires et avis

Commentaire de Renfield le 24/03/2009 07:54:16 administrateur CS

Lorsque tu ajoutes une source sur le site, il te faut confirmer son ajout pour qu'elle soit visible par tous...

Ajout => Description + Fichiers + etc. => Prévisualisation => Mot clés => Terminé

Commentaire de masternico le 24/03/2009 09:32:11

Merci.
Ce qui m'étonne, c'est que je n'ai même pas eu le loisir d'atteindre l'étape mots clés. C'est directement après avoir appuyé sur prévisualisation que j'ai eu le message d'erreur.

En tout cas merci encore d'avoir validé la publication de ma source

Commentaire de Renfield le 24/03/2009 09:35:12 administrateur CS

un message d'erreur ?

quel message d'erreur ?

Commentaire de masternico le 24/03/2009 09:50:00

Que ma source avait été désactivée pour une raison inconnue.
J'ai sauté l'étape 'terminer' pour arriver directement à ma sources publiée mais désactivée...
c'est pour ça que j'ai contacté malalam cette nuit.
Je pensait qu'il t'avait transmit le problème.

Commentaire de Delphiprog le 01/04/2009 21:27:01 administrateur CS

Bonjour à tous.
Développer une classe où toutes les méthodes et les propriétés sont publiques revient à coder des fonctions classiques et à utiliser des variables globales. Où se situe l'intérêt alors si on peut, de l'extérieur de la classe, injecter n'importe quoi comme valeur dans les propriétés ?
L'intérêt de la POO n'est-il pas, entre autres, de permettre l'encapsulation ?
Sinon, l'idée de départ est bonne.

Commentaire de masternico le 02/04/2009 08:57:00

Bonjour.
C'est clair, il faudrait normaliser tout ça.

En fait, j'utilise les variables internes de l'objet comme on utilise le stack en assembleur et les fonctions sont les interruptions. De ce fait, mes variables sont plus des paramètres d'appels qu'autre chose. Donc dans ce sens, il faut qu'elles soient publiques.

Il y a ainsi une zone commune à tout l'objet (CR,CX,DS,etc. en assembleur) dans laquelle on vient positionner certaines valeurs avant de déclencher la fonction (interruption). Cela présente l'avantage de ne pas avoir a définir en dur les paramètres d'appels des procédures. Comme ça, si je modifie le code de la procédure lors des mises à jour, je n'ai pas à modifier les appels dans les aplis qui dépendent de cet objet. L'important est de bien initialiser les variables lors de la création de l'objet. Comme ça, si une variable n'est pas positionnée avant l'appel (version antérieur d'appel) la fonction fait son travail sans sourcilier. L'intérêt est plus flagrant dans le cas ou l'on veux supprimer un paramètre d'appel. Il faudrait alors reprendre tous les appels pour les modifiers en correspondance.

Maintenant, il est vrais que certaines fonctions pourraient être privées, mais la POO en PHP5 est un nouveau domaine d'activités pour moi (mes clients étaient en PHP4) et je ne gère pas encore assez bien toute la terminologie qui lui est associée.

Question:
en quoi le fait d'avoir toutes mes fonctions publiques soit gênant pour l'encapsulation?

Merci

Commentaire de Delphiprog le 02/04/2009 09:25:12 administrateur CS

"en quoi le fait d'avoir toutes mes fonctions publiques soit gênant pour l'encapsulation ?"
Dans l'absolu, ce n'est pas un problème. Dans le cas présent, si la classe ne peut pas contrôler les valeurs qu'on lui injecte par le biais des propriétés publiques, alors il faura blinder chaque méthode.
D'autre part, on ne peut pas comparer la programmation en assembleur et la POO. Si la POO a été inventée c'est, entre autres, pour faciliter la réutilisation (ce qui n'est pas le cas de l'assembleur) et, le plus important à mes yeux, pour que le développeur n'expose pas à l'extérieur de la classe les données sensibles. C'est bien pour cela qu'on été inventées les portées public, protected et private. Pour que l'accès aux  propriétés de ta classe soit maîtrisé, l'utilisation d'accesseurs (les fameux getters et setters) est chaudement recommandé. Si tu as un peu de temps, je te recommande la lecture d'ouvrages traitant de ce sujet.
Et je suis d'accord avec toi pour reconnaitre que la notion en PHP4 était un peu légère.
Dernier point, tu devrais préciser que ton code nécessite PHP5 car le constructeur __construct ne sera pas reconnu dans le cas de PHP4.
Cordialement

Commentaire de masternico le 02/04/2009 10:07:43

correction apportée pour le terme PHP5.

Je ne savais pas que l'on devait utiliser les fonctions publiques pour nettoyer les variables et ainsi proteger les fonction descendante... c'est bon à savoir...

Je cherche de bon ouvrages, mais ils sont denrée rare car beaucoup se targuent d'être complets mais après lecture, c'est beaucoup de vent... mais je suis preneur...


Merci

 Ajouter un commentaire


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 )&nbsp;j'ai une erreur de syntaxe&nbsp; ou autre. car ce lien n'apparait pas dans hotmail.com ou autre client email Lien dans un tableau html/php [ par emma1006 ] Salut &#224; tous !Gros probl&#232;me que je n'arrive pas &#224; r&#233;soudre vue mon inexp&#233;rience en php + combinaison html et surtout javascri mail [ par rich25200 ] bonjour, je veux envoy&#233; un mail a partir de la fonction mail mais j'ai un prob voial mon code : $to = "xxxxx@hotmail.com"; &nbsp;&nbsp;&nbsp; & 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&#233; ... :( Donc , j'ai un lien Sessions et Lien HTML [ par nicographx ] Bonjour Je cherche &#224; passer des variables par sessions lorsque l'on clique sur un lien avec une balise &lt;a href...&gt; &lt;/a&gt; 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


Nos sponsors


Sondage...

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,530 sec (4)

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