Para obter mais detalhes, consulte Documentação JSAPI do Campaign.
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 possível.
Se precisar, use funções parametrizadas (instrução de preparação) em vez de concatenação de strings.
Prática incorreta:
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'));
sqlSelect não suporta este recurso, portanto, é necessário usar a função de consulta 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 à de lista de permissões a ser usada no Adobe Campaign. Uma vez adicionados à lista de permissões, eles se tornarão visíveis para seus operadores no editor de expressão. Consulte esta página.
Se você estiver usando uma build anterior a 8140, a variável XtkPassUnknownSQLFunctionsToRDBMS pode ser definida como '1'. Se quiser proteger seu banco de dados, exclua essa opção (ou defina-a como '0').
Se estiver usando a entrada do usuário para criar filtros em queries ou instruções SQL, sempre será necessário escapá-los (consulte Documentação JSAPI do Campaign - Proteção de dados: funções de escape). Essas funções são:
Consulte estas páginas:
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 do sistema (sysFilter) para impedir a leitura/gravação de seus dados (consulte esta página).
<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 obter mais informações, consulte esta página.
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ê precisa usar o atributo de acesso.
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 página.
É 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. Será necessário adicionar um Script e uma Teste.
Ir para Resources > Campaign Management > Personalization blocks e criar um novo.
Use o Web application tipo de conteúdo e verificação Visible in the customization menus.
Para obter mais informações, consulte esta página.
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 alterar 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.
Acesse as propriedades da sua aplicação web para adicionar uma variável booleana chamada captchaValid.
Entre a última página e a Storage atividade , adicione uma Script e Test.
Conecte a ramificação True para Storage e o outro na página que terá o captcha.
Edite a condição da ramificação Verdadeiro com "[vars/captchaValid]"
é igual a Verdadeiro.
Editar a atividade Script. O conteúdo dependerá do mecanismo captcha escolhido.
Finalmente, você pode adicionar seu bloco personalizado à página: consulte esta página.
Para a integração do reCAPTCHA, é necessário adicionar JavaScript do lado do cliente no HTML (em <head>...</head>
):
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
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.
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ê deve incluir "shared/json2.js" no seu aplicativo web:
Desde a build 8797, para usar o URL da API de verificação, é necessário 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"/>