Richtlinien für Skripterstellung und Codierung

Scripts

Weiterführende Informationen finden Sie in der JSAPI-Dokumentation für Campaign.

Wenn Sie Scripts mit Workflows, Webanwendungen und JSSP verwenden, folgen Sie diesen Best Practices:

  • Vermeiden Sie möglichst SQL-Anweisungen.

  • Verwenden Sie bei Bedarf parametrierte Funktionen (prepare-Anweisung) anstelle von String-Konkatenation.

    Schlechte Praxis:

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

    Gute Praxis:

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

    sqlSelect unterstützt diese Funktion nicht, daher müssen Sie die Abfragefunktion der DBEngine-Klasse verwenden:

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

Um SQL-Injections zu vermeiden, müssen SQL-Funktionen auf die Zulassungsliste gesetzt werden, damit sie in Adobe Campaign verwendet werden können. Sobald sie auf der Zulassungsliste stehen, werden sie für Ihre Benutzer im Ausdruckseditor sichtbar. Mehr dazu erfahren Sie auf dieser Seite.

WICHTIG

Wenn Sie einen älteren Build als 8140 verwenden, kann die Option XtkPassUnknownSQLFunctionsToRDBMS auf "1"gesetzt sein. Wenn Sie Ihre Datenbank sichern möchten, löschen Sie diese Option (oder legen Sie sie auf "0"fest).

Wenn Sie Benutzereingaben zur Erstellung von Filtern in Abfragen oder SQL-Anweisungen verwenden, müssen Sie sie immer escapen (siehe die JSAPI-Dokumentation für Campaign - Schutz von Daten: Escape-Funktionen). Diese Funktionen sind:

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

Schutz Ihres neuen Datenmodells

Ordnerbasis

Weitere Informationen finden Sie auf diesen Seiten:

Spezifische Berechtigungen

Zusätzlich zum ordnerbasierten Sicherheitsmodell können Sie Benutzeraktionen auch mit spezifischen Berechtigungen einschränken:

  • Sie können einige Systemfilter (sysFilter) hinzufügen, um das Lesen/Schreiben Ihrer Daten zu verhindern (siehe diese Seite).

    <sysFilter name="writeAccess">    
        <condition enabledIf="hasNamedRight('myNewRole')=false" expr="FALSE"/>  
    </sysFilter>
    
  • Sie können auch einige in Schemas definierte Aktionen (SOAP-Methode) schützen. Legen Sie einfach das Zugriffsattribut mit der entsprechenden benannten Berechtigung als Wert fest.

    <method name="grantVIPAccess" access="myNewRole">
        <parameters>
    ...
        </parameters>
    </method>
    

    Weitere Informationen hierzu finden Sie auf dieser Seite.

WICHTIG

Sie können spezifische Berechtigungen im Befehlsknoten in einem Navigationsbaum verwenden. Es bietet ein besseres Benutzererlebnis, bietet jedoch keinen Schutz (nur clientseitig verwenden, um sie auszublenden/zu deaktivieren). Sie müssen das Zugriffsattribut verwenden.

Überlauftabelle

Wenn Sie vertrauliche Daten (Teil eines Schemas) je nach Zugriffsebene des Benutzers schützen müssen, sollten Sie sie nicht in der Formulardefinition ausblenden (Bedingungen enabledIf/visibleIf ).

Die gesamte Entität wird vom Bildschirm geladen. Sie können sie auch in der Spaltendefinition anzeigen. Erstellen Sie hierzu eine Überlauftabelle. Weitere Informationen finden Sie auf dieser Seite.

Hinzufügen von Captchas in Webanwendungen

Es ist empfehlenswert, öffentlichen Landingpages und Anmeldeseiten ein Captcha hinzuzufügen. Leider ist dies in DCE-Seiten (Digital Content Editor) nicht einfach. Wir zeigen Ihnen, wie Sie ein v5 Captcha oder ein Google reCAPTCHA hinzufügen.

Im Allgemeinen wird ein Captcha im DCE hinzugefügt, indem ein Gestaltungsbaustein erstellt wird, mit dem es in den Seiteninhalt integriert werden kann. Sie müssen außerdem eine Script-Aktivität und einen Test hinzufügen.

Gestaltungsbaustein

  1. Gehen Sie zu Ressourcen > Kampagnenverwaltung > Gestaltungsbausteine und erstellen Sie einen neuen Gestaltungsbaustein.

  2. Verwenden Sie den Content-Typ Webanwendung und aktivieren Sie Sichtbar in den Personalisierungsmenüs.

    Weitere Informationen dazu finden Sie auf dieser Seite.

    Dies ist ein Beispiel für ein Kampagnen-Captcha:

    <%
    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>
    <%
    }
    %>
    
    • Mit den Zeilen 1 bis 6 werden alle erforderlichen Eingaben erzeugt.

    • Mit den Zeilen 7 bis zum Ende werden Fehler gehandhabt.

    • Mit Zeile 4 können Sie die Größe des grauen Captcha-Feldes (Breite/Höhe) sowie die Länge des erzeugten Worts ändern (minWordSize/maxWordSize).

    • Bevor Sie Google reCAPTCHA verwenden, müssen Sie sich bei Google registrieren und eine neue reCAPTCHA-Site erstellen.

      <div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
      Sie sollten die Validierungsschaltfläche deaktivieren können. Da jedoch keine standardmäßige Schaltfläche/keinen standardmäßigen Link vorhanden ist, ist es besser, dies im HTML-Code selbst zu tun. Weiterführende Informationen dazu finden Sie auf dieser Seite.

Webanwendung aktualisieren

  1. Greifen Sie auf die Eigenschaften Ihrer Webanwendung zu, um eine boolesche Variable namens captchaValid hinzuzufügen.

  2. Fügen Sie zwischen der letzten Seite und der Aktivität Storage ein Script und einen Test hinzu.

    Verbinden Sie den Zweig True mit dem Speicher und den anderen mit der Seite, die das Captcha enthalten wird.

  3. Bearbeiten Sie die Bedingung der Verzweigung True mit "[vars/captchaValid]" gleich True .

  4. Bearbeiten Sie die Aktivität Script . Der Inhalt hängt von der ausgewählten Captcha-Engine ab.

  5. Schließlich können Sie Ihren personalisierten Baustein auf der Seite hinzufügen: siehe diese Seite.

WICHTIG

Für die reCAPTCHA-Integration müssen Sie clientseitiges JavaScript in den HTML-Code einfügen (in <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

Zeile 6: Sie können eine beliebige Fehlermeldung eingeben.

Google Recaptcha

Weitere Informationen finden Sie in der offiziellen Dokumentation.

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

Um JSON.parse zu verwenden, müssen Sie "shared/json2.js" in Ihre Webapp integrieren:

Seit Build 8797 müssen Sie zur Verwendung der Verifizierungs-API-URL diese auf die Zulassungsliste in der serverConf-Datei setzen, indem Sie sie im Knoten urlPermission hinzufügen:

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

Auf dieser Seite