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の設定方法が記載されました。
21.2.6 Configuring Content Security Policy (CSP)
以下よりOracle APEX 26.1でのContent Security Policyの設定について確認します。
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 todisplay: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 indata:URLs.
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.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レスポンス・ヘッダーです。
簡単なテストですが、特にエラーは発生しません。
すべてのページ・タイプについて確認はしませんが、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のアプリケーション作成の参考になれば幸いです。
完




