Trailheadトレイル「セキュアな Web アプリケーションの開発」覚え書き
本記事は、トレイル「セキュアな Web アプリケーションの開発」の覚え書き、気づきの整理です。
コードの一般的な脆弱性を検出および防止して、Web アプリケーションを強化します。
と言う、トレイルの概要だけが日本語対応されていることから、2020年10月末で日本語対応してあったモジュール(確かハンズオンが大量に用意されてたモジュール)がごっそり消えて、新しい内容にさし変わったと思われる。
Secure Salesforce Configuration
Run Health Check
- Salesforce組織で実行するカスタムアプリケーションを作成するときは、アプリケーション自体を保護するだけでなく、Salesforceインスタンスも安全であることを確認することが重要。
- salesforce におけるヘルスチェック:組織のセキュリティ設定がSalesforceが推奨する設定とどの程度一致しているかを確認できるダッシュボード。
Protect Apps with Shield
- Salesforce Shield:管理者と開発者が強化された暗号化やイベント監視などの機能を備えたビジネスクリティカルなアプリケーションを保護するために使用できるセキュリティツールのセット
- プラットフォーム暗号化、イベントモニタリング、フィールド監査証跡
- フィールド監査証跡 を有効にすると、フィールド履歴データが履歴関連リストからFieldHistoryArchiveビッグオブジェクトにコピーされる。
- オブジェクトあたり最大60フィールドを追跡できる。データがアーカイブされてから最大10年間保持することもできる。
クイズぅ・・・。
プラットフォーム暗号化を使用すると、すべてのSalesforceアプリで保存されている最も機密性の高いデータをネイティブに暗号化できます。
とあって、選択肢には「すべてのSalesforceアプリで保存データを暗号化します。」ときている。今までの出題形式からこのケースって×だよなー。と思いつつ。
Secure Client-Side Development
Build Secure Apps with Lightning Web Components
- LWCはデフォルトでLockerで保護されている。
Lightning Locker:Lightningコンポーネントを個別の名前空間に分離する。
- eval関数に制限をかけているらしい。
クイズ:LWCのセキュリティのベストプラクティスは何ですか? で、「サードパーティの依存関係を手動で確認」とか冗談でしょ・・・。静的分析ツールの使用 を一番にもってこないと。。。
Mitigate Cross-Site Scripting
- XSS:攻撃者が許可されていないJavaScript、VBScript、HTML、またはその他のアクティブなコンテンツをWebページに挿入したときに発生するインジェクションの脆弱性。
- クロスサイトスクリプティング攻撃からユーザーを保護する最も簡単な方法は、可能な限りLWCにDOMを操作させ、手動のDOM操作を回避する。
Write Content Security Policy-Compatible Code
CSP(Content Security Policy):Webデザイナーとサーバー管理者がWebサイトでコンテンツがどのように相互作用するかを指定できるようにすることを目的としたコンピューターセキュリティ標準。
- 構成のベストプラクティスとしてCSPを実装するということは、Salesforceが段階的にCSPポリシーを強化し、Salesforceブラウザクライアント内に実装できるセキュリティ対策を追加するときに、ループにとどまることを意味
salesforce での CSPの実装方法
Secure Server-Side Development
Write Secure Apex Controllers
- Apexは通常、システムコンテキストで実行される。ユーザモードではない。
- Apexがシステムコンテキストで実行される方法の唯一の例外:ApexのexecuteAnonymous呼び出し、Chatterで実行されるApexコード
- DescribeSObjectResultクラスのヘルパー関数:IsCreateable(), IsAccessible(), IsUpdateable(), IsDeleteable()
Mitigate SOQL Injection
- インジェクション防止の方法:バインド変数を使用した静的クエリ が推奨。
- 他に、String.escapeSingleQuotes()、型キャスト、文字の置き換え、許可リスト
Mitigate Cross-Site Request Forgery
- CSRF:悪意のあるアプリケーションがユーザーのクライアントに、ユーザーが現在認証されている信頼できるサイトで不要なアクションを実行させる一般的なWebアプリケーションの脆弱性
- Salesforceには、開発者向けのCSRFに対するすぐに使用できる保護機能があり。
デフォルトでは、Salesforceリソースに対して行われたリクエストにはCSRFトークンが添付されている。- Web APIにアクセス:状態の変更が必要な場合、POSTまたはPUTを使用。
Secure Secrets Storage
Get Started with Secret Protection
- アプリケーションシークレット:ユーザーがアプリケーションへの認証のために入力するパスワード、保存されているデータを保護する暗号化キー。
- すべてのシークレットをすべてのタイプのユーザーから保護する必要があるわけではない。管理者は、システムへのアクセスレベルが高いため、他のユーザーよりも信頼できる立場にあるが、最小特権の原則を適用する。
Protect Secrets Using Platform Features
- Salesforceプラットフォームで、シークレットの保存と保護に使用できる機能
- 指定ログイン情報、カスタム設定、カスタムメタデータタイプ
- 管理者がデータを表示できないようにする必要がある場合、または複数のSalesforce組織にシークレットを配布する場合、DeveloperEdition組織を利用して管理パッケージをデプロイ。
- AppExchangeパートナーの場合、DeveloperEdition組織はEnvironmentHubを介して作成できる。
- カスタム設定、カスタムメタデータ:適切な機密性を確保するためには、可視性を「保護」に設定し、管理パッケージ内に含める。
- カスタムメタデータタイプは階層タイプの粒度を提供しない。
Use Encryption in Custom Applications
- Apex Cryptoクラス:通信を保護するために特に価値のある一連の関数を提供。
機密データを盗聴者から効果的に保護し、メッセージデータが完全で変更されていないことを確認し、送信者と受信者の信頼性を確認できる。- ハッシュダイジェストの計算に MD5 は推奨しない。
salersforce 上にあるデータ、特に機密情報を保護する話だったんですが、
なーんで、既存モジュールからごっそり置き換わってしまったんやろか?
ハンズオンの課題は残しておいてもよかった気がします。