Este artículo le muestra los elementos clave para comprobar la seguridad y la privacidad.
Privacy

Configuración de privacidad y endurecimiento

Haga clic aquí


icon_clef

Gestión de acceso

Haga clic aquí


Server

Configuración del servidor

Haga clic aquí


Development

Pautas de scripting y codificación

Haga clic aquí


Network

Red, base de datos y SSL/TLS

Haga clic aquí


Web

Configuración del servidor web

Haga clic aquí


Privacidad

Privacy

La configuración y el refuerzo de la privacidad son elementos clave de la optimización de la seguridad. Lea esta sección para obtener más información sobre las prácticas recomendadas de privacidad:

  • Proteja su PII de cliente usando HTTPS en lugar de HTTP
  • Utilice la restricción de la vista PII para proteger la privacidad y evitar que se utilicen los datos de forma indebida.
  • Asegúrese de que las contraseñas cifradas estén restringidas.
  • Proteja las páginas que puedan contener información personal, como páginas espejo, aplicaciones web, etc.

Solicitudes de privacidad

Adobe Campaign ofrece un conjunto de herramientas para ayudarle con el cumplimiento de la privacidad de RGPD y CCPA.

Consulte esta página para obtener información general sobre qué es la administración de privacidad y sus pasos de implementación en Adobe Campaign. También encontrará recomendaciones e información general del proceso y de los perfiles del usuario.  

Personalización de la URL

Al añadir enlaces personalizados al contenido, evite siempre cualquier personalización en la parte del nombre de host de la dirección URL para evitar posibles lagunas de seguridad. Los ejemplos siguientes nunca deben utilizarse en todos los atributos de URL <a href=""> o <img src="">:

  • <%= url >
  • https://<%= url >
  • https://<%= domain >/path
  • https://<%= sub-domain >.domain.tld/path
  • https://sub.domain<%= main domain %>/path

Recomendación

Para validar y asegurarse de que no está utilizando lo anterior, ejecute una consulta en la tabla de URL de seguimiento mediante el Editor de consultas genérico de Campaign o cree un flujo de trabajo con criterios de filtro en la actividad de consulta.

Ejemplo:

  1. Cree un flujo de trabajo y agregue una actividad de consulta. Más información.
  2. Abra la actividad de consulta y cree un filtro en la tabla nmsTrackingUrl de este modo: la URL de origen comienza con http://<% o la URL de origen comienza con https://<%.
  3. Ejecute el flujo de trabajo y compruebe si hay resultados.
  4. Si es así, abra la transición de salida para ver la lista de las direcciones URL.
Consultas en direcciones URL dinámicas

Mecanismo de firma

Para mejorar la seguridad, en la versión 19.1.4 (9032@3a9dc9c) se ha introducido un nuevo mecanismo de firma para el seguimiento de vínculos en correos electrónicos, que está disponible en la versión 19.1.4 (9032@3a9dc9c) y en Campaign 20.2. Esta opción está habilitada de forma predeterminada para todos los clientes.

Nota:

Cuando se hace clic en una dirección URL firmada con formato incorrecto, se obtiene el siguiente error: "No se encontró la dirección URL solicitada '... '."

Además, los clientes alojados e híbridos de la versión 19.1.4 (9032@3a9dc9c y 9032@800be2e) y de Campaign 20.2 pueden utilizar una mejora para deshabilitar las direcciones URL generadas a partir de compilaciones anteriores. Esta opción está deshabilitada de manera predeterminada. Póngase en contacto con el Servicio de atención al cliente para habilitar esta función.

Para activar este nuevo mecanismo, los clientes locales deben seguir estos pasos en todos los servidores de Campaign:

  1. En el archivo de configuración del servidor (serverConf.xml), cambie blockRedirectForUnsignedTrackingLink a true.
  2. Reinicie el servicio nlserver.
  3. En el servidor de seguimiento, reinicie el servidor web (apache2 en Debian; httpd en CentOS/RedHat; IIS en Windows).

Precaución:

Los clientes que usan la versión 19.1.4 (9032@3a9dc9c) pueden experimentar problemas con los envíos de notificaciones push mediante el vínculo de seguimiento o con los envíos que utilizan las etiquetas de anclaje. Si es así, Adobe recomienda desactivar el nuevo mecanismo de firma para el seguimiento de vínculos. 

Los clientes alojados e híbridos deben ponerse en contacto con el Servicio de atención al cliente para deshabilitar este mecanismo.

Los clientes locales pueden seguir el paso a continuación:

  1. En el archivo de configuración del servidor (serverConf.xml), cambie signEmailLinks a false.
  2. Reinicie el servicio nlserver.
  3. En el servidor de seguimiento, reinicie el servidor web (apache2 en Debian; httpd en CentOS/RedHat; IIS en Windows).

Restricción de datos

Debe asegurarse de que los usuarios autenticados con privilegios bajos no puedan acceder a las contraseñas cifradas. Para ello, hay dos formas principales: restringir el acceso únicamente a los campos de contraseña o a toda la entidad (es necesaria una compilación >= 8770).

Esta restricción permite eliminar los campos con contraseñas, pero permite a la cuenta externa acceder a ella desde la interfaz de todos los usuarios. Consulte la documentación.

  1. Vaya a Administración > Configuración > Esquemas de datos.

  2. Cree una nueva Extensión de un esquema.

    Contraseña
  3. Seleccione Cuenta externa (extAccount).

  4. En la última pantalla del asistente, puede editar el nuevo srcSchema para restringir el acceso a todos los campos de contraseña:

    Puede reemplazar el elemento principal (<element name="extAccount" ... >):

    <element name="extAccount">
        <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="password"/>
        <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="clientSecret"/>
      
        <element name="s3Account">
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="awsSecret"/>
        </element>
        <element name="wapPush">
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="password"/>
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="clientSecret"/>
        </element>
        <element name="mms">
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="password"/>
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="clientSecret"/>
        </element>
      </element>

    Su srcSchema extendido puede tener el siguiente aspecto:

    <srcSchema _cs="External Accounts (cus)" created="2017-05-12 07:53:49.691Z" createdBy-id="0"
               desc="Definition of external accounts (Email, SMS...) used by the modules"
               entitySchema="xtk:srcSchema" extendedSchema="nms:extAccount" img="" label="External Accounts"
               labelSingular="External account" lastModified="2017-05-12 08:33:49.365Z"
               mappingType="sql" md5="E9BB0CD6A4375F500027C86EA854E101" modifiedBy-id="0"
               name="extAccount" namespace="cus" xtkschema="xtk:srcSchema">
      <createdBy _cs="Administrator (admin)"/>
      <modifiedBy _cs="Administrator (admin)"/>
      <element name="extAccount">
        <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="password"/>
        <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="clientSecret"/>
     
        <element name="s3Account">
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="awsSecret"/>
        </element>
        <element name="wapPush">
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="password"/>
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="clientSecret"/>
        </element>
        <element name="mms">
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="password"/>
          <attribute accessibleIf="$(loginId) = 0 or $(login) = 'admin'" name="clientSecret"/>
        </element>
      </element>
    </srcSchema>

    Nota:

    Puede reemplazar $(loginId) = 0 o $(login) = 'admin’ por hasNamedRight('admin') para permitir que todos los usuarios con privilegios de administrador vean estas contraseñas.

Protección de páginas que contienen PII

Recomendamos a los clientes de la empresa que protejan las páginas que puedan contener información personal, como páginas espejo, aplicaciones web, etc.

El objetivo de este procedimiento es evitar que se indexen estas páginas, evitando así un posible riesgo de seguridad. Aquí se ofrecen algunos artículos útiles:

Para proteger las páginas, siga estos pasos:

  1. Añada un archivo robots.txt en la raíz del servidor web (Apache o IIS). A continuación se muestra el contenido del archivo:

    # Make changes for all web spiders
    User-agent: 
    *Disallow: /
              

    Para obtener más información sobre IIS, consulte esta página.

    En el caso de Apache, puede colocar el archivo en /var/www/robots.txt (Debian)

  2. A veces añadir el archivo robots.txt no es suficiente en términos de seguridad. Por ejemplo: si otro sitio web contiene un enlace a la página, puede aparecer en un resultado de búsqueda.

    Además del archivo robots.txt, se recomienda añadir un encabezado X-Robots-Tag. Puede hacerlo en Apache o IIS y en el archivo de configuración serverConf.xml.

    Para obtener más información, consulte este artículo.

Gestión de acceso

Access

La gestión de acceso es una parte importante del refuerzo de la seguridad. Estas son algunas de las optimizaciones principales:

  • Creación de suficientes grupos de seguridad
  • Comprobación de que cada operador tenga los derechos de acceso adecuados
  • Evite utilizar el operador de administrador y evite tener demasiados operadores en el grupo de administración

Consulte la documentación: Derechos de acceso y Propiedades de acceso a carpetas.


Operador de aplicaciones web

De forma predeterminada, el operador webApp es un administrador. Para mejorar la seguridad, siga estas directrices:

  • Sustituya el derecho asignado de administrador desde este operador por uno nuevo (puede denominarse “webapp”). Para obtener más información, consulte esta documentación.
  • Añada el operador webApp en las carpetas (principalmente las carpetas de destinatario) para otorgar acceso de lectura y escritura a los destinatarios. Para obtener más información, consulte esta documentación.
  • Si utiliza una instancia de multimarca (o multi-geo), puede que desee dividir el acceso a la aplicación web entre distintas carpetas de destinatarios: Para ello:
    1. Duplique el operador de la aplicación web
    2. Escriba un nombre para cada duplicado. Por ejemplo: webapp_brand, webapp_brand2, etc.
    3. Duplique una plantilla de aplicación web para tener una plantilla por marca y edite las propiedades para cambiar el operador seleccionando Utilice una cuenta específica.  Obtenga más información en esta documentación.

Grupos de seguridad y operadores administrativos

Cree grupos de seguridad suficientes para proporcionar únicamente los derechos necesarios a sus operadores para permitirles hacer lo que necesitan y nada más.

No utilice el operador de administrador (o no lo comparta). Cree un operador por cada usuario físico (para tener una auditoría y un registro precisos). Añada los administradores recién designados al grupo de administradores. Si no utiliza el operador de administrador, no lo elimine y no lo deshabilite (este operador se utiliza internamente para ejecutar el procesamiento). Sin embargo, puede prohibir el acceso a la consola de cliente y limitar su zona de seguridad (a localhost).

Evite añadir demasiados operadores en el grupo de administración (o con privilegios de administrador). Son operadores muy poderosos (pueden ejecutar todas las declaraciones SQL, ejecutar comandos en el servidor, etc.).

Adobe Campaign proporciona tres privilegios de alto nivel usando derechos asignados:

  • ADMINISTRACIÓN (admin): Proporciona acceso a todo y permite realizar todo (ignorando todas las comprobaciones de derechos asignados), por lo que incluye los derechos asignados de EJECUCIÓN DE PROGRAMAS (createProcess) y SQL
  • EJECUCIÓN DE PROGRAMAS (createProcess): Permite ejecutar programas externos (en el servidor)
  • SQL: Permite ejecutar secuencias de comandos SQL en la base de datos (para poder omitir el modelo de seguridad). Nota: Si necesita realizar cálculos complejos (filtrado, por ejemplo), puede pedir al administrador de la base de datos que cree una función SQL y que los añada a la lista de permitidos. Obtenga más información en esta sección.
  • Otórguelos solo a unos pocos operadores de confianza

Pautas de scripting y codificación

Dev

Al desarrollar en Adobe Campaign (flujos de trabajo, Javascript, JSSP, etc.), siga siempre estas directrices:

  • Secuencias de comandos: Intente evitar las declaraciones SQL, utilice funciones parametrizadas en lugar de concatenaciones de cadenas, evite la inyección de SQL al añadir funciones SQL para usar en la lista de permitidos.
  • Protección del modelo de datos: Utilice derechos asignados para limitar las acciones de operadores, añada filtros del sistema (sysFilter)
  • Adición de captchas en aplicaciones web: Aprenda a añadir captchas en las páginas de destino y páginas de suscripción públicas.

Scripts

Para obtener más información, consulte la documentación de JSAPI de Campaign.

Si desarrolla secuencias de comandos con flujos de trabajo, aplicaciones web, jssp, siga estas recomendaciones:

  • Intente evitar las declaraciones SQL en la medida de lo posible.
  • Si es necesario, utilice funciones parametrizadas (declaraciones de preparación) en lugar de concatenaciones de cadenas.

Práctica no recomendada:

sqlGetInt( "select iRecipientId from NmsRecipient where sEmail ='" + request.getParameter('email') +  "'  limit 1" )

Práctica recomendada:

sqlGetInt( "select iRecipientId from NmsRecipient where sEmail = $(sz) limit 1", request.getParameter('email'));

Advertencia: sqlSelect no admite esta función, por lo que debe usar la función de consulta de la clase DBEngine:

var cnx = application.getConnection() 
var stmt = cnx.query("SELECT sFirstName, sLastName FROM NmsRecipient where sEmail = $(sz)", request.getParameter('email'))
for each(var row in stmt) logInfo(row[0] + " : " + row[1]) 
cnx.dispose()

Para evitar inyecciones SQL, las funciones SQL deben agregarse a la lista de permitidos para usar en Adobe Campaign. Una vez añadidos a la lista de permitidos, los operadores del editor de expresiones los verán. Consulte la documentaciónAdvertencia: Si utiliza una compilación anterior a la 8140, la opción XtkPassUnknownSQLFunctionsToRDBMS puede establecerse como “1”. Si desea proteger la base de datos, elimine esta opción (o establézcala en “0”).

Si utiliza la entrada del usuario para crear filtros en las consultas o las declaraciones SQL, siempre debe escaparlas (consulte la documentación de JSAPI de Campaign: Protección de datos: funciones de escape). Estas funciones son:

  • NL.XML.escape(data)
  • NL.SQL.escape(data)
  • NL.JS.escape(data)
  • NL.XML.escapeAttribute(data)

Protección del nuevo modelo de datos

Basado en carpetas

Consulte estas secciones de la documentación del producto:

Derechos asignados

Además del modelo de seguridad basado en carpetas, puede usar derechos asignados para limitar las acciones del operador:

  • Puede añadir algunos filtros del sistema (sysFilter) para evitar la lectura y escritura de los datos. Ver la documentación.
<sysFilter name="writeAccess">     
    <condition enabledIf="hasNamedRight('myNewRole')=false" expr="FALSE"/>   
</sysFilter>
  • También puede proteger algunas acciones (método SOAP) definidas en esquemas. Solo tiene que establecer el atributo de acceso con el derecho asignado correspondiente como valor.
<method name="grantVIPAccess" access="myNewRole">
      <parameters>
...
      </parameters>
    </method>

         

Para obtener más información, consulte esta sección.

Precaución:

Puede utilizar derechos asignados en el nodo de comando de un directorio de navegación. Proporciona una mejor experiencia de usuario, pero no ofrece protección (utilice solo el lado del cliente para ocultarlos o deshabilitarlos). Debe utilizar el atributo de acceso.

Tabla de desbordamiento

Si necesita proteger datos confidenciales (parte de un esquema) en función del nivel de acceso del operador, no los oculte en la definición del formulario (condiciones enabledIf/visibleIf). La pantalla carga toda la entidad, y también puede mostrarlas en la definición de la columna. Para ello, debe crear una tabla de desbordamiento. Consulte esta documentación.

Adición de captchas en aplicaciones web

Se recomienda añadir un captcha en las páginas de destino o de suscripción públicas. Desafortunadamente, la adición de un captcha en las páginas del DCE (Editor de contenido digital) no es fácil. Le mostramos cómo añadir un captcha v5 o un reCAPTCHA de Google.

La forma general de añadir un captcha en el DCE es crear un bloque personalizado para incluirlo fácilmente dentro del contenido de la página. Debe añadir una actividad de Script y una Prueba.

Bloques personalizados

  1. Vaya a Recursos > Administración de campañas > Bloques de personalización y cree uno nuevo.

  2. Utilice el tipo de contenido de la Aplicación web y seleccione Visible en los menús de personalización.

    Para obtener más información, consulte la documentación.

    A continuación se muestra un ejemplo del procedimiento captcha de Campaign:

    <%
    var captchaID = CaptchaIDGen();
    %>
    <img src="/nms/jsp/captcha.jsp?captchaID=<%=captchaID%>&width=200&height=50&minWordSize=8&maxWordSize=8"/>
    <input id="captchaValue" name="captchaValue" <%= String(ctx.vars.captchaValid) === "false" ? class="ui-state-error" : "" %>>
    <input type="hidden" name="captchaID" value="<%=captchaID%>"/>
    <%
    if( serverForm.isInputErroneous("captchaValue") ) {
    %>
    <script type="text/javascript">  
    $("#captchaValue").addClass("ui-state-error")
    </script>
    <%
    }
    %>
    • Las líneas de la 1 a la 6 generan todas las entradas necesarias.
    • Las líneas de la 7 al final gestionan los errores.
    • La línea 4 permite cambiar el tamaño del cuadro gris del captcha (ancho/alto) y la longitud de la palabra generada (minWordSize/maxWordSize).
    • Antes de utilizar Google reCAPTCHA, debe registrarse en Google y crear un nuevo sitio de reCAPTCHA.
    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>

    Debe poder desactivar el botón de validación, pero ya que no tenemos ningún botón o enlace estándar, es mejor hacerlo en el propio código HTML. Para aprender cómo hacerlo, consulte esta página.

Actualización de la aplicación web

  1. Acceda a las propiedades de su aplicación web para añadir una variable booleana llamada captchaValid.

    captcha
  2. Entre la última página y la actividad Almacenamiento, añada un Script y una Prueba. Vincule la rama True al Almacenamiento y la otra a la página que tendrá el captcha.

    Captcha: paso 2
  3. Edite la condición de la rama True con “[vars / captchaValid]” es igual a “True”.

    Captcha: paso 3
  4. Luego, edite la actividad Script. El contenido dependerá del motor del captcha elegido.

  5. Finalmente, puede añadir al bloque personalizado en la página del DCE: consulte la documentación

    Captcha: paso 5
    Captcha: paso 6

    ADVERTENCIA: Para la integración de reCAPTCHA, debe añadir JavaScript del lado del cliente en el HTML (en <head>...</head>):

    <script src="https://www.google.com/recaptcha/api.js" async defer></script>

Captcha de Campaign

var captchaID = request.getParameter("captchaID");
var captchaValue = request.getParameter("captchaValue");
 
if( !CaptchaValidate(captchaID, captchaValue) ) {
  serverForm.logInputError("captchaValue",
                           "The characters you typed for the captcha must match the image ones.",
                           "captchaValue")
  ctx.vars.captchaValid = false
}
else
  ctx.vars.captchaValid = true

Línea 6: puede introducir cualquier tipo de mensaje de error.

Google reCAPTCHA

ctx.vars.captchaValid = false
var gReCaptchaResponse = request.getParameter("g-recaptcha-response");
 
// Call reCaptcha API to validate it
var req = new HttpClientRequest("https://www.google.com/recaptcha/api/siteverify")
req.method = "POST"
req.header["Content-Type"] = "application/x-www-form-urlencoded"
req.body = "secret=YOUR_SECRET_HERE&response=" + encodeURIComponent(gReCaptchaResponse)
req.execute()
var response = req.response
if( response.code == 200 ) {
  captchaRes = JSON.parse(response.body.toString(response.codePage));
  ctx.vars.captchaValid = captchaRes.success
}
 
if( ctx.vars.captchaValid == false ) {
  serverForm.logInputError("reCaptcha",
                           "Please validate the captcha",
                           "reCaptcha")
  logInfo("reCaptcha not validated")
}

Para utilizar JSON.parse debe incluir “shared/json2.js” en su webApp:

Captcha: paso 7

A partir de la versión 8797, para utilizar la URL de la API de verificación, tiene que añadirla a la lista de permitidos en el archivo serverConf añadiendo el nodo urlPermission:

<url dnsSuffix="www.google.com" urlRegEx="https://www.google.com/recaptcha/api/siteverify"/>

Red, base de datos y SSL/TLS

Network

Un aspecto muy importante que debe comprobar cuándo implementar un tipo de arquitectura local es la configuración de red. Asegúrese de que NO se pueda acceder directamente al servidor Tomcat desde fuera del servidor:

  • Cierre el puerto Tomcat (8080) en direcciones IP externas (debe trabajar en localhost)
  • No asigne el puerto HTTP estándar (80) al de Tomcat (8080)

Cuando sea posible, use un canal seguro: POP3S en lugar de POP3 (o POP3 en lugar de TLS).


Base de datos

Es imprescindible que siga la seguridad del motor de su base de datos.

Configuración SSL/TLS

Para comprobar el certificado, puede utilizar openssl. Para comprobar las claves activas, puede utilizar nmap:

#!/bin/sh
#
# usage: testSSL.sh remote.host.name [port]
#
REMHOST=$1
REMPORT=${2:-443}

echo |\
openssl s_client -connect ${REMHOST}:${REMPORT} -servername ${REMHOST} 2>&1 |\
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' |\
openssl x509 -noout -subject -dates
  
nmap --script ssl-enum-ciphers -p ${REMPORT} ${REMHOST}

También puede utilizar un script de Python sslyze, que realiza ambos pasos.

python sslyze.py --sslv2 --sslv3 --tlsv1 --reneg --resum --certinfo=basic --hide_rejected_ciphers --sni=SNI myserver.com

Configuración del servidor

Server

Se deben configurar todos los servidores. Los archivos de configuración son del tipo serverConf.xml y config-<instance>.xml. Estos son los elementos clave que se deben comprobar:

  • Zonas de seguridad: Configure las zonas de seguridad de manera que tengan en cuenta las direcciones IP de los clientes de un proxy.
  • Protección de carga de archivos: Limita los tipos de archivos que se pueden cargar en el servidor de Adobe Campaign mediante un nuevo atributo uploadAllowList. Esto se puede utilizar en el archivo de configuración del servidor.
  • Transmisión: Ajuste la configuración de retransmisiones desactivando las reglas de transmisión para aplicaciones o módulos no utilizados.
  • Protección de conexión saliente y restricción de comando (del lado del servidor)
  • Se pueden añadir encabezados HTTP adicionales, activar checkIPConsistent, enableTLS, sessionTimeOutSec, etc.

Consulte la documentación de configuración del servidor de Campaign y la Descripción del archivo de configuración del servidor para obtener más información.


Configuración de zonas de seguridad

Precaución:

A partir de la versión 8977, la interfaz de usuario de autoservicio de zonas de seguridad ya no está disponible.

  • Si está alojado en AWS, la adición de IP a la lista de permitidos debe realizarse en el Panel de control. Para obtener más información, consulte la documentación específica.
  • Si no está alojado en AWS, póngase en contacto con el equipo de asistencia de Adobe para añadir la IP a la lista de permitidos.

 Para comprobar si la instancia está alojada en AWS, siga los pasos detallados en esta sección.

Para aprender a utilizar la interfaz de usuario de las zonas de seguridad en la configuración de la zona de seguridad de VPN, consulte esta nota técnica.

Asegúrese de que el proxy inverso no esté permitido en subNetwork. Si es así, todo el tráfico se detecta como proveniente de esta IP local, por lo tanto se considera de confianza.

Minimice el uso de sessionTokenOnly="true":

  • Advertencia: Si este atributo se establece en True, el operador se puede exponer a un ataque CRSF.
  • Además, la cookie sessionToken no está configurada con un indicador httpOnly, por lo que el código javascript del cliente puede leerlo.
  • Sin embargo, el Centro de mensajes en varias celdas de ejecución requiere sessionTokenOnly: cree una nueva zona de seguridad con sessionTokenOnly establecida como “True” y añada solamente las IP necesarias en esta zona.

Cuando sea posible, establezca todos los allowHTTP, showErrors como falsos (no para localhost) y compruébelos.

  • allowHTTP = "False": obliga a los operadores a utilizar HTTPS
  • showErrors = "falso": oculta errores técnicos (incluidos los SQL). Evita que se muestre demasiada información, pero se reduce la capacidad del especialista en marketing para resolver errores (sin solicitar más información de un administrador)

Establezca allowDebug en True solo en las páginas IP utilizadas por los usuarios o administradores de marketing que necesiten crear estudios, webApps e informes de webApps. Este indicador permite a estas IP obtener reglas de transmisión y debug.

Nunca establezca allowEmptyPassword, allowUserPassword, allowSQLInjection como True. Estos atributos solo están disponibles para permitir una migración fluida desde v5 y v6.0:

  • allowEmptyPassword permite a los operadores usar una contraseña vacía. Si es su caso, notifique a todos los operadores para que les soliciten que establezcan una contraseña con una fecha límite. Una vez que esta fecha límite ha pasado, cambie este atributo a falso.
  • allowUserPassword permite que los operadores envíen sus credenciales como parámetros (por lo que se registrarán mediante apache/IIS/proxy). Esta función se utilizó en el pasado para simplificar el uso de la API. Puede consultar sus libros de programación (o en la especificación) si algunas aplicaciones de terceros utilizan esto. Si es así, debe enviar una notificación para cambiar la forma en que utilizan nuestra API y eliminar cuanto antes esta función.
  • allowSQLInjection permite al usuario realizar raíces SQL utilizando una sintaxis antigua. En cuanto sea posible, lleve a cabo las correcciones descritas en la documentación para poder establecer este atributo en false.

Puede utilizar /nl/jsp/ping.jsp?zones=true para comprobar la configuración de la zona de seguridad. Esta página muestra el estado activo de las medidas de seguridad (calculadas con estos indicadores de seguridad) para la IP actual.

HttpOnly cookie/useSecurityToken: consulte el indicador sessionTokenOnly.

Minimizar las direcciones IP agregadas a la lista de permitidos: en las zonas de seguridad, hemos agregado los 3 rangos para redes privadas. Es poco probable que utilice todas estas direcciones IP. Así pues, mantenga solo las que necesite.

Actualice el operador webApp/internal para que solo se pueda acceder en localhost.

Protección de la carga de archivos

Compruebe con los usuarios operativos qué tipo de archivos se cargan en el servidor mediante la interfaz nlclient/web. Como recordatorio, las necesidades comerciales pueden ser:

  • imágenes (jpg, gif, png...)
  • contenido (zip, html, css...)
  • activos de marketing (doc, xls, pdf, psd, tiff...)
  • archivo adjunto de correo electrónico (doc, pdf...)
  • ETL (txt, csv, tab...)
  • etc.

Añádalos todos en serverConf/shared/datastore/@uploadAllowlist (expresión regular java válida). Para obtener más información, consulte la documentación relacionada

Adobe Campaign no limita el tamaño del archivo. Pero puede hacerlo configurando IIS/Apache. Obtenga más información en esta sección.

Transmisión

Consulte la documentación para obtener más información.

De forma predeterminada, todas las páginas dinámicas se retransmiten automáticamente al servidor Tomcat local del equipo cuyo módulo web se inicia. Puede elegir no retransmitir algunas. Si no utiliza algunos módulos de Adobe Campaign (como webapp, interacción, algunos jsp), puede eliminarlos de las reglas de transmisión.

De forma predeterminada, hemos forzado la capacidad de mostrar los recursos del usuario final mediante http (httpAllowed="true"). Como estas páginas pueden mostrar algunas PII (como contenido de correo electrónico, direcciones), canjear vales y ofertas, debe forzar el uso de HTTPS en estas rutas.

Si está utilizando nombres de host distintos (uno público y otro para los operadores), también puede evitar la transmisión de algunos recursos que necesitan los operadores por el nombre del DNS público.

Protección de la conexión saliente

La lista predeterminada de direcciones URL a las que se puede llamar mediante códigos JavaScript (flujos de trabajo, etc.) es limitada. Para permitir una nueva dirección URL, el administrador debe hacer referencia a ella en el archivo serverConf.xml.

Existen tres modos de protección de la conexión:

  • Bloqueo: Las direcciones URL que no pertenecen a la lista de permitidos están bloqueadas y muestran un mensaje de error. Es el modo predeterminado después de una posactualización.
  • Permisivo: Se permiten todas las direcciones URL que no pertenecen a la lista de permitidos.
  • Advertencia: Se permiten todas las URL que no estén en la lista de permitidos, pero el intérprete JS emite una advertencia para que el administrador pueda comprobarlas. Este modo añade mensajes de advertencia JST-310027.
<urlPermission action="warn" debugTrace="true">
  <url dnsSuffix="abc.company1.com" urlRegEx=".*" />
  <url dnsSuffix="def.partnerA_company1.com" urlRegEx=".*" />
  <url dnsSuffix="xyz.partnerB_company1.com" urlRegEx=".*" />
</urlPermission>

Los nuevos clientes utilizan el modo de bloqueo. Si desea permitir una nueva dirección URL, debe ponerse en contacto con el administrador para añadirla a la lista de permitidos.

Los clientes existentes que provengan de una migración pueden utilizar el modo de advertencia durante un rato. Mientras tanto, deben analizar el tráfico de salida antes de autorizar las URL.

Restricción de comandos (lado del servidor)

Varios comandos se añaden a la lista negra y no se pueden ejecutar con la función execCommand. Un usuario de Unix dedicado proporciona una seguridad extra para ejecutar comandos externos. En las instalaciones alojadas, esta restricción se aplica automáticamente. Para instalaciones locales, puede configurar manualmente esta restricción siguiendo la documentación específica. Además, las actividades de flujo de trabajo Script y Tarea externa no están disponibles (instancias recién instaladas).

Otras configuraciones

Puede añadir encabezados HTTP adicionales (para todas las páginas): consulte la documentación:

  • Puede añadir encabezados adicionales, como HSTS, X-FRAME-OPTIONS, CSP...
  • Debe probarlos en un entorno de prueba antes de aplicarlos a la producción. ADVERTENCIA: Adobe Campaign se puede desglosar añadiendo ciertos encabezados.

Adobe Campaign permite configurar una contraseña sin formato en el elemento <dbcnx .../>. No utilice esta función.

De forma predeterminada, Adobe Campaign no envía una sesión a una IP específica, pero puede activarla para evitar que le roben la sesión. Para hacerlo, en el archivo serverConf.xml, establezca el atributo checkIPConsistent como True en el nodo <authentication>.

De forma predeterminada, el MTA de Adobe Campaign no utiliza una conexión segura para enviar contenido al servidor SMTP. Debe activar esta función (puede reducir la velocidad de envío). Para ello, establezca enableTLS como True en el nodo <smtp ...>.

Puede reducir la duración de una sesión en el nodo de autenticación (atributo sessionTimeOutSec).

Configuración del servidor web

web

A continuación encontrará algunas de las principales prácticas recomendadas relacionadas con la configuración del servidor web Apache/IIS.


Modificación de las páginas de error predeterminadas.

Desactivación de las versiones y cifrados de SSL antiguos:

  • En Apache, edite /etc/apache2/mods-available/ssl.conf. Este es un ejemplo:
    • SSLProtocol all -SSLv2 -SSLv3 -TLSv1
    • SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
  • En IIS (consulte la documentación) y aplique la configuración siguiente:
    • Añada la subclave del registro en HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
    • Para permitir que el sistema utilice los protocolos que no se gestionan de forma predeterminada (como TLS 1.2), cambie los datos del valor DWORD del valor DisabledByDefault a 0x0 en las claves de registro siguientes en la clave Protocolos:

      SCHANNEL\Protocols\TLS 1.2\Client

      SCHANNEL\Protocols\TLS 1.2\Server

    • Desactivar SSL x.0:

      SCHANNEL\Protocols\SSL 3.0\Client: DisabledByDefault: DWORD (32-bit) Value to 1

      SCHANNEL\Protocols\SSL 3.0\Server: Enabled: DWORD (32-bit) Value to 0

Eliminación del método TRACE:

  • en Apache, elimine /etc/apache2/conf.d/security: TraceEnable 
  • En IIS (consulte la documentación), aplique la configuración siguiente:
    • Asegúrese de que está instalado el servicio de función o la función Filtrado de solicitudes.
    • En el panel de Filtros de solicitud, haga clic en la etiqueta verbos HTTP y, a continuación, haga clic en Denegar verbo. En el panel Acciones, escriba TRACE en el cuadro de diálogo abierto.

Elimine el titular:

  • En Apache, edite /etc/apache2/conf.d/security:
    • ServerSignature desactivado
    • ServerTokens Prod
  • En IIS (consulte la documentación), aplique la configuración siguiente:
    • Instale URLScan.
    • Edite el archivo Urlscan.ini para tener RemoveServerHeader=1

Limite el tamaño de la consulta para evitar que se carguen los archivos importantes:

  • En Apache (consulte la documentación), añada la directiva LimitRequestBody (tamaño en bytes) en el directorio /.

<Directory />
        Options FollowSymLinks
        AllowOverride None
        LimitRequestBody 10485760
</Directory>
  • En IIS, (consulte la documentación) establezca la propiedad maxAllowedContentLength (máxima longitud del contenido) en las opciones de filtrado de contenido.