Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/04/2014, à 13:17

MrFaelivrin

public protected private peuvent-ils jouer un rôle dans la sécurité ?

Bonjour à tous..

Voilà un bon nombre d'années que j'utilise le paradigme objets à travers divers langages comme le C++, Java, PHP5, ...

Mais voilà lors de la conception d'un jeu en Java je me suis demandé si ces mots clés "public protected et private" pouvait jouer un rôle dans la sécurité de mon appli.

Question qui va sans doute paraitre bête pour certains mais que se passe -t-il réellement derrière ces mots clés?

J'ai fait beaucoup de programmation bas niveau(NASM, TASM debuggage...) et même j'ai déjà développé mon propre langage via un framework du nom d'ANTLR.

Mais je me suis toujours demandé pour les langages objets comment le code assembleur était-il foutu? Une classe pourrait-elle se rapprocher d'une procédure classique (call) bien que sans en être réellement une.  Mais du moins garder le meme principe d'accessibilité aux variables locales et celles plus globales.

Pour finir, je me demandais si pour le coup un attribut public s'exposait à des dangers, question sécurité. Un programme qui viendrait se greffer sur mon programme en recompilant par dessus pourrait accéder plus facilement aux attributs public que ceux en private?

Merci pour toutes les réponses.

Hors ligne

#2 Le 22/04/2014, à 19:16

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Bonjour. Aucun role directe dans la sécurité. Et tout à voir avec la notion d'encapsulation.
Ces mots cles permettent donc essentiellement au concepteur d'une classe  d'interdire à un programmeur de la "dévoyer".
=> permet de garantir la cohérence de l'état interne des objets, pour eux même, et vis à vis d'autres composant d'un même package, et aussi la maitrise de la compatibilité pour des évolutions futures

edit :

Question qui va sans doute paraitre bête pour certains mais que se passe -t-il réellement derrière ces mots clés?

Simplement le compilateur va interdire l'utilisation des propriétés ou méthodes concernées en dehors du cadre prévu par le concepteur.
(le contrôle à lieu lors de la compilation et non à l'exécution.)

Dernière modification par jamesbad000 (Le 22/04/2014, à 19:26)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#3 Le 24/04/2014, à 16:00

MrFaelivrin

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Aucun rôle direct sur la sécurité.

Et indirectement peut-il en avoir un? ^^

Ok son premier rôle c'est pour l'encapsulation des donnees et ainsi imposer au programmeur une façon de programmer. Aucun rôle sur la sécurité.

Merci.

Hors ligne

#4 Le 28/04/2014, à 18:02

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Dans le même genre une caractéristique que j'ai découvert récemment, il est obligatoire en java d'utiliser les accesseurs.... en gros il s'agit d'un effet quantique ayant pour but de pourrir la vie de ceux qui sont contraint d'utiliser Java...
Vos avez beaux déclarer vos propriété en public, vous tomberez sur une null pointer exception si vous essayer d'y accéder depuis l'exterieur.


Alius

Hors ligne

#5 Le 28/04/2014, à 19:20

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Il y a erreur : "null pointer exception" est provoqué par une variable non initialisée. c'est une erreur de coding dong (tient ! voilà qu'on sonne). Ca n'a absolument rien à voir avec la portée des variables...

Dernière modification par jamesbad000 (Le 28/04/2014, à 19:20)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#6 Le 02/05/2014, à 11:29

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

jamesbad000 a écrit :

Il y a erreur : "null pointer exception" est provoqué par une variable non initialisée. c'est une erreur de coding dong (tient ! voilà qu'on sonne). Ca n'a absolument rien à voir avec la portée des variables...

Non il n'y a pas erreur !!!
du moins pas comme tu l'entends ^^

en réalité je travaillais avec des ejb, j'avais eu la flemme de faire des getter/setter (code avec vim) et donc, avais mis ma propriété en public...
techniquement javac n'aurait pas du compiler, puisque qui dit bean dit getter / setter, or la compilation réussit mais le run balance une nullpointer exception (variable pourtant initialisée)...

voilà l'explication, java est quantique et il permet de compiler un code qui ne devrait pas l’être...

EDIT: un collègue a rencontré le mémé "problème"

Dernière modification par alius (Le 02/05/2014, à 11:32)


Alius

Hors ligne

#7 Le 02/05/2014, à 13:38

telliam

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

quantique ? ? ?


"- Un intellectuel assis va moins loin qu'un con qui marche."
Maurice Biraud - Un Taxi pour Tobrouk
Michel Audiard

Hors ligne

#8 Le 03/05/2014, à 01:49

MrFaelivrin

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

C'est bizarre ça. Je mets souvent des attributs en public ou j'en rencontre et j'ai jamais rencontré ce problème.

Qu'entends-tu exactement par "java quantique" ?
Je savais pas que java faisait de la physique des particules. :}

Dernière modification par MrFaelivrin (Le 03/05/2014, à 01:50)

Hors ligne

#9 Le 03/05/2014, à 10:42

bruno

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

telliam a écrit :

quantique ? ? ?

Ça marche ou Ça marche pas mais tu ne peux jamais le savoir avec certitude big_smile

Hors ligne

#10 Le 03/05/2014, à 11:14

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

MrFaelivrin a écrit :

C'est bizarre ça. Je mets souvent des attributs en public ou j'en rencontre et j'ai jamais rencontré ce problème.

C'est parce que alius assimile les EJB au langage java. Mais t'inquiète les propriétés "public" d'une classe sont visibles d'une autre classe lorsqu'on programme "classiquement".

Les EJB sont des composant qui doivent être construit selon une norme pour être utilisés par des "container" qui vont découvrir les propriétés à l'exécution, par le mécanisme de l'introspection. Ca repose donc sur le fait qu'il existe des méthodes ayant une dénomination répondant à des règle de nommage (par exemple les méthode qui permettent d'accéder aux propriétés que l'on veut rendre disponible doivent commencer par get)

Alors évidemment le compilateur ne peut pas savoir.
Et puis faire du JEE avec vim ça me semble aussi approprié que le forage pétrolier avec une pelle. Il y a tout un tas de  problèmes qui doivent être pris en charge par un IDE.

Dernière modification par jamesbad000 (Le 03/05/2014, à 11:16)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#11 Le 03/05/2014, à 12:38

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

jamesbad000 a écrit :

Il y a tout un tas de  problèmes qui doivent être pris en charge par un IDE.

Chacun sa philosophie hein ! Je préfère pour des petits ou moyens projets me passer d'IDE
Puis en java, eclipse ou netbean.... enfin, heureusement qu'ils ne sont pas payant tongue


Mais ais-je vraiment tord d'assimiler les ejb à Java ??? dans un sens, non je ne crois pas. Ok il y a des spécifications à respecter mais d'un autre coté le compilateur laisse passer. Il y a bien là un un problème de sécurité.


Alius

Hors ligne

#12 Le 03/05/2014, à 13:00

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

alius a écrit :

Je préfère pour des petits ou moyens projets me passer d'IDE

C'est ton droit. L'inconvéniant c'est que JEE a été conçu pour faire des grand projets. Donc avec ta pelle tu es forcément en difficulté smile

alius a écrit :

Mais ais-je vraiment tord d'assimiler les ejb à Java ???

Tu as raison dans la mesure ou les ejb s'appuient sur java, et qu'en plus ça porte la même marque; Tort dans la mesure ou le problème que tu expose ne concerne pas le langage et le compilateur lui même, mais des mécanisme d'une architecture de développement.

Et surtout tort lorsque que tu engendre une confusion sur le fait que les propriétés public d'une classe utilisée directement dans une autre classe ne seraient pas accessibles. Et encore plus tort quand tu laisse entendre que ça serait alléatoire. Alors que ça répond à des règles et qu'en fonction de ses règle le résultat est totalement prévisible..

Et ce n'est pas non plus un problème de sécurité. Mais éventuellement un problème de qualité, de fiabilité. Mais encore une fois il faut les moyen en face pour faire du JEE.


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#13 Le 04/05/2014, à 19:57

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Je suis d'accord avec toi mais ne me fait pas dire ce que je n'ai pas dit !
Je sais bien que l'on peut accéder a des données "public" depuis l’extérieur, il s'agissait d'un contexte bien spécial et il y avait bien erreur de ma part en ayant déclaré une propriété public dans un bean, je voulais simplement dire que javac devrait être capable de détecter cette erreur de coding. Si tu peux me dire pourquoi, je suis prêt à l'entendre smile
EJB ou pas EJB on devrait selon moi être capable de pouvoir coder dans les mêmes conditions que ce soit avec ou sans IDE ! Java ne le permettrait donc pas ? (puisque le compilateur ne détecte pas cette erreur)
Et je suis bien conscient qu'il s'agisse d'une architecture de développement bien spécifique mais de plus le compilateur le sais très bien grâce aux "@Stateless", @entity, ....

merci


Alius

Hors ligne

#14 Le 05/05/2014, à 00:08

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Je suis désolé si je t'ai fais dire autre chose que ce que tu as dis. Bien que je ne vois pas ou.
Mais, c'est que tes propos manquent un peu de précision aussi; Le mot "exterieur" en particulier est particulièrement vague. Surtout qu'entre ton premier et ton dernier post tu l'a retourné comme un gant. Maintenant il me semble que tu l'emploi dans le sens ou je l'avais entendu au début smile

je voulais simplement dire que javac devrait être capable de détecter cette erreur de coding. Si tu peux me dire pourquoi, je suis prêt à l'entendre

EJB ou pas, on peut vouloir rendre une propriété accessible à d'autres classes locales (s'exécutant dans la même machine virtuelle). Comment le compilateur pourrait-il deviner que la propriété n'est destinée à être utilisée localement ?

Et en se plaçant du coté du client tu ne code pas toi même l'instanciation de l'EJB par un "new xxxx()" que je sache. Donc la encore le compilateur n'y peut rien.

Dernière modification par jamesbad000 (Le 05/05/2014, à 00:11)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#15 Le 05/05/2014, à 16:20

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

J'ai l'impression qu'on ne parle pas de la même chose, désolé j'ai toujours eu du mal à m'exprimer correctement.
Par extérieur j'entends bien évidement à l’extérieur de la classe (on ne parle pas non plus de package).

Le client n'y peut rien on est bien d'accord, on parle bien de notre ejb.

par exemple prenons ce qui suit :

@Stateful
public class MyStaleful implements MyEmptyInterface {

    public MyStaleless() {
         myProperty = "bonjour";
    }

    public String myProperty;

}

le compilateur est okay pour compiler ça. Mais nous ne pourrons jamais accéder à la propriété myProperty pourtant définie en public depuis une autre classe (exterieur). Me suis tu ?


Alius

Hors ligne

#16 Le 05/05/2014, à 17:02

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

"Exterieur à la classe" encore heureux que ce soit sous entendu. Mais ça laisse tout le reste de l'univers infini pour s'avoir d'ou tu référence ta classe.

import MyStaleful;
...
Mystaleful x = new MyStaleful();
String y = x.myProperty;

Si la classe MyStaleful est visible lors de la compilation, ça compile et ça fonctionne. (y contient "bonjour")

Autrement ça ne compile pas.

Maintenant est-ce que toi dans ton "exterieur" tu instancie explicitement la classe MyStaleful pour que le compilateur puisse vérifier l'existence de myProperty ?

Dernière modification par jamesbad000 (Le 05/05/2014, à 17:08)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#17 Le 05/05/2014, à 17:36

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

nop aucune instanciation avec new, j'utilise toujours lookup("MyEmptyInterface");


Alius

Hors ligne

#18 Le 05/05/2014, à 17:37

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

okay je viens de tout piger !

il n'y a aucune propriété myProperty dans MyEmptyInterface d'ou le nullPointerException !


Alius

Hors ligne

#19 Le 05/05/2014, à 21:52

jamesbad000

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

Ben voilà, on a fini par se comprendre cool


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#20 Le 06/05/2014, à 18:57

alius

Re : public protected private peuvent-ils jouer un rôle dans la sécurité ?

merci pour ta patience smile


Alius

Hors ligne