Richtlinien für Script-Erstellung und Codierung scripting-coding-guidelines
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.
Ungültige Praxis:
code language-none sqlGetInt( "select iRecipientId from NmsRecipient where sEmail ='" + request.getParameter('email') + "' limit 1" )
Bewährte Verfahren:
code language-none sqlGetInt( "select iRecipientId from NmsRecipient where sEmail = $(sz) limit 1", request.getParameter('email'));
note important IMPORTANT sqlSelect unterstützt diese Funktion nicht. Daher müssen Sie die Abfragefunktion der DBEngine-Klasse verwenden: 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()
Um SQL-Injections zu vermeiden, müssen SQL-Funktionen zu der in Adobe Campaign zu verwendenden Zulassungsliste hinzugefügt werden. Nachdem sie der Zulassungsliste hinzugefügt wurden, werden sie für Ihre Operatoren im Ausdruckseditor sichtbar. Mehr dazu erfahren Sie auf dieser Seite.
Wenn Sie Benutzereingaben zum Erstellen von Filtern in Abfragen oder SQL-Anweisungen verwenden, müssen Sie diese immer mit Escape-Zeichen versehen (siehe Campaign JSAPI-Dokumentation - Datenschutz: Escaping-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
Mehr dazu erfahren 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).
code language-none <sysFilter name="writeAccess"> <condition enabledIf="hasNamedRight('myNewRole')=false" expr="FALSE"/> </sysFilter>
-
Sie können auch einige Aktionen (SOAP-Methode) schützen, die in Schemata definiert sind. Legen Sie einfach das Zugriffsattribut mit der entsprechenden spezifischen Berechtigung als Wert fest.
code language-none <method name="grantVIPAccess" access="myNewRole"> <parameters> ... </parameters> </method>
Weitere Informationen hierzu finden Sie auf dieser Seite.
Überlauftabelle
Wenn Sie vertrauliche Daten (Teil eines Schemas) je nach Zugriffsebene des Benutzers schützen müssen, blenden Sie diese nicht in der Formulardefinition aus (enabledIf/visibleIf-Bedingungen).
Die vollständige Entität wird vom Bildschirm geladen. Sie können sie auch in der Spaltendefinition anzeigen. Dazu müssen Sie eine Überlauftabelle erstellen. Siehe diese 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 können Sie ein CAPTCHA im DCE hinzufügen, indem Sie einen Gestaltungsbaustein erstellen, um ihn einfach in den Seiteninhalt einzufügen. Sie müssen eine ""-Aktivität einen "".
Gestaltungsbaustein
-
Gehen Sie zu Ressourcen > Kampagnenverwaltung > Gestaltungsbausteine und erstellen Sie einen neuen Gestaltungsbaustein.
-
Verwenden Sie den Webanwendung Inhaltstyp und aktivieren Sie In den Anpassungsmenüs sichtbar.
Weitere Informationen dazu finden Sie auf dieser Seite.
Dies ist ein Beispiel für ein Kampagnen-Captcha:
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> <% } %>
-
Mit den Zeilen 1 bis 6 werden alle erforderlichen Eingaben erzeugt.
-
Mit den Zeilen 7 bis zum Ende werden Fehler gehandhabt.
-
In Zeile 4 können Sie die Größe des grauen Captcha-Feldes (Breite/Höhe) und die Länge des generierten Worts (minWordSize/maxWordSize) ändern.
-
Vor der Verwendung von Google reCAPTCHA 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, aber da wir keine Standardschaltfläche/-verknüpfung haben, ist es besser, sie in der HTML selbst zu verwenden. Informationen hierzu finden Sie auf dieser Seite.
-
Webanwendung aktualisieren
-
Greifen Sie auf die Eigenschaften Ihrer Web-Anwendung zu, um eine boolesche Variable mit dem Namen captchaValid hinzuzufügen.
-
Fügen Sie zwischen der letzten Seite und der Speicher-Aktivität ein Script und einen Test hinzu.
Schließen Sie die Verzweigung True an Storage und die andere an die Seite an, die das Captcha enthält.
-
Bearbeiten Sie die Bedingung der Verzweigung True , wenn
"[vars/captchaValid]"
True gleich True ist. -
Bearbeiten Sie die Script-Aktivität. Der Inhalt hängt von der ausgewählten CAPTCHA-Engine ab.
-
Schließlich können Sie Ihren personalisierten Block auf der Seite hinzufügen: siehe diese Seite.
<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
Siehe die offizielle 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:
Auf die Zulassungsliste setzen Um die Verifizierungs-API-URL verwenden zu können, müssen Sie sie seit Build 8797 der Datei "" in der Datei „serverConf“ hinzufügen, indem Sie im Knoten „urlPermission“ hinzufügen:
<url dnsSuffix="www.google.com" urlRegEx="https://www.google.com/recaptcha/api/siteverify"/>