Voila, je voudrais "ajouter" une couche filtre IP a java.
En gros, je founir a des clients une plateforme qui permet d'executer
des modules. Ces modules sont simplement des archives Jar qui doivent
contenir une classe implementant une interface particuliere (c'est le
"point d'entré" du module).
Les modules en question peuvent etre "n'importe quoi", et notamment
avoir des fonctionnalités réseaux. Hors, je voudrais pouvoir fournir un
module de filtre, c'est a dire qu'une fois ce module chargé, toutes les
connections reseaux doivent etre "verifiées", afin d'etre sur que
l'utilisateur n'a pas interdit l'acces a certaines addresses.
Comment faire?
Apres avoir inspecté les APIs, je suis tombé sur SocketImpl, qui
pourrait m'aider a resoudre ce probleme. Il s'agit de la partie
"bas-niveau" d'une socket, que l'on peut modifier avec les methodes
Socket.setSocketImplFactory et ServerSocket.setSocketFactory. Hors,
d'une part je dois reecrire la couche transport (donc avec du code
natif, donc avec une librarie par architecture, ...), et d'autre part si
l'on utilise un proxy, Socket passe par dessus ce mecanisme et ne sers
meme pas de la factory. Donc en gros ca ne marche pas :(
Bref, comment faire pour qu'un programme utilise autre chose que les
Socket fourni avec la JVM, sans que le developpeur s'en rende compte?
L'utilisation de bootstrapclass est a proscrire a cause du caractere
"modulaire", c'est a dire que la JVM est demarré avant le module.
Bon, je sais pas si j'ai etait tres clair. Si la question est mal posée,
n'hesitez pas...
Pourquoi ne pas utiliser directement SocketServer? A chaque nouvelle connexion, tu regardes l'IP du client, et tu la filtre.
Mais bon, j'ai peut etre pas compris ce que tu voulais faire...
alexandre cartapanis
Pourquoi ne pas utiliser directement SocketServer? A chaque nouvelle connexion, tu regardes l'IP du client, et tu la filtre.
Mais bon, j'ai peut etre pas compris ce que tu voulais faire...
Oui, mais non :)
En fait c'est exactement sans que je veux faire, mais sans que le developpeur s'en rendre compte. En gros, qd il fait Socket s = new Socket(_ip, _port) il doit y avoir une verification de l'addresse, mais sans que ca change quoi que ce soit pour lui. Il faut que ce soit totalement transparent pour lui...
Pourquoi ne pas utiliser directement SocketServer?
A chaque nouvelle connexion, tu regardes l'IP du client, et tu la
filtre.
Mais bon, j'ai peut etre pas compris ce que tu voulais faire...
Oui, mais non :)
En fait c'est exactement sans que je veux faire, mais sans que le
developpeur s'en rendre compte. En gros, qd il fait Socket s = new
Socket(_ip, _port) il doit y avoir une verification de l'addresse, mais
sans que ca change quoi que ce soit pour lui. Il faut que ce soit
totalement transparent pour lui...
Pourquoi ne pas utiliser directement SocketServer? A chaque nouvelle connexion, tu regardes l'IP du client, et tu la filtre.
Mais bon, j'ai peut etre pas compris ce que tu voulais faire...
Oui, mais non :)
En fait c'est exactement sans que je veux faire, mais sans que le developpeur s'en rendre compte. En gros, qd il fait Socket s = new Socket(_ip, _port) il doit y avoir une verification de l'addresse, mais sans que ca change quoi que ce soit pour lui. Il faut que ce soit totalement transparent pour lui...
Laurent Bossavit
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer
des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel
la machine Java d'un navigateur Web peut charger par le réseau des bouts
de code auxquels on ne peut pas faire confiance, et à qui il faut
interdire certaines opérations, notamment des accès au réseau. Dans
l'architecture de Java c'est le SecurityManager qui permet d'imposer ces
restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager.
Renseigne-toi sur l'architecture de sécurité de Java.
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de securité est donc deja fortement integre a la plate-forme, et la possibilité pour un module de remplacer le SecurityManager est la porte ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une faute de conception que d'integrer le filtre directement a la plateforme...
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer
des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel
la machine Java d'un navigateur Web peut charger par le réseau des bouts
de code auxquels on ne peut pas faire confiance, et à qui il faut
interdire certaines opérations, notamment des accès au réseau. Dans
l'architecture de Java c'est le SecurityManager qui permet d'imposer ces
restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager.
Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement
j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé
puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de
securité est donc deja fortement integre a la plate-forme, et la
possibilité pour un module de remplacer le SecurityManager est la porte
ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une
faute de conception que d'integrer le filtre directement a la plateforme...
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de securité est donc deja fortement integre a la plate-forme, et la possibilité pour un module de remplacer le SecurityManager est la porte ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une faute de conception que d'integrer le filtre directement a la plateforme...
PASTUREL JL
"alexandre cartapanis" a écrit dans le message de news:42948d53$0$799$
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de securité est donc deja fortement integre a la plate-forme, et la possibilité pour un module de remplacer le SecurityManager est la porte ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une faute de conception que d'integrer le filtre directement a la plateforme...
Une idée, regarder autour de la programmation AOP => AspectJ , Aspectwerkz
"alexandre cartapanis" <alexandre.cartapanis@macymed.fr> a écrit dans le
message de news:42948d53$0$799$8fcfb975@news.wanadoo.fr...
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer
des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel
la machine Java d'un navigateur Web peut charger par le réseau des bouts
de code auxquels on ne peut pas faire confiance, et à qui il faut
interdire certaines opérations, notamment des accès au réseau. Dans
l'architecture de Java c'est le SecurityManager qui permet d'imposer ces
restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager.
Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement
j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé
puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de
securité est donc deja fortement integre a la plate-forme, et la
possibilité pour un module de remplacer le SecurityManager est la porte
ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une
faute de conception que d'integrer le filtre directement a la
plateforme...
Une idée, regarder autour de la programmation AOP => AspectJ , Aspectwerkz
"alexandre cartapanis" a écrit dans le message de news:42948d53$0$799$
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de securité est donc deja fortement integre a la plate-forme, et la possibilité pour un module de remplacer le SecurityManager est la porte ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une faute de conception que d'integrer le filtre directement a la plateforme...
Une idée, regarder autour de la programmation AOP => AspectJ , Aspectwerkz
Fabien Bergeret
alexandre cartapanis wrote:
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de securité est donc deja fortement integre a la plate-forme, et la possibilité pour un module de remplacer le SecurityManager est la porte ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une faute de conception que d'integrer le filtre directement a la plateforme...
Tu ne peux pas remplacer un SecurityManager, de toutes facons ; une fois qu'il y en a un d'installe, il y reste (et hereusement, sinon, gros trou de securite) !
alexandre cartapanis wrote:
Alexandre,
En gros, je founir a des clients une plateforme qui permet d'executer
des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel
la machine Java d'un navigateur Web peut charger par le réseau des bouts
de code auxquels on ne peut pas faire confiance, et à qui il faut
interdire certaines opérations, notamment des accès au réseau. Dans
l'architecture de Java c'est le SecurityManager qui permet d'imposer ces
restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager.
Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement
j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé
puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de
securité est donc deja fortement integre a la plate-forme, et la
possibilité pour un module de remplacer le SecurityManager est la porte
ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une
faute de conception que d'integrer le filtre directement a la plateforme...
Tu ne peux pas remplacer un SecurityManager, de toutes facons ; une fois
qu'il y en a un d'installe, il y reste (et hereusement, sinon, gros trou
de securite) !
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent
Ca ressemble beaucoup à un mécanisme qui existe déjà: celui par lequel la machine Java d'un navigateur Web peut charger par le réseau des bouts de code auxquels on ne peut pas faire confiance, et à qui il faut interdire certaines opérations, notamment des accès au réseau. Dans l'architecture de Java c'est le SecurityManager qui permet d'imposer ces restrictions.
La bonne façon de procéder est donc de créer ton propre SecurityManager. Renseigne-toi sur l'architecture de sécurité de Java.
Laurent
C'est effectivement une option que j'ai envisagé, et malheureusement j'ai du l'ecarter ensuite. Comme je l'ai dit, les modules sont chargé puis lancé par la plate-forme (la mienne, pas la jvm). Le mecanisme de securité est donc deja fortement integre a la plate-forme, et la possibilité pour un module de remplacer le SecurityManager est la porte ouverte a tous les abus, donc ce n'est pas possible. Et ce serai une faute de conception que d'integrer le filtre directement a la plateforme...
Tu ne peux pas remplacer un SecurityManager, de toutes facons ; une fois qu'il y en a un d'installe, il y reste (et hereusement, sinon, gros trou de securite) !
BJB
Bonjour Alexandre,
Si tu veux faire du filtrage, il va te faloir utiliser accéder à de l'IP brut :
http://www.savarese.org/software/rocksaw.html
Ensuite, il te faudra décoder les paquets que tu reçois afin d'en extraire les IP et faire le travail que tu doit faire.
Celà repond-t-il à ta question ?
A+ JB
alexandre cartapanis wrote:
Bonjour,
Voila, je voudrais "ajouter" une couche filtre IP a java.
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent contenir une classe implementant une interface particuliere (c'est le "point d'entré" du module).
Les modules en question peuvent etre "n'importe quoi", et notamment avoir des fonctionnalités réseaux. Hors, je voudrais pouvoir fournir un module de filtre, c'est a dire qu'une fois ce module chargé, toutes les connections reseaux doivent etre "verifiées", afin d'etre sur que l'utilisateur n'a pas interdit l'acces a certaines addresses.
Comment faire?
Apres avoir inspecté les APIs, je suis tombé sur SocketImpl, qui pourrait m'aider a resoudre ce probleme. Il s'agit de la partie "bas-niveau" d'une socket, que l'on peut modifier avec les methodes Socket.setSocketImplFactory et ServerSocket.setSocketFactory. Hors, d'une part je dois reecrire la couche transport (donc avec du code natif, donc avec une librarie par architecture, ...), et d'autre part si l'on utilise un proxy, Socket passe par dessus ce mecanisme et ne sers meme pas de la factory. Donc en gros ca ne marche pas :(
Bref, comment faire pour qu'un programme utilise autre chose que les Socket fourni avec la JVM, sans que le developpeur s'en rende compte?
L'utilisation de bootstrapclass est a proscrire a cause du caractere "modulaire", c'est a dire que la JVM est demarré avant le module.
Bon, je sais pas si j'ai etait tres clair. Si la question est mal posée, n'hesitez pas...
Bonjour Alexandre,
Si tu veux faire du filtrage, il va te faloir utiliser accéder à de l'IP
brut :
http://www.savarese.org/software/rocksaw.html
Ensuite, il te faudra décoder les paquets que tu reçois afin d'en
extraire les IP et faire le travail que tu doit faire.
Celà repond-t-il à ta question ?
A+
JB
alexandre cartapanis wrote:
Bonjour,
Voila, je voudrais "ajouter" une couche filtre IP a java.
En gros, je founir a des clients une plateforme qui permet d'executer
des modules. Ces modules sont simplement des archives Jar qui doivent
contenir une classe implementant une interface particuliere (c'est le
"point d'entré" du module).
Les modules en question peuvent etre "n'importe quoi", et notamment
avoir des fonctionnalités réseaux. Hors, je voudrais pouvoir fournir un
module de filtre, c'est a dire qu'une fois ce module chargé, toutes les
connections reseaux doivent etre "verifiées", afin d'etre sur que
l'utilisateur n'a pas interdit l'acces a certaines addresses.
Comment faire?
Apres avoir inspecté les APIs, je suis tombé sur SocketImpl, qui
pourrait m'aider a resoudre ce probleme. Il s'agit de la partie
"bas-niveau" d'une socket, que l'on peut modifier avec les methodes
Socket.setSocketImplFactory et ServerSocket.setSocketFactory. Hors,
d'une part je dois reecrire la couche transport (donc avec du code
natif, donc avec une librarie par architecture, ...), et d'autre part si
l'on utilise un proxy, Socket passe par dessus ce mecanisme et ne sers
meme pas de la factory. Donc en gros ca ne marche pas :(
Bref, comment faire pour qu'un programme utilise autre chose que les
Socket fourni avec la JVM, sans que le developpeur s'en rende compte?
L'utilisation de bootstrapclass est a proscrire a cause du caractere
"modulaire", c'est a dire que la JVM est demarré avant le module.
Bon, je sais pas si j'ai etait tres clair. Si la question est mal posée,
n'hesitez pas...
Si tu veux faire du filtrage, il va te faloir utiliser accéder à de l'IP brut :
http://www.savarese.org/software/rocksaw.html
Ensuite, il te faudra décoder les paquets que tu reçois afin d'en extraire les IP et faire le travail que tu doit faire.
Celà repond-t-il à ta question ?
A+ JB
alexandre cartapanis wrote:
Bonjour,
Voila, je voudrais "ajouter" une couche filtre IP a java.
En gros, je founir a des clients une plateforme qui permet d'executer des modules. Ces modules sont simplement des archives Jar qui doivent contenir une classe implementant une interface particuliere (c'est le "point d'entré" du module).
Les modules en question peuvent etre "n'importe quoi", et notamment avoir des fonctionnalités réseaux. Hors, je voudrais pouvoir fournir un module de filtre, c'est a dire qu'une fois ce module chargé, toutes les connections reseaux doivent etre "verifiées", afin d'etre sur que l'utilisateur n'a pas interdit l'acces a certaines addresses.
Comment faire?
Apres avoir inspecté les APIs, je suis tombé sur SocketImpl, qui pourrait m'aider a resoudre ce probleme. Il s'agit de la partie "bas-niveau" d'une socket, que l'on peut modifier avec les methodes Socket.setSocketImplFactory et ServerSocket.setSocketFactory. Hors, d'une part je dois reecrire la couche transport (donc avec du code natif, donc avec une librarie par architecture, ...), et d'autre part si l'on utilise un proxy, Socket passe par dessus ce mecanisme et ne sers meme pas de la factory. Donc en gros ca ne marche pas :(
Bref, comment faire pour qu'un programme utilise autre chose que les Socket fourni avec la JVM, sans que le developpeur s'en rende compte?
L'utilisation de bootstrapclass est a proscrire a cause du caractere "modulaire", c'est a dire que la JVM est demarré avant le module.
Bon, je sais pas si j'ai etait tres clair. Si la question est mal posée, n'hesitez pas...