Activation de la protection des scripts intersite
Lorsqu'elle est activée, cette fonction rejette toutes les demandes de l'utilisateur contenant des attributs (paramètres) ou des chaînes déclarés comme non admissibles. Vous pouvez également exclure des instructions de la fonction de protection des scripts intersite en autorisant les valeurs des attributs spécifiés pour une instruction donnée à contenir des chaînes non admises. La protection des scripts intersite est désactivée par défaut.
- Bien que cette fonction rejette efficacement l'exécution des requêtes malveillantes, tous les fichiers JSP doit respecter les pratiques recommandées JSTL. Elles consistent à utiliser la balise <c:out> lors de l'accès à des paramètres ou des attributs URL. Cette balise JSTL met en échappement les cinq caractères XML spéciaux afin qu'ils ne soient pas utilisés dans une chaîne malveillante :
- <
- >
- &
- '
- "
- Outre les recommandations sur l'utilisation de JSTL pour échapper les entrées dans les fichiers JSP, vous devrez peut-être effectuer des étapes supplémentaires d'assainissement des entrées de ces fichiers, selon le codage de votre application. Vous devez suivre les OWASP XSS guidelines pour obtenir de la documentation supplémentaire sur la protection.
- La protection des scripts intersite est améliorée de sorte que les expressions régulières qui ne font pas la distinction entre les majuscules et les minuscules puissent être utilisées. La syntaxe des expressions régulières est fondée sur la norme utilisée par Java. Pour connaître la syntaxe d'expression régulière, voir la documentation API Java de Class Pattern de Sun.
- HCL Commerce prend en charge la protection de script intersite pour le corps des requêtes REST.
La protection des scripts intersite peut être désactivée au niveau des modules Web. Par exemple, vous pouvez explicitement désactiver la case à cocher correspondant aux scripts intersite dans HCL Commerce Accelerator, tout en l'activant dans les magasins. Par défaut, la fonction de protection des scripts intersite est uniquement activée pour le module Web des magasins.
<Module contextPath="/webapp/wcs/tools" fileServletEnabled="false"
name="CommerceAccelerator" urlMappingPath="/servlet" webAlias="/wcs">
<InitParameters adapters="BrowserAdapter"
contextSetName="Authoring" />
<URLRedirectFilter enable="true" />
<XSiteScriptingProtection enable="false" />
</Module>krypto ou le cookie WC_AUTHENTICATION, les caractères non alphanumériques codés en base 64 suivants sont utilisés dans ces chiffrements ; "+", "/", "=" et le caractère de saut de ligne (codé URL "%0A").Vous avez également la possibilité de bloquer les requêtes dans HCL Commerce Accelerator commande par commande. Vous pouvez déterminer toutes les commandes dans HCL Commerce Accelerator. Ouvrez ce fichier : WC_install/xml/policies/xml/defaultAccessControlPolicies.xml pour voir toutes les commandes accessibles au rôle de vendeur. Le rôle de vendeur correspond au superutilisateur HCL Commerce Accelerator. Les commandes accessibles au rôle de vendeur sont définies dans "SellersCmdResourceGroup".
Procédure
- Ouvrez le fichier de configuration .
-
Editez le bloc suivant :
<XSiteScriptingProtection enabled="true" name="Cross Site Scripting Protection"> <ProhibitedAttrs display="false"> <Attribute display="false" name="parameter1" /> <Attribute display="false" name="parameter2" /> <Attribute display="false" regex=".*/<script.*/" /> </ProhibitedAttrs> <ProhibitedChars display="false"> <Character display="false" name="<SCRIPT"/> <Character display="false" name="<%"/> <Character display="false" name="&lt;%"/> <Character display="false" name="&lt;SCRIPT"/> <Character display="false" regex=".*javascript.*"/> </ProhibitedChars> <ProhibCharEncoding display="false"> <Command display="false" name="Command1"> <Attribute display="false" name="parameter3" /> </Command> <Command display="false" name="Command2"> <Attribute display="false" name="parameter4" /> </Command> </ProhibCharEncoding> </XSiteScriptingProtection>Remarque : Si vous avez effectué la migration d'une version antérieure de HCL Commerce, votre bloc XSiteScriptingProtection peut contenir des valeurs d'attribut codées sous forme d'entités HTML. Par exemple, le bloc suivant est équivalent à l'élément ProhibitedChars ci-dessus :<ProhibitedChars display="false"> <Character display="&#102;&#97;&#108;&#115;&#101;" name="&#60;&#83;&#67;&#82;&#73;&#80;&#84;" /> <Character display="&#102;&#97;&#108;&#115;&#101;" name="&#60;&#37;" /> <Character display="&#102;&#97;&#108;&#115;&#101;" name="&#38;&#108;&#116;&#59;&#37;" /> <Character display="&#102;&#97;&#108;&#115;&#101;" name="&#38;&#108;&#116;&#59;&#83;&#67;&#82;&#73;&#80;&#84;" /> </ProhibitedChars>Voici quelques ajouts recommandés à l'élément ProhibitedCharacters de la configuration de scripts intersite pour votre fichier de configuration d'environnement de production :<Character display="false" regex=".*((%(25)+)|%)*((3C)|<)[\s]*+img.*"/> <Character display="false" regex=".*((%(25)+)|%)*((3C)|<)[\s]*+iframe.*"/> <Character display="false" regex=".*\x00.*"/> <Character regex=".*(((%(25)+)|%)+(3C))|<|&lt.*" /> <Character regex=".*&#((0)*60|x(0)*3c).*" /> <Character regex=".*\\(u|x)0*3c.*" />Remarque : Certaines de ces entrées peuvent être trop restrictives pour l'environnement de création lors de l'utilisation d'outils tels que le Centre de gestion.où :- XSiteScriptingProtection.enabled
- Indique si la protection des scripts intersite est activée. Les valeurs possibles sont true (valeur par défaut) ou false.
- XSiteScriptingProtection.ProhibitedAttrs.Attribute.name
- Nom des attributs de l'instruction (paramètre) qui ne sont pas autorisés. Les valeurs tiennent compte des majuscules et des minuscules et doivent être rigoureusement identiques.
Exemple :
<ProhibitedAttrs display="false"> <Attribute display="false" name="parameter1" /> <Attribute display="false" name="parameter2" /> </ProhibitedAttrs>Cette définition bloque la requête suivante car elle contient un attribut appelé parameter1 :
- XYZCommand?storeId=10001¶meter1=27&catalogId=10051
Les requêtes ci-dessous sont autorisées car les noms de leurs attributs ne correspondent pas exactement aux attributs restreints.
- XYZCommand?storeId=10001¶meter10=27&catalogId=10051
- XYZCommand?storeId=10001&Parameter2=27&catalogId=10051
- XSiteScriptingProtection.ProhibitedAttrs.Attribute.regex
- Les noms d'attribut correspondant à cette expression régulière ne sont pas admis. Les valeurs ne font pas la distinction entre les majuscules et les minuscules.Remarque : Il est recommandé d'ajouter l'expression régulière suivante dans votre configuration, afin d'empêcher les attaques de script intersite :
Exemple :<Attribute display="false" regex="./<script.*" />
Cette définition bloque la requête suivante car elle correspond à l'expression régulière ./<script./ :<ProhibitedAttrs display="false"> <Attribute display="false" regex="./<script.*" /> </ProhibitedAttrs>- XYZCommand?storeId=10001&>.<ScrIpt123=27&catalogId=10051
- XYZCommand?storeId=10001&>.script111=27&catalogId=10051
- XSiteScriptingProtection.ProhibitedChars.Character.name:
- Chaînes interdites ne devant être utilisées nulle part dans le nom des requêtes ou dans les valeurs des attributs. La chaîne interdite ne fait pas la distinction entre les majuscules et les minuscules et bloque également toutes les chaînes plus longues qui contiennent la chaîne indiquée.
Les chaînes suivantes sont spécifiées par défaut. Ces chaînes sont le plus souvent utilisées comme balises de scriptage lors d'attaques malveillantes de scriptage intersite :
<ProhibitedChars display="false"> <Character display="false" name="<SCRIPT"/> <Character display="false" name="<%"/> <Character display="false" name="&lt;%"/> <Character display="false" name="&lt;SCRIPT"/> <Character display="false" name="javascript"/> <Character display="false" name="

"/> <Character display="false" name="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;"/> <Character display="false" name="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;"/> <Character display="false" regex=".*((%(25)+)|%)*((3C)|<)[\s]*+script.*"/> </ProhibitedChars> - XSiteScriptingProtection.ProhibitedChars.Character.regex:
- Expressions régulières des chaînes interdites qui ne doivent être utilisées nulle part dans le nom des requêtes ou dans les valeurs des attributs. La chaîne interdite d'expressions régulières ne fait pas la distinction entre les majuscules et les minuscules.Exemple :
<ProhibitedChars display="false"> <Character display="false" regex="./javascript./"/> </ProhibitedChars>Cette définition bloque la requête suivante :
Demande Motif XYZCommand?storeId=abcjavascript123&storeId=101 Correspond à l'expression régulière ./javascript./ dans l'une des valeurs d'attribut. - XSiteScriptingProtection.ProhibCharEncoding.Command.name:
-
Nom d'une instruction (chemin d'accès à l'action ; défini dans les fichiers de configuration Struts) à exclure de la protection des scripts intersite en autorisant la valeur du paramètre qui y est spécifié à contenir les chaînes interdites. Le nom du paramètre correspondant est indiqué dans l'attribut XSiteScriptingProtection.ProhibCharEncoding.Command.Attribute.name.
Exemple :
Cette définition approuve la requête suivante :<ProhibCharEncoding display="false"> <Command display="false" name="Command1"> <Attribute display="false" name="parameter3" /> </Command> <Command display="false" name="Command2"> <Attribute display="false" name="parameter4" /> </Command> </ProhibCharEncoding>Demande Motif Command1?parameter3=<scripting Bien que "<script" soit généralement une chaîne interdite, les attributs Command1 et parameter3 ont été spécifiés en tant que paire d'exception dans l'élément ProhibCharEncoding. Comme attendu, la requête suivante sera toujours rejetée :
Demande Motif Command2?parameter3=<script Les attributs Command2 et parameter3 n'ont pas été spécifiés en tant que paire d'exception dans l'élément ProhibCharEncoding ; par conséquent, parameter3 ne peut pas contenir la chaîne interdite "<script". Remarque : Le type d'action ne se limite pas àBaseAction(commandes de contrôleur ou vues). Le type d'action peut également être(Ajax)RESTActionou(Ajax)ComponentServiceAction. Par exemple, l'exemple suivant exclut la commande de contrôleur AddressUpdate, la vue AddressBookForm et l'appel de service REST AjaxRESTPersonChangeServiceAddressAdd du filtrage.<ProhibCharEncoding display="false"> <Command display="false" name="AddressUpdate"><Attribute display="false" name="address1"/></Command> <Command display="false" name="AddressBookForm"><Attribute display="false" name="address1"/></Command> <Command display="false" name="AjaxRESTPersonChangeServiceAddressAdd"><Attribute display="false" name="address1"/></Command> </ProhibCharEncoding>
Pour l'API REST, le nom de commande sera le chemin d'accès relatif de l'URL du service REST. Par exemple :<Command display="false" name="/store/{storeId}/cart/copy_order" > <Attribute display="false" ... <Attribute display="false" ... </Command>Remarque : Lorsqu'une violation du scriptage intersite est détectée, la requête est modifiée afin d'être transmise à la vue ProhibCharEncodingErrorView.