Bonjour,

J'ai un problème avec les web services en Java.

J'ai créé ce web service:

1. Interface du web service
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
@WebService (name="MyWebService")
@SOAPBinding (style=Style.RPC)
public interface MyWebService {
 
     @WebMethod
     public String doLogin(@WebParam (name="lastname") String lastname,
            @WebParam (name="firstname") String firstname,
            @WebParam (name="password") String password);
 
     // ... other methods ...
 
}
2. Enpoint du web service
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
@Stateless
@WebService(
    endpointInterface = "webservice.MyWebService",
    portName = "MyWebServicePort",
    serviceName = "MyWebService")
public class MyWebServiceEndpoint implements MyWebService {
 
   public String doLogin(String lastname, String firstname, String password) {
       createLogin(lastname, firstname, password);      
   }          
 
   // ... implementation of other methods ...
 
}
Je déploie ensuite mon application EAR sur Sun Java Application Server (ou Bea weblogic ça change rien), le déploiement se déroule correctement et j'utilise SoapUI pour tester les méthodes de mon web service, tout fonctionne correctement, là où est mon problème est que je peux faire un XML injection (ou Tag injection) avec ma requête soap.

Si je prend l'exemple ci-dessous, on peut voir ma requête soap qui est envoyé à mon serveur depuis SoapUI.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="web:">
   <soapenv:Header>
   </soapenv:Header>
   <soapenv:Body>
      <web1:doLogin xmlns:web1="http://webservice.example.com/">
           <firstname>John</firstname>
           <lastname>Brown</lastname>
           <password>john_pass33</password>
           <lastname>Kennedy</lastname>
      </web1:doLogin>
   </soapenv:Body>
</soapenv:Envelope>
Comme vous pouvez le constater j'ai réussi à injecter 2 tags <lastname>, mon serveur accepte cela et prend en compte le 2ème tag, c'est-à-dire dans cette exemple le nom "Kennedy" sera utilisé et non pas le nom "Brown".
J'ai essayé d'utiliser des XML schema mais rien ne change j'ai toujours la possibilité d'envoyer une requête avec 2 tags de même nom et c'est toujours le dernier tag qui est pris en compte par le serveur.

Je voudrais donc savoir si quelqu'un pouvait m'aider en me disant comment il est possible de ne plus avoir ce genre de problème, c'est-à-dire qu'il ne soit plus possible de créer une requête soap avec 2 même nom comme paramètre ou d'ignorer le 2ème tag, etc ???

Merci d'avance.