Activation de la protection de contrefaçon de demande intersites en code Struts

La falsification de requête intersite est un type d'attaque malveillante qui amène l'utilisateur à envoyer des requêtes non intentionnelles. Par exemple, un agresseur informatique peut amener un utilisateur authentifié à cliquer sur un lien pour mettre à jour ses informations personnelles. HCL Commerce accepte cette requête comme étant valide, dans la mesure où des cookies de session appropriés existent dans le cadre de la requête.

Lorsque la protection de falsification de requête intersite est activée, un paramètre d'URL désigné appelé authToken doit être inclus dans la requête. La valeur du paramètre est générée par HCL Commerce et transmise à la page dans un attribut de requête du même nom.

Remarque : Le paramètre authToken est disponible uniquement sur les pages protégées par SSL car ce jeton ne doit pas être visible. Seules les adresses URL sensibles utilisant SSL nécessitent cette protection. La protection CSRF dans HCL Commerce est destinée à protéger un utilisateur après qu'il a été pleinement authentifié, et non à un état partiellement authentifié (rappelé).

Procédure

  1. Identifiez l'action à protéger.
    Par exemple, UserRegistrationUpdate.
  2. Ouvrez le fichier de configuration Struts où l'action est définie. Ajoutez une propriété à l'action. Nommez la propriété csrfProtected. Par exemple :
    Dans HCL Commerce versions 9.0.0.x :
    <action
      parameter="com.ibm.commerce.usermanagement.commands.UserRegistrationUpdateCmd"
      path="/UserRegistrationUpdate" type="com.ibm.commerce.struts.BaseAction">
      <set-property property="https" value="0:1"/>
      <set-property property="authenticate" value="0:0"/>
      <set-property property="csrfProtected" value="10101:1"/>
    </action>
    
    Notes :
    • L'attribut de valeur de l'élément set-property correspond à une liste de valeurs <storeId>:<property value> séparées par des virgules. La requête est protégée dans le cadre de la protection de falsification de requête intersite lorsqu'elle comporte une valeur de propriété de 1.
    • HCL Commerce EnterpriseDans un modèle de magasin de sites étendus, vous devez définir des actions individuelles pour chaque magasin de sites étendus.
    <action class="com.ibm.commerce.struts.v2.BaseAction" name="UserRegistrationUpdate">
       <param name="parameter">com.ibm.commerce.usermanagement.commands.UserRegistrationUpdateCmd</param>
       <param name="authenticate">0:0</param>
       <param name="csrfProtected">10101:1</param>
       <param name="https">0:1</param>
    </action> 
    
    Notes :
    • L'attribut de valeur du paramètre csrfProtected est une liste de valeurs <storeId>:<property value> séparées par des virgules. La requête est protégée dans le cadre de la protection de falsification de requête intersite lorsqu'elle comporte une valeur de propriété de 1.
    • HCL Commerce EnterpriseDans un modèle de magasin de sites étendus, vous devez définir des actions individuelles pour chaque magasin de sites étendus.
  3. Editez le fichier JSP qui appelle cette action, afin d'inclure le paramètre d'URL authToken.
    Par exemple :
    
    <input type="hidden" name="authToken" value="${authToken}" id="WC_UserRegistrationUpdateForm_FormInput_authToken_In_Register_1"/>
    
    Remarque : Si le fichier JSP est mis en cache, la partie de la page qui indique authToken est incluse dans un fragment JSP qui n'est pas mis en cache.
    Remarque : Vous pouvez ajouter une protection CSRF pour une commande dans un outil de professionnel, tel que HCL Commerce Accelerator. Pour ajouter la protection, modifiez le fichier JSP associé et modifiez la méthode savePanelData() pour ajouter authToken. Votre code modifié peut ressembler au code suivant :
    parent.addURLParameter("authToken", "${authToken}");
  4. Mettez à jour le composant de registre StrutsConfigRegistry.

Résultats

Remarque : Lorsqu'une violation de falsification de requête intersite est détectée, la requête est modifiée afin d'être transmise à la vue CrossSiteRequestForgeryErrorView. En d'autres termes, la vue est affichée lorsque les requêtes configurées pour être protégées n'incluent pas le paramètre authToken.