Este artigo apresenta os principais elementos que devem ser verificados em relação à segurança e privacidade.
Privacy

Configuração e proteção de privacidade

Clique aqui


icon_clef

Gerenciamento de acesso

Clique aqui


Server

Configuração do servidor

Clique aqui


Development

Diretrizes de script e codificação

Clique aqui


Network

Rede, banco de dados e SSL/TLS

Clique aqui


Web

Configuração do servidor da Web

Clique aqui


Privacidade

Privacy

Configuração e proteção da privacidade são elementos-chave da otimização da segurança. Leia esta seção para saber mais sobre as práticas recomendadas de privacidade:

  • Proteja seu PII de cliente utilizando HTTPS ao invés de HTTP
  • Use a restrição de visualização de informações de identificação pessoal (PII) para garantir a privacidade e impedir que os dados sejam utilizados indevidamente.
  • Certifique-se de que as senhas criptografadas sejam restritas
  • Proteja as páginas que podem conter informações pessoais, como mirror pages, aplicativos web, etc.

Solicitações de Privacidade

O Adobe Campaign oferece um conjunto de ferramentas para ajudá-lo a cumprir as regras de privacidade para GDPR e CCPA.

Consulte esta página para informações gerais sobre o que é a Gestão de privacidade e os passos para sua implementação no Adobe Campaign. Além disso, você encontrará as práticas recomendadas e uma visão geral do processo de usuários e personas.  

Personalização de URL

Quando adicionar links personalizados ao seu conteúdo, evite sempre personalização na parte do hostname do URL para evitar possíveis falhas de segurança. Os exemplos a seguir nunca devem ser usados em todos os atributos de URL <a href=""> ou <img src="">:

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

Recomendações

Para validar e garantir que você não está usando acima, execute uma query na tabela de rastreamento de URL através do Campaign Generic Query Editor ou crie um fluxo de trabalho com critérios de filtragem na atividade de query.

Exemplo:

  1. Crie um fluxo de trabalho e adicione uma atividade de Query. Saiba mais.
  2. Abra a atividade do Query e crie um filtro na tabela nmsTrackingUrl como segue: URL de origem inicia com http://<%ou URL de origem inicia com https://<%.
  3. Execute o fluxo de trabalho e verifique se há resultado.
  4. Em caso positivo, abra a transição de saída para a visualização da lista de URLs.
Query em URLs dinâmicos

Mecanismo de assinatura

Para melhorar a segurança, um novo mecanismo de assinatura para rastrear links em emails foi introduzido na Build 19.1.4 (9032@3a9dc9c) e está disponível na Build 19.1.4 (9032@3a9dc9c) e no Campaign 20.2. Esta opção é ativada por padrão para todos os clientes.

Observação:

Quando um URL assinado mal formado é clicado, ele retornará o seguinte erro: "O URL solicitado '... ' não foi encontrado."

Além disso, clientes hospedados e híbridos na Build 19.1.4 (9032@3a9dc9c e 9032@800be2e) e no Campaign 20.2 podem usar um aprimoramento para desativar URLs gerados em builds anteriores. Essa opção está desativada por padrão. Você pode contatar o Atendimento ao cliente para ativar esse recurso.

Para ativar esse novo recurso, os clientes locais precisam seguir estas etapas em todos os servidores do Campaign:

  1. No arquivo de configuração do servidor (serverConf.xml), altere blockRedirectForUnsignedTrackingLink para true.
  2. Reinicie o serviço nlserver.
  3. No servidor de rastreamento, reinicie o servidor da Web (apache2 em Debian; httpd em CentOS/RedHat; IIS no Windows).

Cuidado:

Os clientes que estiverem executando a Build 19.1.4 (9032@3a9dc9c) podem enfrentar problemas com delivery de notificação por push usando o link de rastreamento ou com delivery usando tags âncora. Caso isso ocorra, a Adobe recomenda desativar o novo mecanismo de assinatura para links de rastreamento.

Os clientes hospedados e híbridos devem entrar em contato com o Atendimento ao cliente para desativar esse mecanismo.

Os clientes locais podem seguir a etapa abaixo:

  1. No arquivo de configuração do servidor (serverConf.xml), altere signEmailLinks para false.
  2. Reinicie o serviço nlserver.
  3. No servidor de rastreamento, reinicie o servidor da Web (apache2 em Debian; httpd em CentOS/RedHat; IIS no Windows).

Restrição de dados

Você precisa ter certeza que as senhas criptografadas não estarão acessíveis a um usuário autenticado de baixo privilégio. Para fazer isso, existem duas maneiras principais: restringir o acesso apenas aos campos de senha ou à entidade inteira (é necessário um build> = 8770).

Esta restrição permite que você remova os campos de senhas, mas deixe a conta externa acessível a partir da interface para todos os usuários. Consulte a documentação.

  1. Vá em Administração > Configuração > Esquemas de dados.

  2. Crie uma nova Extensão de um esquema.

    Senha
  3. Escolha Conta Externa (extAccount).

  4. Na última tela do assistente, você pode editar seu novo srcSchema para restringir o acesso a todos os campos de senha:

    Você pode substituir o elemento principal (<element name="extAccount" ... >) por:

    <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>

    Então, seu srcSchema estendido pode se parecer com:

    <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>

    Observação:

    Você pode substituir $(loginId) = 0 or $(login) = 'admin' por hasNamedRight('admin') para permitir que todos os usuários administradores vejam essas senhas.

Proteção de páginas contendo PII

Recomendamos enfaticamente que os clientes locais protejam as páginas que podem conter informações pessoais, como mirror pages, aplicativos web, etc.

O objetivo desse procedimento é impedir que essas páginas sejam indexadas, evitando assim um possível risco à segurança. Aqui estão alguns artigos úteis:

Para proteger suas páginas, siga estas etapas:

  1. Adicione um arquivo robots.txt na raiz do seu servidor da web (Apache ou IIS). Aqui está o conteúdo do arquivo:

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

    Para IIS, consulte esta página.

    Para o Apache, você pode colocar o arquivo em /var/www/robots.txt (Debian).

  2. Às vezes, adicionar um arquivo robots.txt não é suficiente em termos de segurança. Por exemplo, se outro website contiver um link para a sua página, ele poderá aparecer em um resultado de pesquisa.

    Além do arquivo robots.txt , aconselha-se adicionar um cabeçalho X-Robots-Tag. Você pode fazer isso no Apache ou IIS e no arquivo de configuração serverConf.xml.

    Para obter mais informações, consulte este artigo.

Gerenciamento de acesso

Access

O gerenciamento de acesso é uma parte importante do fortalecimento da segurança. Aqui estão algumas das principais práticas recomendadas:

  • Crie grupos de segurança suficientes
  • Verifique se cada operador possui os direitos de acesso apropriados
  • Evite usar o operador administrador e evite ter muitos operadores no grupo de administradores

Consulte a documentação: Direitos de acesso e Propriedades de acesso à pasta.


Operador Webapp

Pronto para uso, o operador webApp é um administrador. Para melhorar a segurança, siga estas diretrizes:

  • Substitua o administrador nomeado diretamente deste operador por um novo (pode ser nomeado 'webapp'). Para obter mais informações, consulte esta documentação.
  • Adicione o operador webApp em pastas (principalmente pastas de destinatários) para conceder acesso a destinatários para ler/escrever. Para saber mais, consulte esta documentação.
  • Se estiver usando uma instância multimarca (ou multi-geo), convém dividir o acesso a aplicativos web a diferentes pastas de destinatários: Para fazer isso:
    1. Duplicar o operador webApp
    2. Digite um nome para cada duplicação. Por exemplo: webapp_brand, webapp_brand2, etc.
    3. Duplique um modelo de aplicativo da web para ter um modelo por marca e edite as propriedades para alterar o operador selecionando Usar uma conta específica.  Saiba mais nesta documentação.

Grupos de segurança e operadores administrativos

Crie grupos de segurança suficientes para dar direitos suficientes aos seus operadores para que eles façam o que precisam (e não além).

Não use o operador administrador (ou não o compartilhe). Crie um operador por usuário físico (para ter uma auditoria/registro em log preciso). Adicione seus administradores recém-nomeados ao grupo de administradores. Se você não usar o operador administrador, não o exclua e não o desabilite (esse operador é usado internamente para executar o processamento). Mas você pode proibir seu acesso ao console do cliente e restringir sua zona de segurança (ao host local).

Evite adicionar muitos operadores no grupo de administradores (ou com direitos nomeados de administrador). Eles são operadores muito avançados (podem executar todas as instruções SQL, executar comandos no servidor, etc.).

O Adobe Campaign fornece três privilégios de alto nível através de Direitos nomeados:

  • ADMINISTRAÇÃO (admin): dá acesso a tudo e permite fazer tudo (ignora todas as checagens corretas nomeadas), portanto inclui a EXECUÇÃO DO PROGRAMA (createProcess) e os Direitos nomeados SQL
  • EXECUÇÃO DO PROGRAMA (createProcess): permite executar programas externos (no servidor)
  • SQL: permite executar scripts SQL no banco de dados (para que possa ignorar o modelo de segurança). Observação: se você precisar fazer processos complexos (filtragem, por exemplo), peça para o seu administrador de banco de dados criar uma função SQL e colocá-la na lista de permissões. Saiba mais nesta seção.
  • Conceda-os a muito poucos (e confiáveis) operadores

Diretrizes de script e codificação

Dev

Ao desenvolver no Adobe Campaign (workflows, Javascript, ISSP, etc.), siga sempre estas diretrizes:

  • Scripting: tente evitar instruções SQL. Use funções parametrizadas em vez de concatenação de strings e evite a injeção de SQL colocando as funções SQL a serem utilizadas na lista de permissões.
  • Proteção do modelo de dados: use direitos nomeados para limitar as ações do operador, adicione filtros do sistema (sysFilter)
  • Adição de captchas em aplicativos da Web: aprenda como adicionar captchas em suas páginas de aterrissagem e páginas de assinatura públicas.

Criação de scripts

Para obter mais informações, consulte a documentação do Campaign JSAPI.

Se você criar scripts usando fluxo de trabalho, aplicações web, jssp, siga estas práticas recomendadas:

  • Tente evitar o uso de instruções SQL o máximo que puder.
  • Se você precisar, use funções parametrizadas (instrução de preparação) em vez de concatenação de strings.

Prática não recomendada:

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

Prática recomendada:

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

Atenção: sqlSelect não tem suporte para esse recurso e, portanto, você tem que usar a função de query da classe 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 injeções de SQL, as funções SQL devem ser adicionadas à lista de permissões para serem usadas no Adobe Campaign. Uma vez adicionadas à lista de permissões, elas se tornarão visíveis aos seus operadores no editor de expressões. Consulte a documentaçãoAviso: se você estiver usando uma compilação anterior a 8140, a opção XtkPassUnknownSQLFunctionsToRDBMS poderá ser definida como '1'. Se você quiser proteger seu banco de dados, exclua essa opção (ou defina-a como '0').

Se você estiver usando a entrada do usuário para construir filtros em queries ou instruções SQL, sempre será necessário escapá-los (consulte a documentação do Campaign JSAPI - Proteção de dados: funções de escape). Essas funções são:

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

Como proteger seu novo modelo de dados

Pasta baseada

Consulte estas seções da documentação do produto:

Direitos nomeados

Além do modelo de segurança baseado em pastas, você pode usar direitos nomeados para limitar as ações do operador:

  • Você pode adicionar alguns filtros de sistema (sysFilter) para impedir a leitura/gravação de seus dados. Veja a documentação.
<sysFilter name="writeAccess">     
    <condition enabledIf="hasNamedRight('myNewRole')=false" expr="FALSE"/>   
</sysFilter>
  • Você também pode proteger algumas ações (método SOAP) definidas em esquemas. Basta definir o atributo de acesso com o direito nomeado correspondente como o valor.
<method name="grantVIPAccess" access="myNewRole">
      <parameters>
...
      </parameters>
    </method>

         

Para saber mais, consulte esta seção.

Cuidado:

Você pode usar direitos nomeados no nó de comando em uma navtree. Proporciona uma melhor experiência ao usuário, mas não fornece nenhuma proteção (use apenas o lado do cliente para ocultá-los/desativá-los). Você tem que usar o atributo de acesso.

Tabela de sobreposição

Se você precisar proteger dados confidenciais (parte de um esquema), dependendo do nível de acesso do operador, não os oculte na definição do formulário (condições enabledIf/visibleIf). A entidade completa é carregada pela tela, mas você também pode exibi-las na definição da coluna. Para fazer isso, você precisa criar uma tabela de sobreposição. Consulte esta documentação.

Adicionar captchas em aplicações web

É uma boa prática adicionar um captcha em páginas de páginas/assinaturas públicas. Infelizmente, adicionar um captcha nas páginas do DCE (Digital Content Editor) não é fácil. Mostraremos como adicionar um captcha v5 ou um reCAPTCHA do Google.

A maneira geral de adicionar um captcha no DCE é criar um bloco de personalização para incluí-lo facilmente no conteúdo da página. Você terá que adicionar uma atividade de Script e um Teste.

Blocos de personalização

  1. Acesse Recursos > Gerenciamento do Campaign > Blocos de personalização e crie um novo.

  2. Use o conteúdo do aplicativo da web e marque Visível nos menus de personalização.

    Para obter mais informações, consulte esta documentação.

    Veja um exemplo de um captcha do 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>
    <%
    }
    %>
    • As linhas de 1 a 6 geram todas as entradas necessárias.
    • As linhas 7 e sucessivas tratam dos erros.
    • A linha 4 permite que você altere o tamanho da caixa cinza captcha (largura/altura) e o comprimento da palavra gerada (minWordSize/maxWordSize).
    • Antes de usar o Google reCAPTCHA, você deve se registrar no Google e criar um novo site reCAPTCHA.
    <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>

    Você deve ser capaz de desativar o botão de validação, mas como não temos nenhum botão/link padrão, é melhor fazê-lo no próprio HTML. Para aprender a fazê-lo, consulte esta página.

Atualização da sua aplicação web

  1. Acesse as propriedades da sua aplicação web para incluir uma variável booleana denominada captchaValid.

    captcha
  2. Entre a última página e a atividade de Armazenamento, adicione um Script e um Teste. Conecte o ramo True ao Armazenamento e o outro à página que terá o captcha.

    Captcha - passo 2
  3. Edite a condição da ramificação True com "[vars / captchaValid]" igual a True.

    Captcha - passo 3
  4. Em seguida, edite a atividade do Script. O conteúdo dependerá do mecanismo captcha escolhido. 

  5. Finalmente, você pode adicionar seu bloco personalizado à página: consulte a documentação

    Captcha - passo 5
    Captcha - passo 6

    AVISO: para a integração do reCAPTCHA, você precisa adicionar JavaScript do lado do cliente no HTML (em <head>...</head> ):

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

Captcha do 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

Linha 6: você pode colocar qualquer tipo de mensagem de erro.

Google reCAPTCHA

Por favor, consulte a documentação oficial.

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 usar JSON.parse você precisa incluir "shared / json2.js" no seu webApp:

Captcha - passo 7

A partir da build 8797, para usar o URL da API de verificação, você deve adicioná-lo à lista de permissões no arquivo serverConf adicionando no nó urlPermission:

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

Rede, banco de dados e SSL/TLS

Network

Uma coisa muito importante a se verificar ao implantar um tipo de arquitetura local é a configuração de rede. Certifique-se de que o servidor Tomcat NÃO está diretamente acessível fora do servidor:

  • Feche a porta do Tomcat (8080) em IPs externos (deve funcionar no host local)
  • Não mapeie a porta HTTP padrão (80) para a do Tomcat (8080)

Quando possível, use um canal seguro: POP3S em vez de POP3 (ou POP3 sobre TLS).


Banco de dados

É indispensável que a segurança do mecanismo de banco de dados seja seguida.

Configuração SSL/TLS

Para a verificação do certificado, é possível usar o openssl. Para verificação das cifras ativas, é possível usar o 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}

Também é possível usar um python script sslyze que faz as duas coisas.

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

Configuração do servidor

Server

A configuração deve ser executada em todos os servidores. Os arquivos de configuração são do tipo serverConf.xml e config-<instance>.xml. Aqui estão os principais elementos que precisam ser verificados:

  • Zonas de segurança: Configure as zonas de segurança para que elas considerem diretamente os endereços IP dos clientes de um proxy.
  • Proteção de upload de arquivo: limite os tipos de arquivos que podem ser enviados ao servidor do Adobe Campaign usando um novo atributo uploadWhiteList. Isso pode ser usado no arquivo de configuração do servidor.
  • Retransmissão: ajuste a configuração de retransmissão desativando as regras de retransmissão para módulos/aplicações não utilizados.
  • Proteção de conexão de saída e Restrição de comando (lado do servidor)
  • Você também pode adicionar cabeçalhos HTTP extras, ativar checkIPConsistent, enableTLS, sessionTimeOutSec, etc.

Consulte a Documentação de configuração do servidor de campanha e a Descrição do arquivo de configuração do servidor para mais informações.


Configuração de zonas de segurança

Cuidado:

A partir da build 8977, a Interface do Usuário de autoatendimento das zonas de segurança não está mais disponível.

  • Se você estiver hospedado no AWS, a adição de IP à lista de permissões deve ser feita através do Painel de controle do Campaign. Para mais informações, consulte esta documentação.
  • Se você não estiver hospedado no AWS, entre em contato com a equipe de suporte da Adobe para adicionar IPs à lista de permissões.

 Para verificar se sua instância está hospedada no AWS, siga as etapas detalhadas nessa seção.

Para aprender a usar a Interface de usuário de Autoatendimento de Zonas de Segurança para gerenciar entradas na configuração da Zona de Segurança de VPN, consulte esta nota técnica.

Certifique-se de que seu proxy reverso não seja permitido na sub-rede. Se for o caso, todo o tráfego será detectado como proveniente deste IP local, então será confiável.

Minimize o uso de sessionTokenOnly="true":

  • Aviso: se este atributo for definido como true, o operador pode ser exposto a um ataque CRSF.
  • Além disso, o cookie sessionToken não é definido com um sinalizador httpOnly, portanto, algum código javascript do lado do cliente pode lê-lo.
  • No entanto, o Centro de Mensagens em várias células de execução precisa de sessionTokenOnly: crie uma nova zona de segurança com sessionTokenOnly definido como "true" e inclua apenas os IPs necessários nessa zona.

Quando possível, defina todos allowHTTP, showErrors como false (não para localhost) e confira-os!

  • allowHTTP = "false": força operadores a usar HTTPS
  • showErrors = "false": oculta erros técnicos (incluindo os SQL). Ele evita exibir muita informação, mas reduz a capacidade do profissional de marketing resolver erros (sem solicitar mais informações de um administrador)

Defina allowDebug como true somente nos IPs usados pelos usuários/administradores de marketing que precisam criar pesquisas (em pré-visualização, na verdade), aplicativos da Web e relatórios. Esse sinalizador permite que esses IPs obtenham regras de retransmissão exibidas e os executa.

Nunca defina allowEmptyPassword, allowUserPassword, allowSQLInjection como true. Estes atributos estão aqui apenas para permitir uma fácil migração das versões 5 e 6.0:

  • allowEmptyPassword permite que os operadores tenham uma senha vazia. Se este for o seu caso, notifique todos os seus operadores para eles definirem uma senha com um prazo. Após passar esse prazo, mude este atributo para false.
  • allowUserPassword permite que os operadores enviem suas credenciais como parâmetros (para que eles sejam registrados por apache/IIS /proxy). Esse recurso foi usado anteriormente para simplificar o uso da API. Você pode verificar em seu guia (ou na especificação) se alguns aplicativos de terceiros usam isso. Nesse caso, você deve notificá-los para alterar a maneira como eles usam nossa API e, assim que possível, remover esse recurso.
  • allowSQLInjection permite que o usuário realize injeções de SQL usando uma sintaxe antiga. Assim que possível, execute as correções descritas na documentação para poder definir este atributo como false.

É possível usar /nl/jsp/ping.jsp?zones=true para verificar a configuração de sua zona de segurança. Esta página exibe o status ativo de medidas de segurança (calculadas com esses sinalizadores de segurança) para o IP atual.

HttpOnly cookie/useSecurityToken: se refere ao sinalizador sessionTokenOnly.

Minimizar IPs adicionados à lista de permissões: adicionamos os 3 intervalos para redes privadas em zonas de segurança, de modo rápido e prático. É improvável usar todos esses endereços IP. Portanto, mantenha apenas os necessários.

Atualize o operador interno/aplicação Web para estar acessível apenas no localhost.

Proteção de upload de arquivos

Verifique com os usuários operacionais que tipo de arquivos eles enviam ao servidor usando a interface nlclient/web. Como lembrete, as necessidades comerciais podem ser:

  • imagens (jpg, gif, png...)
  • conteúdo (zip, html, css...)
  • ativos de marketing (doc, xls, pdf, psd, tiff...)
  • anexo de email (doc, pdf...)
  • ETL (txt, csv, tab...)
  • etc.

Adicione todos eles em serverConf/shared/datastore/@uploadAllowlist (expressão Java regular válida). Saiba mais na documentação relacionada.

O Adobe Campaign não restringe o tamanho do arquivo. Mas você pode fazê-lo configurando o IIS/Apache. Saiba mais nesta seção.

Retransmissão

Consulte a documentação para mais informações.

Por padrão, todas as páginas dinâmicas são automaticamente retransmitidas para o servidor Tomcat local da máquina cujo módulo da Web foi iniciado. É possível optar por não retransmitir alguns deles. Se alguns módulos do Adobe Campaign não estiverem sendo usados (como aplicação Web, interação, algum jsp), podem ser removidos das regras de retransmissão.

Pronto para uso, forçamos a capacidade de exibir recursos do usuário final usando http (httpAllowed="true"). Como estas páginas podem mostrar algum PII (como conteúdo de email, endereço), cupons de resgate, ofertas, você deverá forçar novamente o HTTPS nesses caminhos.

Se estiver usando nomes de host diferentes (um público e outro para operadores), também poderá impedir a retransmissão de alguns recursos necessários pelos operadores sobre o nome DNS público.

Proteção de conexão de saída

A lista padrão de URLs que podem ser chamadas por códigos JavaScript (workflows, etc.) é limitada. Para permitir uma nova URL, o administrador precisa referenciá-la no arquivo serverConf.xml.

Existem três modos de proteção de conexão:

  • Bloqueio : todos os URLs fora da lista de permissão são bloqueados com uma mensagem de erro. Este é o modo padrão depois de um pós-upgrade.
  • Permissivo : todos os URLs fora da lista de permissão são permitidos.
  • Aviso : todos os URLs fora da lista de permissões são permitidos, mas o interpretador JS emite um aviso para que o administrador possa coletá-los. Este modo adiciona mensagens de aviso 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>

Novos clientes usarão o modo de bloqueio. Se eles quiserem permitir um novo URL, precisam contatar o administrador para incluí-lo na lista de permissões.

Os clientes existentes provenientes de uma migração podem usar o modo de aviso por algum tempo. Enquanto isso, eles precisam analisar o tráfego de saída antes de autorizar as URLs.

Restrição de comandos (lado do servidor)

Vários comandos estão incluídos na lista negra e não podem ser executados usando a função execCommand. Uma segurança extra é fornecida por um usuário Unix dedicado para executar comandos externos. Para instalações hospedadas, essa restrição é aplicada automaticamente. Para instalações locais, é necessário configurar manualmente essa restrição seguindo a documentação dedicada. Além disso, as atividades de fluxo de trabalho de Script e Tarefa externa não estão disponíveis (instâncias recém-instaladas).

Outras configurações

Você pode adicionar cabeçalhos HTTP extras (para todas as páginas): consulte a documentação:

  • Você pode adicionar alguns cabeçalhos adicionais, como HSTS, X-FRAME-OPTIONS, CSP...
  • Você precisa testá-los em um ambiente de teste antes de aplicá-los na produção. AVISO: O Adobe Campaign pode ser interrompido adicionando determinados cabeçalhos.

O Adobe Campaign permite definir uma senha simples no elemento <dbcnx .../>. Não use este recurso.

Por padrão, o Adobe Campaign não coloca uma sessão em um IP específico, mas você pode ativá-lo para impedir que a sessão seja roubada. Para fazer isso, defina no arquivo serverConf.xml o atributo checkIPConsistent como true no nó <authentication>.

Por padrão, o MTA do Adobe Campaign não usa uma conexão segura para enviar conteúdo ao servidor SMTP. Esse recurso deve ser habilitado (pode reduzir a velocidade de entrega). Para fazer isso, defina enableTLS como true no nó <smtp ...>.

Você pode reduzir a vida útil de uma sessão no nó de autenticação (atributo sessionTimeOutSec).

Configuração do servidor da web

web

Abaixo, você encontrará algumas das principais práticas recomendadas relacionadas à configuração do servidor web Apache / IIS).


Altere as páginas de erro padrão.

Desativar a versão e as cifras antigas do SSL:

  • no Apache, edite o /etc/apache2/mods-available/ssl.conf. Aqui está um exemplo:
    • SSLProtocol all -SSLv2 -SSLv3 -TLSv1
    • SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SSLv3:!SSLv2:!TLSv1
  • no IIS (consulte a documentação), execute a seguinte configuração:
    • Adicionar subchave de registro em HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL
    • Para habilitar o sistema a usar os protocolos que não serão negociados por padrão (como o TLS 1.2), altere os dados do valor DWORD do valor DisabledByDefault para 0x0 nas seguintes chaves do Registro na chave Protocolos:

      SCHANNEL\Protocols\TLS 1.2\Client

      SCHANNEL\Protocols\TLS 1.2\Server

    • Desativar SSL x.0:

      SCHANNEL\Protocols\SSL 3.0\Client: DisabledByDefault: DWORD (32-bit) Valor para 1

      SCHANNEL\Protocols\SSL 3.0\Server: Enabled: DWORD (32-bit) Valor para 0

Remova o método TRACE:

  • no Apache, edite em /etc/apache2/conf.d/security: TraceEnable Off
  • no IIS (consulte a documentação), execute a seguinte configuração:
    • Certifique-se de que o serviço ou recurso de função Filtragem de Solicitação esteja instalado.
    • No painel Filtragem de solicitação, clique na guia verbos de HTTP e depois clique em Negar verbo. No painel Ações insira TRACE na caixa de diálogo aberta.

Remova o banner:

  • no Apache, edite em /etc/apache2/conf.d/security:
    • ServerSignature Off
    • ServerTokens Prod
  • no IIS (consulte a documentação), execute a seguinte configuração:
    • Instale o URLScan.
    • Edite o arquivo Urlscan.ini para ter RemoveServerHeader=1

Limite o tamanho da query para evitar que arquivos importantes sejam enviados:

  • No Apache (consulte a documentação), adicione a diretiva LimitRequestBody (tamanho em bytes) no / diretório.

<Directory />
        Options FollowSymLinks
        AllowOverride None
        LimitRequestBody 10485760
</Directory>
  • No ISS (consulte a documentação), configure maxAllowedContentLength (comprimento máximo permitido do conteúdo) nas opções de filtragem de conteúdo.