——————————————-
WordPress のバージョン:6.9.7
Welcart のバージョン:2.11.26(→ 2.11.35に上げたのち、2.12.3に上げたい)
PHP のバージョン:8.2
Welcart専用の拡張プラグインとバージョン:-
ご利用の親テーマとバージョン :-
ご利用の子テーマとバージョン :-
利用している決済モジュール:-
症状を確認したブラウザ:-
サーバー【重要】:-
——————————————–
※スパム判定されてしまったので再送いたします
いつもお世話になっております。AWS の ALB 配下(nginx / KUSANAGI)で Welcart を運用しております。2.12.3(2.11.35) のコードを確認したうえでの要望です。
RateLimiter(会員ログイン試行制限)は、現在以下にJSONファイルを書き出す実装になっています。
– wp-content/uploads/usces_logs/member_login_failed.log
– wp-content/uploads/usces_logs/ip_addresses_blocked.log
この方式について2点の懸念があります。
1. Webサーバが直接配信する領域に置かれている
uploads は通常、Webから直接アクセスできる領域です。initLogsFolder() は
if ( ! is_dir( $this->folder_log_path ) ) {
mkdir( $this->folder_log_path, 0775 );
}
とディレクトリを作成するのみで、.htaccess や index.php を設置しません。そのため URL を直接指定されると、ブロック中のIP一覧や失敗履歴が取得できてしまう可能性があります。nginx 環境では .htaccess が機能しないため、仮に設置いただいても回避手段になりません。セキュリティ機能のログが外部から読める状態は避けたいところです。
2. 排他制御がない
getLoginFailedData() で読み込み → 加工 → file_put_contents() で全体を書き戻す構造で、ファイルロックが行われていません。ログイン試行が集中する場面(=まさにこの機能が働くべき場面)で記録の消失や破損が起こり得ます。
専用テーブルの追加、あるいは wp_options / transient への保存に変更していただければ、上記2点がいずれも解消されます。データ量も「監視期間内の失敗回数」と「ブロック中IP」のみで、DB保存に適した規模かと思われます。
先にお送りした内容、
【要望】ロードバランサー配下での送信元IP取得について
の件とあわせて、何卒ご検討のほどよろしくお願いいたします。