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.
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.
Ö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
-
Gå till Resources > Campaign Management > Personalization blocks och skapa en ny.
-
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
-
Gå till egenskaperna för webbprogrammet och lägg till en boolesk variabel med namnet captchaValid.
-
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.
-
Redigera villkoret för grenen True med
"[vars/captchaValid]"
är lika med True. -
Redigera aktiviteten Script. Innehållet beror på den valda captcha-motorn.
-
Slutligen kan du lägga till ditt personliga block på sidan: se den här sidan.
<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"/>