Ver. 3.1.17 リリースのお知らせ


この記事では、2024年6月10日にリリースした Ver. 3.1.17 及び、Ver. 3.0.36、Ver. 2.11.65 の修正内容について紹介いたします。

現在お困りの問題に該当する項目がありましたら、お早めにバージョンアップのご検討をお願いいたします。

Ver. 3.1.17 リリースノート

セキュリティ

  • CMS-6828 pdfプレビュー機能のセキュリティ対応

新機能

  • CMS-6808 メディア作成・更新時のHookを新しく追加(saveMedia)
  • CMS-6814 エントリーの複製時にカスタムフィールド、カスタムユニット、ユニットに保存されたファイル名をランダムにするかをカスタマイズするオプション(entry_duplicate_random_filename)を config.system.yaml に追加
  • CMS-6827 子ブログを含んだ初期インストールが出来る仕組みを用意
  • CMS-6824 Google検索に対してサイト名を指定するWebSite構造化データを追加
  • CMS-6842 インストーラーでデータベースの照合順序を選択できるように修正

変更点

  • CMS-6804 CMSで作成するファイル・ディレクトリのパーミッション設定をconfig.server.phpで設定するように変更
  • CMS-6840 Ajaxによる部分テンプレートアクセスにCSRFトークンによる認証を追加し、許可するtpl指定(allow_tpl_path)を個別指定しなくてもいいように改修 & Ajaxリクエストのセキュリティレベルオプションを用意(ajax_security_level)

修正点

  • CMS-6803 Ver. 3.1.0 から Entry_Bodyの「前後リンク」設定をオフにしても {upperUrl} 変数(一覧リンク)が出力される問題を修正
  • CMS-6810 resizeImg校正オプションでメディア画像の場合、large画像(オリジナル画像)を元にリサイズをしないように修正
  • CMS-6809 メディアのlarge画像(オリジナル画像)がメディア画像修正のたびにオリジナル画像も更新されてしまい、オリジナル画像としての役割を果たせていない問題を修正
  • CMS-6812 重複しないファイルパスの生成処理を修正(毎回日時情報を更新するように変更)
  • CMS-6811 メディア(画像)で不要なスクエア画像が生成されている問題を修正
  • CMS-6797 会員限定フラグが無効の場合、マイクロページャーが表示されない問題の修正
  • CMS-6813 バージョン管理ポップアップで、バージョン作成者のユーザーが削除済みだとphpエラーが出る問題を修正
  • CMS-6815 変数表のEntry_Calendarを修正
  • CMS-6780 URL引用ユニットの BEGIN veil 位置を修正
  • CMS-6818 バージョン編集画面で一時保存バージョンがないと、現在編集しているバージョン名が出ない問題を修正
  • CMS-6782 チェックリストモジュールのコンフィグにnotFoundブロックを追加、検索がヒットしなかった場合にメッセージの表示
  • CMS-6616 管理画面のサイドメニューに便利ツールのリンク集を追加
  • CMS-6826 組み込みJS の「google code prettify」が post include や ダイレクト編集のようにajaxで引っ張ってきたコンテンツに発火しない問題を修正
  • CMS-6823 使われていないブログのカスタムフィールド「サイト 説明」を削除
  • CMS-6833 カスタムフィールドメーカー出力コードを貼り付けた時セル余白が揃いやすいよう対策
  • CMS-6835 コンフィグデータが壊れている場合、コンフィグ保存しても過去のコンフィグが消えない問題を修正
  • CMS-6836 アクセス設定のコンフィグページがルール毎の設定をできない問題を修正
  • CMS-6838 非推奨のCSSのdevice-widthメディア特性使用箇所を削除
  • CMS-6839 a-blog cmsロゴを新しいロゴに変更する

Ver. 3.0.36 リリースノート

セキュリティ

CMS-6830 pdfプレビュー機能のセキュリティ対応

修正点

  • CMS-6841 画像ユニットを未来バージョンで保存すると、画像が保存できない問題を修正

Ver. 2.11.65 リリースノート

セキュリティ

  • CMS-6831 pdfプレビュー機能のセキュリティ対応

主なリリースノートの詳細な内容

CMS-6814 エントリーの複製時にカスタムフィールド、カスタムユニット、ユニットに保存されたファイル名をランダムにするかをカスタマイズするオプション(entry_duplicate_random_filename)を config.system.yaml に追加

Ver. 3.1.17 より、エントリー複製時にカスタムフィールド、カスタムユニット、ユニットに保存されたファイルの名前を "元のファイル名_連番" として複製することができるようになりました。

この機能はデフォルトでは無効になっているため、config.sysrem.yaml に次の記述を追加することで有効化できます。

entry_duplicate_random_filename: 'off'

CMS-6842 インストーラーでデータベースの照合順序を選択できるように修正

インストール時に、MySQLの照合順序を選択できるようになりました。


インストール時にMySQLの照合順序を選択するためのプルダウン

インストール時にMySQLの照合順序を選択できます。


以前のバージョンでは、データベースを提供しているサービス側で照合順序を設定する必要がありましたが、Ver. 3.1.17 より、インストール時に a-blog cms から設定できるようになります。


これにより、サーバーの管理画面からデータベースの照合順序を変更できない場合に phpMyAdmin などから照合順序を変更する必要がなくなります。

CMS-6804 CMSで作成するファイル・ディレクトリのパーミッション設定をconfig.server.phpで設定するように変更

CMSが作成するファイル・ディレクトリのパーミッションをconfig.server.phpで設定できるようになりました。

今までは、サーバーの設定によってファイル・ディレクトリ作成時のパーミッションが決定されていたため、サーバーの設定によってはCMSが作成した、ファイル・ディレクトリに意図しないパーミッションが設定されてしまう場合がありました。

そういった場合でも CMS 側の設定で、作成するファイル・ディレクトリのパーミッションを設定することができます。

デフォルトの指定だと、指定パーミッションとumaskを比較し、論理演算子のANDによって、厳しいほうのパーミッションになるようになっています。

// CMSで作成するディレクトリ・ファイルのパーミッションを設定します
define('CHMOD_DIR', (0775 & ~ umask()));
define('CHMOD_FILE', (0664 & ~ umask()));

例えば、CMSで作成するディレクトリのパーミッションは 775、ファイルのパーミッションは 664 にしたい場合は、config.server.php で以下のようにします。

define('CHMOD_DIR', 0775);
define('CHMOD_FILE', 0664);

CMS-6840 Ajaxによる部分テンプレートアクセスにCSRFトークンによる認証を追加し、許可するtpl指定(allow_tpl_path)を個別指定しなくてもいいように改修 & Ajaxリクエストのセキュリティレベルオプションを用意(ajax_security_level)

htmx というライブラリを a-blog cms でより簡単に利用できるようにすることを目的に、URLコンテキストの tpl 指定の仕様を改善いたしました。

Ajaxによる部分テンプレートアクセスにCSRFトークンによる認証を追加し、許可するtpl指定(allow_tpl_path)を個別指定しなくてもいいように改修

ポストインクルードや htmx など、Ajax による部分テンプレートへのアクセス時に、許可するtplを private/config.system.yaml で指定(allow_tpl_path)する必要がなくなりました。

Ver. 2.11.25 より、URLコンテキストで tpl を指定する場合は private/config.sytem.yaml で指定したい tpl を設定する必要がありました。

allow_tpl_path: [inlcude/search.html, hoge/custom.html]

これは、tpl コンテキストを指定することで、同一コンテンツの複数のページが表示できてしまう問題をtpl に指定可能なパスを設定することで回避するためでしたが、Ver. 3.1.17 より Ajax によるテンプレートへのアクセスに限り、CSRFトークンによる認証でこの問題を回避するように変更されました。

これにより、ポストインクルードや htmx を利用する場合に、forbid_tpl_url_context: off にする、tpl に指定可能なパスを allow_tpl_path に指定するなどの準備が必要でしたが、それがなくてもポストインクルードや htmx を利用することができるようになりました。

htmx の場合は以下のような JavaScript を記述することで、htmx によるリクエストのリクエストヘッダーに CSRFトークンを付与することができます。

  document.addEventListener("htmx:configRequest", function(event) {
      const csrfToken = document.querySelector('meta[name="csrf-token"]').content;
      event.detail.headers['X-CSRF-Token'] = csrfToken;
  });

Ajax でないアクセスで tpl コンテキストを利用する場合は、private/config.syetem.yaml でtpl に指定可能なパスを設定する必要があります。

Ajaxリクエストのセキュリティレベルオプションを用意(ajax_security_level)

互換性のため、Ajaxリクエストのセキュリティレベルは段階別に設定できるようになっています。



レベル 説明
0 チェックを行いません。セキュリティ的に安全でないので基本的には指定しないことを推奨します。
1 Referer 及び HTTPヘッダーによる Ajax 判定をチェックします。
2 Referer 及び HTTPヘッダーによる Ajax 判定に加えて、CSRFトークンをチェックします。

private/config.system.yaml で変更することができるようになっています。

ajax_security_level: 1 # ajaxリクエストのセキュリティレベルを設定します。(0: チェックなし 1: RefererとHttpヘッダーを確認 2: CSRFトークン確認)

新規インストール時は最も厳しいセキュリティレベルである 2 となりますが、アップデート時の場合は互換性のため 1 となっております。

セキュリティレベルが 1 や 0 の場合でも Ajax によるテンプレートアクセスの場合は、private/config.system.yaml での設定は不要です。

ACMS_POST_2GET_Ajax

また、今までは ポストインクルードや htmx を利用するばあいに、ACMS_POST_2GET というモジュールを活用してURLの組み立てとリダイレクトを実装していましたが、CSRFトークンによる認証 を行うためには、新しい、ACMS_POST_2GET_Ajax というモジュールを利用する必要があります。

ACMS_POST_2GET_Ajax モジュールを利用することにより、適切にCSRFトークンによる認証が行われるだけではなく、tpl指定がある場合、tplが削除されることなるURLが組み立てられリダイレクトされます。

例えば ポストインクルードでキーワード検索を実装する場合は以下のようなコードになります。

<form action="" method="post" class="js-post_include" target="#jsChangeContents">
  <input type="text" name="keyword" value="" size="15" />
  <input type="hidden" name="tpl" value="include/searchResultSample.html" />
  <input type="hidden" name="bid" value="%{BID}" />
  <input type="submit" name="ACMS_POST_2GET_Ajax" value="検索" />
</form>
<div id="jsChangeContents">
  <p>この部分が置き換わります。</p>
</div>

ポストインクルードや htmx などで Ajax によるテンプレート取得を行う場合は、今後 ACMS_POST_2GET_Ajax モジュールをご利用ください。

最後に

該当する問題がありましたら、お早めにバージョンアップのご検討をお願いいたします。
また、迅速にご報告いただいたユーザーの皆さま、誠にありがとうございました。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいります。
今後ともどうぞよろしくお願いいたします。

同じタグ付けがされている記事