Mark Hammer's blog

SalesforceやTrailheadに関する情報を投稿しているブログです。

Trailhead モジュール:Platform デベロッパー資格の更新 (Spring '19)

※この内容は2019/4時点のものです。

Spring '19 での Platform デベロッパー向けの新機能の学習

https://trailhead.salesforce.com/ja/content/learn/modules/platform-developer1-maintenance-spring19/learn-whats-new-for-platform-developers-sp19

  • 説明:日本語
  • Challenge:日本語選択問題

新しい Apex セキュリティ設定の使用

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「ハンズオン Challenge への準備」節に記載の通り、「Secret Key」カスタムテキスト項目を取引先責任者オブジェクトに作成してください。
  • 新規Apexクラス「SecureApexRest」を作成してください。
  • 「ハンズオン Challenge への準備」節の「SecureApexRest」コードをコピーし、「SecureApexRest」Apexクラスに貼り付けてください。このコードは、従来のオブジェクトレベル及び項目レベルのアクセスチェックですでに保護されています。
  • 貼り付けたコードの13行目のSOQLクエリに WITH SECURITY_ENFORCED 句を追加してください。これにより手動の Schema.SObjectType チェックが冗長になります。
  • コードをリファクタリングして、冗長なオブジェクトと項目レベルのアクセスチェックを削除してください。
  • 権限が不十分な場合、他のタイプの例外ではなくSecurityExceptionでチェックされるようにして、既存の動作を維持してください。これには、WITH SECURITY_ENFORCED が throw する System.QueryException を catch して、new SecurityException を throw する必要があります。
  • オプション:これらの変更後の動作をテストしたい場合は、ワークベンチを利用してApex RESTサービスを呼び出すことができます。

Trailhead モジュール:インジェクションの脆弱性防止

※この内容は2019/4時点のものです。

アプリケーションセキュリティの使用開始

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_get_started_wappsec

  • 説明:日本語
  • Challenge:日本語選択問題

クロスサイトスクリプト (XSS) について

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_cross_site_scripting

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

このChallengeを完了するには、入力フィールドに有効なクロスサイトスクリプティング攻撃を実施する必要があります。

  • 「Cross-site Scripting (XSS)」アプリケーションの「XSS Basics Challenge」タブにアクセスしてください。
  • 入力フィールドを使用して、次の要件を満たすクロスサイトスクリプティングペイロードを入力してください。
    • <a> any text</a>」のように、HTMLテキストを含むもの
    • htmlタグ「<a>」の onmouseover プロパティを使用してJavaScriptアラートのポップアップを開始させるもの
  • 「Attempt XSS!」をクリックし、表示されたテキストにマウスカーソルを当て、ペイロードが成功していることを確認してください。

※筆者注:筆者が本ChallengeをChromeにて実施した際は、条件を満たすHTMLテキストを入力フィールドに入力し、「Attempt XSS!」をクリックしてもテキストは表示されませんでしたが、Challengeはクリアとなりました。

Lightning Platform に組み込まれている XSS 保護の確認

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_built_in_xss_protections

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「Cross-site Scripting (XSS)」アプリケーションの「Built-In XSS Protections Challenge」タブにアクセスし、「Visualforce Page」リンクをクリックしてください。
  • 「Built_In_XSS_Protections_Challenge」Visualforceページの、差し込み項目の右にあるコメントについて、以下の通り変更してください。
    • 脆弱性がある場合は「<!-- Line 10 is vulnerable to XSS: YES -- >」のようにしてください。
    • 脆弱性がない場合は「<!-- Line 10 is vulnerable to XSS: NO -- >」のようにしてください。

Lightning Platform アプリケーションでの XSS の防止

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_preventing_xss_inforce

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「Cross-site Scripting (XSS)」アプリケーションの「XSS Mitigations Challenge」タブにアクセスし、「Visualforce Page」リンクをクリックしてください。
  • 「XSS_Mitigations_Challenge」Visualforceページにある"{!sampleMergeField}"を探し、各フィールドに対し必要に応じてHTMLENCODE(), JSENCODE(), JSINHTMLENCODE()メソッドを使用してください。エンコーディングが不要なフィールドは変更しないでください。

SOQL インジェクションについて

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_soql_injection

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「SOQL Injection」アプリケーションの「SOQL Injection Challenge」タブにアクセスしてください。supply__cオブジェクトの検索ツールが表示されます。
  • 検索ボックスを使用して、貴族専用(Nobles only)の消耗品を返すSOQLインジェクションを実行してください。

ヒント:SOQLインジェクションに成功した場合、クエリは Venison を含む1レコードを結果として返すはずです。

コード内の SOQL インジェクションの防止

https://trailhead.salesforce.com/ja/content/learn/modules/secdev_injection_vulnerabilities/secdev_inject_prevent_soql_injection

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • 「SOQL Injection」アプリケーションの「Prevent SOQL Injection Challenge」タブにアクセスしてください。複数の「Perform Search」ボタン付きの検索ボックスが表示されます。
  • 「Prevent_SOQL_Injection_Challenge」Apexコントローラには、動的クエリを含む3つのクエリ「stringSearchOne()」、「stringSearchTwo()」、「numberSearchOne()」があります。
  • 単一引用符のエスケープメソッドを使用して、「stringSearchOne()」、「stringSearchTwo()」の各クエリについてSOQLインジェクションを防止するよう修正してください。
  • 型キャストメソッドを使用して、「numberSearchOne()」各クエリについてSOQLインジェクションを防止するよう修正してください。

Kingdom Management DE組織で「アクセス権がありません」エラーが出た場合

※この内容は2019/4時点のものです。

事象

セキュアな Web アプリケーションの開発トレイルでは、Kingdom Management DE組織にサインアップして取得した組織を使用します。

Kingdom Management DE組織には、ユーザの権限が一部ない場合の動作を選択リストから選択することで確認できる画面があります。

f:id:mark-hammer:20190417002319p:plain
選択画面

さっそく、赤い部分を選択してみると…、

f:id:mark-hammer:20190417002404p:plain
「アクセス権がありません」エラー

「アクセス権がありません」というエラー画面が表示されます。

権限が関係する内容のため、この画面表示が正しいような気もしますが、Trailheadで示されている画面とは異なっています。

解消方法

この事象の原因は、ログインアクセスポリシーにある「管理者は任意のユーザでログインできます」設定がOFFになっていることが原因です。 先ほどの選択リスト画面で値を選択すると、該当ユーザへの代理ログイン処理を行うため、代理ログインの前提となる「管理者は任意のユーザでログインできます」がOFFの場合、エラーとなってしまうようです。

設定変更は、設定|セキュリティのコントロール|ログインアクセスポリシー の順にクリックし、「管理者は任意のユーザでログインできます」の有効化にチェックを入れて、「保存」をクリックすればOKです。

f:id:mark-hammer:20190417002532p:plain
設定画面

「管理者は任意のユーザでログインできます」の有効化にチェックを入れた後、同じように選択リストから選択すると…

f:id:mark-hammer:20190417002824p:plain
設定変更後に選択リストを選んだ画面

無事、Trailheadで示されている画面と同じものが表示されました。

参考URL

Trailhead Module: Identify CRUD and FLS Violations in Visualforce and Apex - Salesforce Developer Community

Trailhead モジュール:データ漏洩の防止

※この内容は2019/4時点のものです。

Force.com アプリケーションの認証のしくみについて

https://trailhead.salesforce.com/ja/content/learn/modules/data-leak-prevention/learn-how-authorization-works-in-force-com-apps

  • 説明:日本語
  • Challenge:日本語選択問題

Visualforce と Apex での CRUD および FLS 違反の特定

https://trailhead.salesforce.com/ja/content/learn/modules/data-leak-prevention/identify-crud-and-fls-violations-in-visualforce-and-apex

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

このChallengeは、通常のDeveloper Edition組織やTrailhead Playground組織ではなく、Kingdom Management DE組織を使用してください。
このChallengeの前に、Kingdom Management DE組織にサインアップしてください。

  • 「CRUD/FLS & Sharing」アプリケーションの「CRUD & FLS Challenge」タブにある「Visualforce page」リンクをクリックしてください。
  • 「CRUD_FLS_Challenge」Visualforceページにある3つの項目の右にあるコメントについて、以下の通り変更してください。
    • CRUD および FLS 違反が可能な項目の場合は「<!-- Field 1 is vulnerable YES -->」のようにしてください。
    • CRUD および FLS 違反が不可な項目の場合は「<!-- Field 1 is vulnerable NO -->」のようにしてください。

CRUD および FLS 違反の防止

https://trailhead.salesforce.com/ja/content/learn/modules/data-leak-prevention/prevent-crud-and-fls-violations

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

このChallengeは、通常のDeveloper Edition組織やTrailhead Playground組織ではなく、Kingdom Management DE組織を使用してください。
このChallengeの前に、Kingdom Management DE組織にサインアップしてください。

  • 「CRUD/FLS & Sharing」アプリケーションの「CRUD & FLS Fix Challenge」タブにある「Apex Controller」リンクをクリックしてください。
  • register()関数に、権限を持たないユーザがトーナメントへの新規参加登録を防ぐコードを追加してください。

※筆者注:このChallengeでの「権限を持たないユーザ」とは、register()関数内のinsert文にある全項目分の作成権限を持たないユーザを指します。

共有違反の特定と防止

https://trailhead.salesforce.com/ja/content/learn/modules/data-leak-prevention/identify-and-prevent-sharing-violations

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

このChallengeは、通常のDeveloper Edition組織やTrailhead Playground組織ではなく、Kingdom Management DE組織を使用してください。
このChallengeの前に、Kingdom Management DE組織にサインアップしてください。

  • 「CRUD/FLS & Sharing」アプリケーションの「Sharing Challenge」タブにある「Apex Controller」リンクをクリックしてください。
  • 共有違反を防ぐためにクラス定義を変更してください。

Trailhead モジュール:秘密の保存場所の保護

※この内容は2019/4時点のものです。

秘密の保護の使用開始

https://trailhead.salesforce.com/ja/content/learn/modules/secure-secret-storage/get-started-with-secret-protection

  • 説明:日本語
  • Challenge:日本語選択問題

プラットフォーム機能を使用した秘密の保護

https://trailhead.salesforce.com/ja/content/learn/modules/secure-secret-storage/learn-about-platform-secret-protection

  • 説明:日本語
  • Challenge:日本語選択問題

カスタムアプリケーションでの暗号化の使用

https://trailhead.salesforce.com/ja/content/learn/modules/secure-secret-storage/use-encryption-in-custom-applications

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

このChallengeは、通常のDeveloper Edition組織やTrailhead Playground組織ではなく、Kingdom Management DE組織を使用してください。
このChallengeの前に、Kingdom Management DE組織にサインアップしてください。

  • Salesforce Classicにて、「Secret Storage」アプリケーションの「Apex encryption challenge」タブにある「Apex Controller」リンクをクリックし、「EncryptChallenge」Apexクラスのページを開いてください。「Secret Storage」アプリケーションはLightning Experienceでは使用できません。
  • Save()関数に、Encrypt_Decrypt__c オブジェクトにある「EnCrypt_Decrypt Name」(Name) フィールドの CRUD / FLSチェックを実装してください。
  • Save()関数に、Princess のメッセージ暗号化を実装してください。暗号鍵としてcryptoKeyを用いてデータを暗号化し、またCrypto.encryptWithManagedIV()関数を用いてAES256暗号化を実装してください。
  • DecryptData()関数に、Princess のメッセージ復号化を実装してください。暗号鍵としてcryptoKeyを用いてデータを復号化し、またCrypto.decryptWithManagedIV()関数を用いてAES256復号化を実装してください。

Trailhead モジュール:ユーザインターフェース API

※この内容は2019/4時点のものです。

ユーザインターフェース API の使用開始

https://trailhead.salesforce.com/ja/content/learn/modules/user-interface-api/get-started-with-user-interface-api

  • 説明:日本語
  • Challenge:日本語選択問題

サンプルアプリケーションのインストール

https://trailhead.salesforce.com/ja/content/learn/modules/user-interface-api/install-sample-app

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

始める前に:このユニット内の手順を進め、すでにRecord Viewerサンプルアプリケーションや接続アプリケーションを作成している場合、もう一度作成する必要はありません。

  • 以下内容で接続アプリケーションを作成してください。
    • 接続アプリケーション名:RecordViewer
    • API参照名:RecordViewer
    • 取引先責任者 メール:(任意のメールアドレス)
    • OAuth 設定の有効化:チェックを入れる
    • コールバックURL:https://localhost:8443/oauth-redirect
    • 選択した OAuth 範囲:以下を選択
      • データへのアクセスと管理(api)
  • CORSの「オリジンの URL パターン」に、「https://localhost:8443」を追加してください。
  • Record Viewerアプリケーションをインストールし、実行してください。
  • Record Viewerアプリケーションをブラウザで開き、あなたのTrailhead Playground組織にアクセスして認証してください。
  • Record Viewerアプリケーションで、以下取引先レコードを作成してください。
    • 取引先名:ABC Computing
    • 取引先評価:Warm
  • 作成したレコードは、「Recent Items」リストから「ABC Computing」をクリックすることで参照できます。
  • すでにこのユニット内の手順を進めている場合、あなたは「Fax」項目を「Account Layout」取引先ページレイアウトから削除しており、「ABC Computing」レコードの「詳細」タブでも表示されません。
    もし「Fax」項目が表示されている場合は、Salesforce設定画面で「Fax」項目を「Account Layout」取引先ページレイアウトから削除してください。
  • 削除後、Record Viewerアプリケーションで「ABC Computing」レコードを再度表示し、「Fax」項目が「電話」項目の下にないことを確認してください。

レコードを表示するための UI の作成

https://trailhead.salesforce.com/ja/content/learn/modules/user-interface-api/build-ui-to-display-a-record

  • 説明:日本語
  • Challenge:日本語選択問題

レコードを編集するための UI の作成

https://trailhead.salesforce.com/ja/content/learn/modules/user-interface-api/build-ui-to-edit-a-record

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

注意:前のユニットのChallengeが完了していない場合は、このChallengeの前に完了してください。

User Interface API と Workbench を使用し、「ABC Computing」取引先レコードの「住所(請求先)」を以下の通り追加してください。

  • 町名・番地(請求先)[Billing Street]: 123 Main Street
  • 市区郡(請求先)[Billing City]: Portland
  • 都道府県(請求先)[Billing State/Province]: OR
  • 郵便番号(請求先)[Billing Zip/Postal Code]: 97202
  • 国(請求先)[Billing Country]: USA

レコードを作成およびコピーするための UI の作成

https://trailhead.salesforce.com/ja/content/learn/modules/user-interface-api/build-ui-to-create-and-clone-a-record

  • 説明:日本語
  • Challenge:日本語選択問題

連動選択リストの UI の作成

https://trailhead.salesforce.com/ja/content/learn/modules/user-interface-api/build-ui-for-dependent-picklists

  • 説明:日本語
  • Challenge:日本語選択問題

Trailhead モジュール:HTML5 とハイブリッド

※この内容は2019/4時点のものです。

ハイブリッド開発の開始

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_hybrid/mobilesdk_hybrid_getting_started

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • あなたのDeveloper Edition組織に、以下接続アプリケーションを作成してください。
    • 接続アプリケーション名:Trailhead Hybrid
    • API参照名:Trailhead_Hybrid
    • 取引先責任者 メール:(任意のメールアドレス)
    • コールバックURL:trailheadapp://auth/success
    • 選択した OAuth 範囲:以下を選択
      • データへのアクセスと管理(api)
      • Web経由のデータへのアクセスを提供(web)
      • ユーザに代わっていつでも要求を実行(refresh_token, offline_access)
  • forcehybrid を使用して、アプリケーション名を「TrailheadHybridTest」とした新規ハイブリッドローカルアプリケーションを作成してください。
  • 「TrailheadHybridTest」native Androidアプリケーションには、「Trailhead Hybrid」接続アプリケーションのコンシューマー鍵とコールバックURLを設定してください。
  • 「TrailheadHybridTest」アプリケーションからDeveloper Edition組織に最低1回ログインしてください。アプリケーションは適切なシミュレータ、エミュレータ、またはデバイスで実行できます。必ず「Trailhead Hybrid」接続アプリケーションを作成した組織の資格情報を使用してログインしてください。

サンプルハイブリッドアプリケーションについて

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_hybrid/mobilesdk_hybrid_sample_app

  • 説明:日本語
  • Challenge:日本語選択問題

ハイブリッドアプリケーションでの Salesforce データへのアクセス

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_hybrid/mobilesdk_hybrid_rest_apis

  • 説明:日本語
  • Challenge:日本語選択問題

ハイブリッドアプリケーションのデバッグ

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_hybrid/mobilesdk_hybrid_debugging

  • 説明:日本語
  • Challenge:日本語選択問題

Trailhead モジュール:Android ネイティブアプリケーション

※この内容は2019/4時点のものです。

ネイティブ Android 開発の開始

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_android/mobilesdk_android_getting_started

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • あなたのDeveloper Edition組織に、以下接続アプリケーションを作成してください。
    • 接続アプリケーション名:Trailhead Native Android
    • API参照名:Trailhead_Native_Android
    • 取引先責任者 メール:(任意のメールアドレス)
    • コールバックURL:trailheadapp://auth/success
    • 選択した OAuth 範囲:以下を選択
      • データへのアクセスと管理(api)
      • Web経由のデータへのアクセスを提供(web)
      • ユーザに代わっていつでも要求を実行(refresh_token, offline_access)
  • forcedroidを使用して、アプリケーション名を「TrailheadAndroidTest」とした新規native Androidアプリケーションを作成してください。アプリケーションの実行には、Android SDK 5.0.1 (API 21) 以上のバージョンがインストールされている必要があります。
  • 「TrailheadAndroidTest」native Androidアプリケーションには、「Trailhead Native Android」接続アプリケーションのコンシューマー鍵とコールバックURLを設定してください。
  • 「TrailheadAndroidTest」native AndroidアプリケーションからDeveloper Edition組織に最低1回ログインしてください。アプリケーションはEclipseエミュレータかサポートされている Android デバイスで実行できます。

forcedroid アプリケーションについて

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_android/mobilesdk_android_template_app

  • 説明:日本語
  • Challenge:日本語選択問題

REST API による Salesforce データへのアクセス

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_android/mobilesdk_android_rest_apis

  • 説明:日本語
  • Challenge:日本語選択問題

forcedroid ネイティブアプリケーションの変更

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_android/mobilesdk_android_template_modify

  • 説明:日本語
  • Challenge:日本語選択問題

Trailhead モジュール:ネイティブ iOS

※この内容は2019/4時点のものです。

ネイティブ iOS 開発の開始

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_ios/mobilesdk_ios_getting_started

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

  • あなたのDeveloper Edition組織に、以下接続アプリケーションを作成してください。
    • 接続アプリケーション名:Trailhead Native iOS
    • API参照名:Trailhead_Native_iOS
    • 取引先責任者 メール:(任意のメールアドレス)
    • コールバックURL:trailheadapp://auth/success
    • 選択した OAuth 範囲:以下を選択
      • データへのアクセスと管理(api)
      • Web経由のデータへのアクセスを提供(web)
      • ユーザに代わっていつでも要求を実行(refresh_token, offline_access)
  • forceios を使用して、以下 iOS アプリケーションを作成してください。
    • アプリケーション名:TrailheadiOSTest
    • パッケージ名:(任意)
  • ”TrailheadiOSTest” iOS アプリケーションに、”Trailhead Native iOS”接続アプリケーションのコンシューマー鍵とコールバックURLを設定してください。
  • ”TrailheadiOSTest” iOS アプリケーションからDeveloper Edition組織に最低1回ログインしてください。アプリケーションはXCodeシミュレータかサポートされている iOS デバイスで実行できます。

forceios ネイティブアプリケーションについて

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_ios/mobilesdk_ios_template_app

  • 説明:日本語
  • Challenge:日本語選択問題

REST API による Salesforce データへのアクセス

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_ios/mobilesdk_ios_rest_apis

  • 説明:日本語
  • Challenge:日本語選択問題

forceios ネイティブアプリケーションの変更

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_ios/mobilesdk_ios_template_modify

  • 説明:日本語
  • Challenge:日本語選択問題

既存のプロジェクトへの Mobile SDK の追加

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_native_ios/mobilesdk_ios_cocoapods

  • 説明:日本語
  • Challenge:日本語選択問題

Trailhead モジュール:Salesforce Mobile SDK の基礎

※この内容は2019/4時点のものです。

Salesforce Mobile SDK の使用開始

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_introduction/mobilesdk_intro_scenarios

  • 説明:日本語
  • Challenge:日本語選択問題

セキュリティと認証について

https://trailhead.salesforce.com/ja/content/learn/modules/mobile_sdk_introduction/mobilesdk_intro_security

  • 説明:日本語
  • Challenge:英語ハンズオン

【Challenge要約】

以下内容で、接続アプリケーションを作成してください。

  • 接続アプリケーション名:Trailhead Intro
  • API参照名:Trailhead_Intro
  • 取引先責任者 メール:(任意のメールアドレス)
  • コールバックURL:trailheadapp://auth/success
  • 選択した OAuth 範囲:以下を選択
    • データへのアクセスと管理(api)
    • Web経由のデータへのアクセスを提供(web)
    • ユーザに代わっていつでも要求を実行(refresh_token, offline_access)