2026年6月9日火曜日

Oracle APEX 26.1のContent Security Policyの推奨設定を確認する

Oracle APEX 26.1では、より厳しいContent Security Policy(CSP)の設定でも、標準機能として提供されているJavaScriptやCSSが動作するようになりました。

Oracle APEX 24.2でのContent Security Policyについて、以下の記事で紹介しています。
Oracle APEX 24.2で強化されたContent-Security-Policyの対応について

この記事ではunsafe-hashesの追加方法を取り上げていますが、ひとつひとつハッシュ値を確認するのは現実的で無く、APEX 24.2でCSPの設定は難しい状況でした。

Oracle APEX 26.1からはunsafe-hashes(およびunsafe-inline)の設定が不要になっています。また、公式ドキュメントにContent Security Policyの設定方法が記載されました。

App Builder User's Guide, Release 26.1
21.2.6 Configuring Content Security Policy (CSP)

以下よりOracle APEX 26.1でのContent Security Policyの設定について確認します。

ドキュメント21.2.6.3 Understanding the CSP Headerに以下の記載があります。APEX 26.1で必要とされる設定です。

  • default-src 'self' - This directive restricts all default resource loading (scripts, styles, fonts, etc.) to the same origin as your application.
  • #APEX_CSP_NONCE# - APEX dynamically replaces this placeholder with a cryptographically secure nonce for each request. This allows inline scripts that include this nonce to execute, while blocking others.
  • 'unsafe-hashes' #APEX_CSP_HASHES# - Allows the use of specific inline scripts or styles that have been hashed and approved by APEX. Refers to the hashed value which corresponds to display:none;.
  • object-src 'none' - Disallows the use of <object>, <embed>, and <applet> elements, which are commonly exploited.
  • img-src 'self' data: - Allows images from the same origin and inline images encoded in data: URLs.
この中の'unsafe-hashes' #APEX_CSP_HASHES#については、リリース・ノートの以下の記述と整合していません。


In previous versions, APEX required the unsafe-hashes directive to allow inline styles like style="display:none;" during page load. This dependency is now eliminated.

リリース・ノートの記載が正しい(そうでないとunsafe-hashesが必要になります)はずです。unsafe-hashesの部分を外すと、推奨されるContent Security Policyの設定は以下になります。
Content-Security-Policy: default-src 'self' #APEX_CSP_NONCE#; object-src 'none'; img-src 'self' data:;
Oracle APEX 26.1で空のアプリケーションを作成し、Content Security Policyを設定します。

設定箇所は26.1以前と同じく、アプリケーション定義のセキュリティブラウザ・セキュリティHTTPレスポンス・ヘッダーです。


アプリケーションにファセット検索のページを作成し、ページを操作している際にCSP関連のエラーが発生しないかどうか、ブラウザのJavaScriptコンソールを開いて確認します。

簡単なテストですが、特にエラーは発生しません。


同様に対話グリッドのページを作成し、操作してみます。

こちらも、特にエラーは発生しません。


すべてのページ・タイプについて確認はしませんが、unsafe-inlineやunsafe-hashesが不要になるように、JavaScriptやCSSが再構成されているようです。

ただし、まだ完全とは言えないようです。

開発者ツール・バーからテーマ・ローラーを開くと、インラインのスタイル指定(sytle="..."の指定)が含まれているため、CSPのエラーが発生します。


セッションのセッション・オーバーライドでも同様のエラーが発生します。

なぜかセッション・オーバーライドを呼び出す前にテーマ・ローラーを開いていると、とりあえずセッション・オーバーライドのパネルを開くことができます。


Oracle APEX 26.1ではテンプレートからインラインのスタイル指定が省かれましたが、これはAPEX 26.1にバンドルされているテーマ/テンプレートが対象なので、APEX 26.1以前のテーマに含まれるテンプレートを使用しているAPEXアプリケーションは、その対象ではありません。APEX 26.1のテーマでリフレッシュする必要があります。

この他に気になった点として、以下があります。

21.2.6.2.3 Supported Substitution Stringsに置換文字列として#APEX_DISPLAY_NONE#とありますが、正しくは#APEX_CSP_DISPLAY_NONE#です。

ChatGPTに確認したところ、Oracle JETではimg-srcにblob:も必要なことがあると指摘されています。APEXはOracle JETを含んでいます。APEXとJETは開発チームは異なるため、JETについてはそれほど気にしていないかもしれません。ですので、img-srcに限り以下のようにblob:を追加した方がよいかもしれません。
img-src 'self' data: blob:

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。