スクリプトとコーディングのガイドライン scripting-coding-guidelines
スクリプト作成
詳しくは、Campaign JSAPI のドキュメントを参照してください。
ワークフロー、Web アプリケーション、JSSP を使用してスクリプトを作成する場合、次のベストプラクティスに従ってください。
-
SQL 文はできるだけ使用しないようにしてください。
-
どうしても必要な場合は、文字列連結ではなく、パラメーター化関数(prepare 文)を使用します。
悪い習慣:
code language-none sqlGetInt( "select iRecipientId from NmsRecipient where sEmail ='" + request.getParameter('email') + "' limit 1" )
ベストプラクティス:
code language-none sqlGetInt( "select iRecipientId from NmsRecipient where sEmail = $(sz) limit 1", request.getParameter('email'));
note important IMPORTANT sqlSelect はこの機能をサポートしていないため、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()
SQL の挿入を避けるために、Adobe Campaignで使用する許可リストに SQL 関数を追加する必要があります。 許可リストに追加されると、式エディターで演算子に表示されるようになります。 このページを参照してください。
ユーザー入力を使用してクエリや SQL 文にフィルターを作成する場合は、常にフィルターをエスケープする必要があります(Campaign JSAPI ドキュメント- データ保護:関数のエスケープを参照)。 次の関数が該当します。
- NL.XML.escape(data)
- NL.SQL.escape(data)
- NL.JS.escape(data)
- NL.XML.escapeAttribute(data)
新しいデータモデルの保護
フォルダーベース
次のページを参照してください。
ネームド権限
フォルダーベースのセキュリティモデルに加えて、ネームド権限を使用してオペレーターの操作を制限できます。
-
一部のシステムフィルター(sysFilter)を追加して、データの読み取りや書き込みを防ぐことができます( このページを参照してください)。
code language-none <sysFilter name="writeAccess"> <condition enabledIf="hasNamedRight('myNewRole')=false" expr="FALSE"/> </sysFilter>
-
また、スキーマで定義された一部のアクション(SOAP メソッド)を保護することもできます。 対応するネームド権限を値として使用して、アクセス属性を設定するだけです。
code language-none <method name="grantVIPAccess" access="myNewRole"> <parameters> ... </parameters> </method>
詳しくは、このページを参照してください。
オーバーフローテーブル
オペレーターのアクセスレベルに応じて機密データ(スキーマの一部)を保護する必要がある場合、フォーム定義で非表示にしないでください(enabledIf/visibleIf 条件)。
エンティティ全体が画面に読み込まれます。また、列定義で表示することもできます。 それには、オーバーフローテーブルを作成する必要があります。 このページを参照してください。
Web アプリケーションへの Captcha の追加
パブリックのランディングページや購読ページに Captcha を追加することをお勧めします。 残念ながら、DCE (デジタルコンテンツエディター)ページに CAPTCHA を追加することは容易ではありません。 ここでは、Captcha バージョン 5 または Google reCAPTCHA を追加する方法について説明します。
DCE に Captcha を追加する一般的な方法は、パーソナライゼーションブロックを作成して、ページコンテンツ内に簡単に含めることです。 スクリプト アクティビティと テスト を追加する必要があります。
パーソナライゼーションブロック
-
リソース/キャンペーン管理/パーソナライゼーションブロック に移動し、新しいパーソナライゼーションブロックを作成します。
-
Web アプリケーション コンテンツタイプを使用し、「カスタマイズメニューに表示」チェックボックスをオンにします。
詳しくは、このページを参照してください。
Campaign 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> <% } %>
-
1 ~ 6 行目では、必要な入力をすべて生成します。
-
7 行目から最終行では、エラーを処理します。
-
4 行目では、Captcha のグレーボックスのサイズ(幅/高さ)と、生成されるワードの長さ(minWordSize/maxWordSize)を変更できます。
-
Google reCAPTCHA を使用する前に、Googleに登録して、新しい reCAPTCHA サイトを作成する必要があります。
<div class="g-recaptcha" data-sitekey="YOUR_SITE_KEY"></div>
「validation」ボタンは無効にできるはずですが、標準のボタンやリンクはないので、HTML自体で行う方が良いでしょう。 その方法については、 このページを参照してください。
-
Web アプリケーションの更新
-
Web アプリケーションのプロパティにアクセスして、captchaValid という名前のブール変数を追加します。
-
最後のページと ストレージ アクティビティの間に、スクリプト と テスト を追加します。
ブランチ True を ストレージ に接続し、もう 1 つを captcha を持つページに接続します。
-
"[vars/captchaValid]"
が True に等しいブランチ True の条件を編集します。 -
スクリプト アクティビティを編集します。 コンテンツは、選択した captcha エンジンによって異なります。
-
最後に、パーソナライズされたブロックをページに追加できます。 このページを参照してください。
<head>...</head>
で)HTMLにクライアントサイドのJavaScriptを追加する必要があります。<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
6 行目:あらゆる種類のエラーメッセージを出力できます。
Google recaptcha
詳しくは、 公式ドキュメントを参照してください。
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")
}
JSON.parse を使用するには、webApp に「shared/json2.js」を含める必要があります。
ビルド 8797 以降、verification API URL を使用するには、urlPermission ノードに次のように追加して、serverConf ファイルの許可リストに追加する必要があります。
<url dnsSuffix="www.google.com" urlRegEx="https://www.google.com/recaptcha/api/siteverify"/>