Riktlinjer för skript och kodning scripting-coding-guidelines

Skript

Mer information finns i Kampanjens JSAPI-dokumentation.

Om du skriptar med arbetsflöde, webbprogram, jssp, ska du följa dessa rutiner:

  • Försök att undvika SQL-satser så mycket du kan.

  • Om du behöver det använder du parametriserade funktioner (förbered-sats) i stället för strängsammanfogning.

    Felaktig praxis:

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

    God praxis:

    code language-none
    sqlGetInt( "select iRecipientId from NmsRecipient where sEmail = $(sz) limit 1", request.getParameter('email'));
    
    note important
    IMPORTANT
    sqlSelect stöder inte den här funktionen, så du måste använda frågefunktionen i klassen DBEngine:
    code language-none
    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()
    

För att undvika SQL-injektioner måste SQL-funktioner läggas till i tillåtelselista som ska användas i Adobe Campaign. När de har lagts till i tillåtelselista blir de synliga för dina operatorer i uttrycksredigeraren. Se den här sidan.

IMPORTANT
Om du använder en version som är äldre än 8140 kan alternativet XtkPassUnknownSQLFunactionsToRDBMS anges till 1. Om du vill skydda databasen tar du bort det här alternativet (eller anger värdet 0).

Om du använder användarindata för att skapa filter i frågor eller SQL-satser, måste du alltid undvika dem (se Kampanjens JSAPI-dokumentation - Dataskydd: funktioner som kan kringgås). De här funktionerna är:

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

Skydda din nya datamodell

Mappbas

Se följande sidor:

Namngivna rättigheter

Förutom den mappbaserade säkerhetsmodellen kan du använda namngivna rättigheter för att begränsa operatoråtgärder:

  • Du kan lägga till systemfilter (sysFilter) för att förhindra att data läses/skrivs (se den här sidan).

    code language-none
    <sysFilter name="writeAccess">
        <condition enabledIf="hasNamedRight('myNewRole')=false" expr="FALSE"/>
    </sysFilter>
    
  • Du kan också skydda vissa åtgärder (SOAP metod) som definieras i scheman. Ange bara åtkomstattributet med motsvarande namngiven rättighet som värde.

    code language-none
    <method name="grantVIPAccess" access="myNewRole">
        <parameters>
    ...
        </parameters>
    </method>
    

    Mer information finns på den här sidan.

IMPORTANT
Du kan använda namngivna rättigheter i kommandonoden i ett navigeringsträd. Det ger en bättre användarupplevelse men ger inget skydd (använd bara klientsidan för att dölja/inaktivera dem). Du måste använda åtkomstattributet.

Överflödestabell

Om du behöver skydda konfidentiella data (del av ett schema) beroende på operatörens åtkomstnivå, ska du inte dölja dem i formulärdefinitionen (enabledIf/visibleIf-villkor).

Den fullständiga enheten läses in av skärmen och du kan även visa dem i kolumndefinitionen. För att göra detta måste du skapa en flödestabell. Se den här sidan.

Lägga till bildtexter i webbprogram

Det är en god vana att lägga till en captcha på offentliga landningssidor/prenumerationssidor. Tyvärr är det inte så enkelt att lägga till en captcha på DCE-sidor (Digital Content Editor). Vi visar hur du lägger till en v5-captcha eller en Google reCAPTCHA.

Det allmänna sättet att lägga till en captcha i DCE är att skapa ett personaliseringsblock som enkelt kan inkluderas i sidinnehållet. Du måste lägga till en Script-aktivitet och en Test.

Personalization block

  1. Gå till Resources > Campaign Management > Personalization blocks och skapa en ny.

  2. Använd innehållstypen Web application och kontrollera Visible in the customization menus.

    För mer information om detta hittar du i det här avsnittet.

    Här är ett exempel på en kampanjbeskrivning:

    code language-javascript
    <%
    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>
    <%
    }
    %>
    
    • Rader 1 till 6 genererar alla indata som behövs.

    • Rader 7 till slutet hanterar fel.

    • Med rad 4 kan du ändra storleken på den inmatade gråa rutan (bredd/höjd) och längden på det genererade ordet (minWordSize/maxWordSize).

    • Innan du använder Google reCAPTCHA måste du registrera dig på Google och skapa en ny reCAPTCHA-webbplats.

      <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>

    Du bör kunna inaktivera valideringsknappen, men eftersom vi inte har någon standardknapp/länk är det bättre att göra det i själva HTML. Mer information finns på den här sidan.

Uppdatera ditt webbprogram

  1. Gå till egenskaperna för webbprogrammet och lägg till en boolesk variabel med namnet captchaValid.

  2. Lägg till Script och Test mellan den sista sidan och aktiviteten Storage.

    Koppla grenen True till Storage och den andra till sidan som ska ha captcha.

  3. Redigera villkoret för grenen True med "[vars/captchaValid]" är lika med True.

  4. Redigera aktiviteten Script. Innehållet beror på den valda captcha-motorn.

  5. Slutligen kan du lägga till ditt personliga block på sidan: se den här sidan.

IMPORTANT
För reCAPTCHA-integrering måste du lägga till JavaScript på klientsidan i HTML (i <head>...</head>):
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Campaign captcha

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

Rad 6: du kan skicka vilket felmeddelande som helst.

Google recaptcha

Se den officiella dokumentationen.

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")
}

Om du vill använda JSON.parse måste du inkludera"shared/json2.js" i din webApp:

Sedan build 8797 måste du lägga till den i tillåtelselista i filen serverConf för att kunna använda URL:en för verifierings-API:t genom att lägga till den i noden urlPermission:

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

recommendation-more-help
601d79c3-e613-4db3-889a-ae959cd9e3e1