本連載について
こんにちは、いしいです。 今回より連載「Salesforceセキュリティの落とし穴」を開始します。
Salesforceは、管理画面から「ポイント&クリック」操作で、簡単にシステム開発が行えます。また「Apexコード」や「Visualforceページ」を使い、本格的なシステム開発を行うこともできます。
しかしながら、開発中にハマリがちな、セキュリティの落とし穴がいくつかあります。この連載では、落とし穴の内容および、回避方法について、紹介をしていきます。
本連載が、セキュアなSalesforceシステム開発のお役に立てば幸いです。
なお、本連載は、Salesforce環境での開発経験がある方を対象としています。
プロファイル設定の落とし穴
隠しているタブも見える
「オブジェクトタブの設定」では、タブ毎に、下記3つの設定から選ぶことになります。
- デフォルトで表示
- 当該タブを、デフォルトで表示します(画面幅が狭い場合は「▼」ボタンを押すとタブ表示)
- デフォルトで非表示
- 当該タブを、デフォルトでは表示しません(タブの「+」ボタンを押すと表示可能)
- タブを隠す
- 当該タブの存在を隠します(タブの「+」ボタンを押しても表示されません)
とあるオブジェクトにVisualforceページ経由に限ってアクセスさせたい場合、 オブジェクトタブについては、「タブを隠す」を選ぶこともあるかと思います。
タブは画面に表示されず、タブの「+」ボタンを押してもタブ一覧に表示されません。 さらに、 隠されているタブが紐づくオブジェクトは「グローバル検索」の対象からも外れます。
これでオブジェクトタブ経由のアクセスを止められる気がしますよね?
ただ、タブは隠されているだけであって、アクセス禁止にはなっていません。 ここにセキュリティの落とし穴があります。
実は、隠されているタブにも下記URLでアクセスすることができてしまいます。
- http://ap5.salesforce.com/001/o
- ap5は、Salesforceインスタンス名
- 001は、オブジェクト固有のプレフィックス(001は取引先オブジェクト)
よって、「タブを隠す」状態のオブジェクトタブは、アクセス可能であることを前提に、セキュリティ設定を行う必要があります。
対応方針
1.オブジェクトタブを作らない
そもそも、オブジェクトタブを作られていなければ、タブを表示できません。 ただ、全ユーザが、オブジェクトタブ経由でレコードにアクセスできなくなります。 特に、システム管理者が、オブジェクトタブ以外からデータメンテナンスできるよう考慮する必要があります。
2.オブジェクト参照権限を外す
オブジェクトタブが作られていても、タブが紐づくオブジェクトの参照権限がなければ、タブを表示されません。 ただ、オブジェクト権限の有無は、Visualforceページの動作にも影響を及ぼします。 既存のVisualforceページがある場合、権限を外すとページ自体のアクセスが出来なくなったり、「<apex:」から始まるタグの出力結果が空になってしまうこともあるので、注意が必要です。
3.オブジェクトタブを見られても困らない状態にする
オブジェクトタブの表示内容を見られても問題ない状態にする方針も考えられます。 実際の設定の一例は以下の通りです。
- プロファイルからシステム管理者権限「リストビューを作成およびカスタマイズ」を外す
- リストビューの編集画面「表示を制限」において、必要とするユーザのみ表示されるよう設定追加する
ページレイアウトに表示していない項目にもアクセスできる
オブジェクトにカスタム項目を追加する際、項目レベルセキュリティの設定を後回しにしてしまうことは無いでしょうか。
ページレイアウトから項目を外してしまえば、Salesforce標準のレコード参照画面には表示されないため、 項目へのアクセスが出来なくなっている気がしてしまいます。
ただ、ページレイアウトに表示されない項目にも、アクセスする方法はあります。 ここがセキュリティの落とし穴となります。
- レポートからアクセスする
- 項目別セキュリティで参照権限をもっていれば、レポートの一覧項目に表示できます。
- ブラウザツールなどを経由してアクセスする
- Google ChromeやFirefox向けに提供されているツール「Salesforce Inspector」を使うと、画面レイアウトに表示されていない項目をすべて表示できます。
- https://github.com/sorenkrabbe/Chrome-Salesforce-inspector
対応方針
基本的なことですが、項目別セキュリティを適切に設定することが大事です。
また、上記「Salesforce Inspector」は、SOQLの実行など様々な操作を行うことができ、開発者にとっては強力なツールです。 しかしながら、一般利用者がこのツールを使うことはセキュリティのリスクとなります。 よって、一般利用者のプロファイルからはシステム管理者権限「API の有効化」を外し、使用できないようにしておくことをお勧めします。
次回予告
次回は、ApexコードにおけるCRUDチェックについて紹介します。