SWELL 不具合|ユーザープロフィール更新が403になり保存できない
SWELLを使っているサイトのユーザープロフィールを編集しようと思った時に、403エラーになってしまいました。
以前までは特に問題なく編集できていたのですが、同一サーバー内にあるSWELLを使ったサイトは一律、同じ現象になってしまいました。
同じサーバーにあるCocoonを使ったサイトではプロフィール編集は問題なく行えました。
プロフィールページの保存が403になるのは、明らかにSWELLテーマ固有の問題のようです。
403になる原因はModSecurity
私は、cPanelのサーバーを利用していますので、ModSecurityが標準でONになっています。
プロフィールページを保存する時にModSecurityがブロックして403になったようです。
この問題はよく知られており、基本的には、ModSecurityをOFFにすれば問題は無くなります。
ModSecurityが有効になっているサーバーは?
ModSecurityは、cPanelには標準で装備されています。
cPanelを使っているサーバーであれば、ModSecurityが有効になっていると思います。
ModSecurityはcPanelの機能ではないので、他のサーバーでも有効になっていることがあります。
- mixhost
- カラフルボックス
- jetboy
- ラッコサーバー
- CORESERVER
なぜSWELLのプロフィールページはModSecurityに引っかかる?
SWELLのフォーラムに同じようにプロフィールページの保存時に403になるという投稿があります。
先日 SWELL を導入したのですが、管理画面の「ユーザー」→「プロフィール」からプロフィールを更新しようとすると、403 エラーが発生し更新できません。
標準テーマの Twenty Twenty-Three では正常に更新できるため、SWELL の独自設定が何か悪さをしていると考えられます。
なお、この件について Google 検索してみると「WAF が悪さをしている」と出てきますが、CORESERVER には WAF がないため、WAF が原因ではありません。(カスタマイザーも正常に保存できています)
wp-admin/profile.php、wp-admin/user-edit.php のパーミッションも確認しましたが、644 で問題ないかと思われます。
https://users.swell-theme.com/forum/swell-bugs/%E3%83%97%E3%83%AD%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%81%AE%E6%9B%B4%E6%96%B0%E3%81%A7403%E3%81%8C%E5%87%BA%E3%81%A6%E6%9B%B4%E6%96%B0%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84/
ModSecurityをOFFにしてこの方は問題を解決したようです。
その投稿に興味深いログがあったので引用します。
ModSecurityのルールが表示されていました。この中の何かにSWELLのプロフィールページの記述が引っかかるのでしょう。
[Fri Aug 11 00:34:38.007648 2023] [error] [client 121.80.63.31] ModSecurity: Access denied with code 403, [Rule: 'REQUEST_COOKIES|!REQUEST_COOKIES:/__utm/|REQUEST_COOKIES_NAMES|ARGS_NAMES|ARGS|!ARGS:_xfRequestUri|!ARGS:/body/|!ARGS:/content/|!ARGS:desc|!ARGS:/description/|!ARGS:/message/|!ARGS:Post|!ARGS:text|!REQUEST_COOKIES:/__utm/|!REQUEST_COOKIES:/_pk_ref/|!ARGS:/query|!ARGS:keyword|!ARGS:/acf_fields/|!ARGS:/title|!ARGS:full_story|!ARGS:actions|!ARGS:wpTextbox1|!ARGS:detalii|!ARGS:originals|!ARGS:/data/|!ARGS:/url/|!ARGS:experience|!ARGS:/input_/|!ARGS:/textarea/|!ARGS:/wpforms\[fields\]/|!ARGS:/comment/|!ARGS:form|!ARGS:/page_sections/|!ARGS:snippet' '@rx (?i:\b(?:(?:m(?:s(?:ys(?:ac(?:cess(?:objects|storage|xml)|es)|(?:relationship|object|querie)s|modules2?)|db)|aster\.\.sysdatabases|ysql\.db)|pg_(?:catalog|toast)|information_schema|tempdb)\b|s(?:(?:ys(?:\.database_name|aux)|qlite(?:_temp)?_master)\b|chema(?:_name\b|\W*\())|d(?:atabas|b_nam)e\W*\())'] [id "77350224"] [msg "IM360 WAF: Common DB Name in Request||MVN:schema_name||MV:schema_name||T:LITESPEED||"] [severity "CRITICAL"] [severity "CRITICAL"] [tag "service_i360"] [hostname "example.com"] [uri "/wp-admin/profile.php"], referer: https://example.com/wp-admin/profile.php
SWELLのテーマが修正される可能性は低い
profile.phpなどの更新でModSecurityが403を返すのはテーマの問題です。おそらく記述の仕方でModSecurityのルールを避ける方法があるはずです。
しかし、SWELLの制作者はこの問題に直面していないので、WAFのOFFで対応するというのが一般的な回答になっています。
まとめ:編集時のみModSecurityをOFFにするのが正しい
ModSecurityを完全にOFFにしてしまうのは危険な運用です。プロフィールページのみに問題があるのであればその編集の時だけModSecurityをOFFにし、編集が終わったらONに戻す方がリスクは低いでしょう。
cPanelであれば、一括でModSecurityをON/OFFに切り替えられるので、それを使うのが一番ストレスが無いでしょう。
コメント