Habilitación de la protección contra la vulnerabilidad Cross Site Scripting

Cuando está habilitada, la protección contra la vulnerabilidad Cross-Site Scripting rechaza las peticiones de usuario que contienen atributos (parámetros) o series que están designadas como no permitidos. También puede excluir mandatos de la protección contra la vulnerabilidad Cross-Site Scripting permitiendo que los valores de atributos especificados para dichos mandatos en concreto contengan series prohibidas. La protección contra la vulnerabilidad Cross-Site Scripting está habilitada de forma predeterminada.

Atención: Cross Site Scripting se ha definido globalmente, no en el nivel de módulo web. Puede activar o desactivar la protección contra la vulnerabilidad Cross Site Scripting sólo a nivel de módulo.
Nota:
  • Aunque esta característica podría rechazar de forma eficaz la ejecución de solicitudes malintencionadas, todos los archivos JSP deben seguir las mejores prácticas de JSTL. Es decir, utilizar la etiqueta <c:out> al acceder a cualquier atributo o parámetro de URL. De forma predeterminada, este código JSTL codificará con escape los cinco siguientes caracteres XML especiales para impedir que se utilicen como parte de una serie malintencionada.
    • <
    • >
    • &
    • '
  • Además de las recomendaciones sobre el uso de JSTL para librarse de una entrada sobre archivos JSP, es posible que necesite realizar pasos adicionales para limpiar la entrada en archivos JSP, en función de cómo está codificada la implementación. Debe seguir las OWASP XSS guidelines para obtener documentación de protección adicional.
  • La protección contra la vulnerabilidad Cross Site Scripting se ha mejorado para poder utilizar expresiones regulares que no distinguen entre mayúsculas y minúsculas. La sintaxis de las expresiones regulares se basa en el estándar de Java. Para conocer la sintaxis de expresión regular, consulte la documentación de API Java Class Pattern de Sun.
  • HCL Commerce da soporte a la protección de los scripts entre sitios para el cuerpo de las solicitudes de REST.
Atención: La protección contra la vulnerabilidad Cross-Site Scripting es una característica restrictiva en el sentido que restringe la ejecución de mandatos basándose en la configuración. La característica no comprueba qué atributos o series se han definido como prohibidos. Por consiguiente, al configurarla, asegúrese de que los atributos prohibidos no son los utilizados por los mandatos y que las series prohibidas no son valores que se pasan normalmente a los mandatos. Configure esta característica con mucha precaución.

La protección contra la vulnerabilidad Cross-Site Scripting se puede inhabilitar en el nivel de módulo de la web. Por ejemplo, puede inhabilitar de forma explícita el recuadro de selección Cross-Site Scripting en HCL Commerce Accelerator mientras lo habilita en las tiendas. Sólo el módulo web de tiendas tiene la característica de protección contra la vulnerabilidad Cross Site Scripting habilitada de forma predeterminada.

Para configurar la protección contra la vulnerabilidad Cross-Site Scripting, abra wc-server.xml y busque el módulo web que desea para inhabilitar la reincorporación. Por ejemplo, si desea inhabilitar la comprobación en las solicitudes de HCL Commerce Accelerator, efectúe los cambios siguientes marcados en negrita:
<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>
Nota: Si efectúa comprobaciones de scripts entre sitios para los valores cifrados de HCL Commerce tales como el parámetro de URL krypto o el cookie WC_AUTHENTICATION, los siguientes caracteres no alfanuméricos codificados en Base64 se utilizan en estos cifrados; '+', '/', '=', y el carácter de alimentación de línea (URL codificado '%0A').

De forma alternativa, puede bloquear solicitudes en HCL Commerce Accelerator por cada mandato. Puede determinar que todos los mandatos de HCL Commerce Accelerator abran este archivo: WC_install/xml/policies/xml/defaultAccessControlPolicies.xml vea todos los mandatos a los que puede acceder el rol de vendedor. El rol de vendedor es el superusuario de HCL Commerce Accelerator. Los mandatos a los que el rol de vendedor puede acceder están definidos en "SellersCmdResourceGroup".

Procedimiento

  1. Abra el archivo de configuración de HCL Commerce archivo de configuración (wc-server.xml).
  2. Edite el bloqueo siguiente:
    
    <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=".*/&lt;script.*/" />
          </ProhibitedAttrs>
    
          <ProhibitedChars display="false">
             <Character display="false" name="&lt;SCRIPT"/>
             <Character display="false" name="&lt;%"/>
             <Character display="false" name="&amp;lt;%"/>
             <Character display="false" name="&amp;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>
    
    Nota: Si ha migrado de una versión anterior de HCL Commerce, es posible que el bloqueo XSiteScriptingProtection tenga valores de atributo codificados como entidades HTML. Por ejemplo, lo siguiente es equivalente al elemento ProhibitedChars anterior:
    
          <ProhibitedChars display="false">
             <Character display="&amp;#102;&amp;#97;&amp;#108;&amp;#115;&amp;#101;"
                        name="&amp;#60;&amp;#83;&amp;#67;&amp;#82;&amp;#73;&amp;#80;&amp;#84;" />
             <Character display="&amp;#102;&amp;#97;&amp;#108;&amp;#115;&amp;#101;"
                        name="&amp;#60;&amp;#37;" />
             <Character display="&amp;#102;&amp;#97;&amp;#108;&amp;#115;&amp;#101;"
                        name="&amp;#38;&amp;#108;&amp;#116;&amp;#59;&amp;#37;" />
             <Character display="&amp;#102;&amp;#97;&amp;#108;&amp;#115;&amp;#101;"
                        name="&amp;#38;&amp;#108;&amp;#116;&amp;#59;&amp;#83;&amp;#67;&amp;#82;&amp;#73;&amp;#80;&amp;#84;" />  
          </ProhibitedChars>
    
    A continuación se indican algunas adiciones recomendadas para el elemento ProhibitedCharacters de la configuración de Cross-Site Scripting para el archivo de configuración del entorno de producción:
    <Character display="false" regex=".*((%(25)+)|%)*((3C)|&lt;)[\s]*+img.*"/>
    <Character display="false" regex=".*((%(25)+)|%)*((3C)|&lt;)[\s]*+iframe.*"/>
    <Character display="false" regex=".*\x00.*"/>
    <Character regex=".*(((%(25)+)|%)+(3C))|&lt;|&amp;lt.*" />
    <Character regex=".*&amp;#((0)*60|x(0)*3c).*" />
    <Character regex=".*\\(u|x)0*3c.*" />
    
    Nota: Algunas de estas entradas pueden ser demasiado restrictivas para el entorno de autoría cuando se utilizan herramientas como el Centro de gestión.
    Donde:
    XSiteScriptingProtection.enabled
    Especifica si la protección contra la vulnerabilidad Cross-Site Scripting está habilitada. Los valores posibles son true (valor predeterminado) o false.
    XSiteScriptingProtection.ProhibitedAttrs.Attribute.name
    El nombre de los atributos (parámetro) de mandato que no están permitidos. Estos valores son sensibles a las mayúsculas y minúsculas y deben coincide exactamente.

    Ejemplo:

    
    <ProhibitedAttrs display="false">
            <Attribute display="false"  name="parameter1" />
            <Attribute display="false"  name="parameter2" />
    </ProhibitedAttrs>
    

    Esta definición bloqueará la solicitud siguiente porque tiene un atributo denominado parameter1:

    • XYZCommand?storeId=10001&parameter1=27&catalogId=10051

    Se permitirán Las solicitudes siguientes porque los nombres de atributos no coinciden exactamente con ninguno de los atributos restringidos:

    • XYZCommand?storeId=10001&parameter10=27&catalogId=10051
    • XYZCommand?storeId=10001&Parameter2=27&catalogId=10051
    XSiteScriptingProtection.ProhibitedAttrs.Attribute.regex
    Los nombres de atributos que coinciden con esta expresión regular no están permitidos. Los valores no distinguen entre mayúsculas y minúsculas.
    Nota: Es aconsejable añadir la expresión regular siguiente a la configuración para impedir intrusiones malintencionadas de Cross-Site Scripting:
    
    <Attribute display="false"  regex="./&lt;script.*" />
    
    Ejemplo:
    
    <ProhibitedAttrs display="false">
            <Attribute display="false"  regex="./&lt;script.*" />
    </ProhibitedAttrs>
    
    Esta definición bloqueará la petición siguiente porque coincide con la expresión regular ./<script./:
    • XYZCommand?storeId=10001&>.<ScrIpt123=27&catalogId=10051
    una solicitud siguiente estará permitida porque los nombres de atributos no coinciden con la expresión regular configurada:
    • XYZCommand?storeId=10001&>.script111=27&catalogId=10051
    XSiteScriptingProtection.ProhibitedChars.Character.name:
    Series prohibidas que no deberían utilizarse en ningún lugar del nombre de solicitud o en los valores de atributos. La serie prohibida no distingue entre mayúsculas y minúsculas y también bloqueará grandes series que contienen la serie especificada.

    Las series siguientes se especifican de forma predeterminada. Estas series son las más utilizadas como códigos de script en las intrusiones malintencionadas de Cross-Site Scripting:

    <ProhibitedChars display="false"> 
      <Character display="false" name="<SCRIPT"/> 
      <Character display="false" name="<%"/> 
      <Character display="false" name="&amp;lt;%"/> 
      <Character display="false" name="&amp;lt;SCRIPT"/> 
      <Character display="false" name="javascript"/> 
      <Character display="false" name="&#xa;&#xd;"/> 
      <Character display="false" name="&amp;#x6a;&amp;#x61;&amp;#x76;&amp;#x61;&amp;#x73;&amp;#x63;&amp;#x72;&amp;#x69;&amp;#x70;&amp;#x74;"/> 
      <Character display="false" name="&amp;#106;&amp;#97;&amp;#118;&amp;#97;&amp;#115;&amp;#99;&amp;#114;&amp;#105;&amp;#112;&amp;#116;"/> 
      <Character display="false" regex=".*((%(25)+)|%)*((3C)|<)[\s]*+script.*"/> 
    </ProhibitedChars> 
    
    XSiteScriptingProtection.ProhibitedChars.Character.regex:
    Expresiones regulares que no deberían utilizarse en ningún punto del nombre de petición ni en los valores de atributos. La serie prohibida de expresión regular no distingue entre mayúsculas y minúsculas.
    Ejemplo:
    
    <ProhibitedChars display="false">
            <Character display="false" regex="./javascript./"/>
    </ProhibitedChars>
    

    Esta definición bloqueará la siguiente solicitud:

    Petición Razón
    XYZCommand?storeId=abcjavascript123&storeId=101 Coincide con la expresión regular ./javascript./ en uno de los valores de atributos.
    XSiteScriptingProtection.ProhibCharEncoding.Command.name:

    Nombre de un mandato (vía de acceso de acción; definido en los archivos de configuración de Struts) a excluir de la protección contra la vulnerabilidad Cross-Site Scripting permitiendo que el valor del parámetro especificado contenga series prohibidas. El nombre del parámetro correspondiente se especifica en el atributo XSiteScriptingProtection.ProhibCharEncoding.Command.Attribute.name.

    Ejemplo:

    
    <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>
    
    Esta definición aprobará una solicitud siguiente:
    Solicitud Razón
    Command1?parameter3=<scripting Aunque "<script" suele ser una cadena prohibida, se han especificado Command1 y parameter3 como una pareja de excepciones en el elemento ProhibCharEncoding.

    Como se espera, una solicitud siguiente se seguirá rechazando:

    Solicitud Razón
    Command2?parameter3=<script Command2 y parameter3 no se han especificado como una pareja de excepciones en el elemento ProhibCharEncoding; por consiguiente, no se permite que parameter3 contenga la cadena prohibida "<script".
    Nota: El tipo de acción no se limita a BaseAction (mandatos de controlador o vistas). El tipo de acción también puede ser (Ajax)RESTAction o (Ajax)ComponentServiceAction. Por ejemplo, el siguiente ejemplo hace que se excluyan de la filtración el mandato de controlador AddressUpdate, la vista AddressBookForm y la llamada de servicio REST AjaxRESTPersonChangeServiceAddressAdd.
    <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>
    Para la API de REST, el nombre del mandato será la vía de acceso de URL relativa del servicio REST. Por ejemplo:
    <Command display="false" name="/store/{storeId}/cart/copy_order" >
    <Attribute display="false" ...
    <Attribute display="false" ...
    </Command>
    Nota: Cuando se ha detectado una violación de la vulnerabilidad de Cross-Site Scripting, una solicitud se cambia para que vaya a la vista ProhibCharEncodingErrorView.