Citrix ADC

Contrôle de l’interopérabilité des services Web

La vérification de l’interopérabilité des services Web (WS-I) examine à la fois les demandes et les réponses pour vérifier la conformité à la norme WS-I et bloque les demandes et réponses qui ne respectent pas cette norme. Le but de la vérification WS-I est de bloquer les requêtes qui pourraient ne pas interagir avec d’autres XML de manière appropriée. Un attaquant peut utiliser des incohérences dans l’interopérabilité pour lancer une attaque sur votre application XML.

Si vous utilisez l’assistant ou l’interface graphique, dans la boîte de dialogue Modifier le contrôle de l’interopérabilité des services Web, sous l’onglet Général, vous pouvez activer ou désactiver les actions Bloquer, Journal, Statistiques et Apprendre.

Si vous utilisez l’interface de ligne de commande, vous pouvez entrer la commande suivante pour configurer la vérification d’interopérabilité des services Web :

  • set appfw profile <name> -xmlWSIAction [block] ][log] [learn] [stats] [none]

Pour configurer des règles d’interopérabilité des services Web individuelles, vous devez utiliser l’interface graphique. Sous l’onglet Vérifications de la boîte de dialogue Modifier le contrôle de l’interopérabilité des services Web, sélectionnez une règle et cliquez sur Activer ou Désactiver pour activer ou désactiver la règle. Vous pouvez également cliquer sur Ouvrir pour ouvrir la boîte de message Détail de l’interopérabilité des services Web pour cette règle. La boîte de message affiche des informations en lecture seule sur la règle. Vous ne pouvez pas modifier ou apporter d’autres modifications de configuration à l’une de ces règles.

La vérification WS-I utilise les règles répertoriées dans WS-I Basic Profile 1.0. WS-I propose les meilleures pratiques pour le développement de solutions de services Web interopérables. Les vérifications WS-I sont effectuées uniquement sur les messages SOAP.

La description de chaque règle standard WSI est fournie ci-dessous :

Règle Description
BP1201 Le corps du message doit être un soap:envelope avec espace de noms.
R1000 Lorsqu’une ENVELOPE est une erreur, l’élément SOAP:Fault NE DOIT PAS avoir des enfants d’élément autres que faultcode, faultstring, faultactor et detail.
R1001 Lorsqu’une ENVELOPE est une erreur, les enfants de l’élément SOAP:Fault DOIVENT être non qualifiés.
R1003 UN RÉCEPTEUR DOIT accepter les messages d’erreur qui comportent un certain nombre d’attributs qualifiés ou non qualifiés, y compris zéro, apparaissant sur l’élément de détail. L’espace de noms des attributs qualifiés peut être autre que l’espace de noms de l’élément de document qualifié Envelope.
R1004 Lorsqu’une ENVELOPE contient un élément faultcode, le contenu de cet élément DEVRAIT être soit l’un des codes d’erreur définis dans SOAP 1.1 (fournissant des informations supplémentaires si nécessaire dans l’élément detail), soit un Qname dont l’espace de noms est contrôlé par l’autorité de spécification de la faute (dans cet ordre de préférence).
R1005 Une ENVELOPE NE DOIT PAS contenir l’attribut SOAP:encodingStyle sur l’un des éléments dont l’espace de noms est le même que l’espace de noms de l’élément de document qualifié Envelope.
R1006 Une ENVELOPE NE DOIT PAS contenir les attributs SOAP:EncodingStyle sur un élément qui est un enfant de SOAP:Body.
R1007 Une ENVELOPE décrite dans une liaison littérale rpc-NE DOIT PAS contenir l’attribut SOAP:encodingStyle sur un élément qui est un petit-fils de Soap:body.
R1011 Une ENVELOPE NE DOIT PAS avoir d’enfant élément de SOAP:Envelope suivant l’élément SOAP:Body.
R1012 Un MESSAGE DOIT être sérialisé en UTF-8 ou UTF-16.
R1013 Une ENVELOPE contenant un attribut SOAP:MustUnderderderit DOIT utiliser uniquement les formes lexicales 0 et 1.
R1014 Les enfants de l’élément SOAP:body dans une ENVELOPE DOIVENT être qualifiés d’espace de noms.
R1015 Un RECEPTEUR DOIT générer une erreur s’il rencontre une enveloppe dont l’élément de document n’est pas SOAP:Envelope.
R1031 Lorsqu’une ENVELOPE contient un élément faultcode, le contenu de cet élément NE DEVRAIT PAS utiliser la notation SOAP 1.1 point pour affiner la signification de la faute.
R1032 Les éléments SOAP:envelope, SOAP:header et SOAP:body d’une ENVELOPE NE DOIVENT PAS avoir des attributs dans le même espace de noms que celui de l’élément de document qualifié Envelope
R1033 Une ENVELOPE NE DEVRAIT PAS contenir la déclaration d’espace de noms :xmlns:xml=http://www.w3.org/XML/1998/namespace.
R1109 La valeur du champ d’en-tête HTTP SoapAction dans une requête HTTP MESSAGE DOIT être une chaîne entre guillemets.
R1111 Une INSTANCE DEVRAIT utiliser un code d’état HTTP 200 OK sur un message de réponse contenant une enveloppe qui n’est pas une erreur.
R1126 Une INSTANCE DOIT renvoyer un code d’état HTTP d’erreur serveur interne 500 si l’enveloppe de réponse est une erreur.
R1132 Une requête HTTP MESSAGE DOIT utiliser la méthode HTTP POST.
R1140 UN MESSAGE DEVRAIT être envoyé en utilisant HTTP/1.1.
R1141 Un MESSAGE DOIT être envoyé en utilisant HTTP/1.1 ou HTTP/1.0.
R2113 Une ENVELOPE NE DOIT PAS inclure l’attribut SOAPENC:ArrayType.
R2211 Une ENVELOPE décrite avec une liaison littérale rpc-NE DOIT PAS avoir l’attribut xsi:nil avec une valeur de 1 ou true sur les accesseurs de pièce.
R2714 Pour les opérations à sens unique, une INSTANCE NE DOIT PAS renvoyer une réponse HTTP contenant une enveloppe. Plus précisément, l’entité de réponse HTTP doit être vide.
R2729 Une ENVELOPE décrite avec une liaison littérale rpc-qui est une réponse DOIT avoir un élément wrapper dont le nom est le nom wsdl:operation correspondant suffixé avec StringResponse.
R2735 Une ENVELOPE décrite avec une liaison littérale rpc-DOIT placer les éléments d’accesseur de pièce pour les paramètres et renvoyer la valeur dans aucun espace de noms.
R2738 Une ENVELOPE DOIT inclure tous les soapbind:headers spécifiés sur un wsdl:input ou wsdl:output d’un wsdl:operation d’un wsdl:binding qui le décrit.
R2740 Un wsdl:binding dans une DESCRIPTION DEVRAIT contenir un soapbind:fault décrivant chaque défaut connu.
R2744 Une requête HTTP MESSAGE DOIT contenir un champ d’en-tête HTTP SoapAction avec une valeur entre guillemets égale à la valeur de l’attribut SoapAction de soapbind:operation, s’il est présent dans la description WSDL correspondante.

Contrôle de l’interopérabilité des services Web