- このトピックには18件の返信、3人の参加者があり、最後に
mihashinoriyukiにより2週、 5日前に更新されました。
-
投稿者投稿
-
2025年4月7日 11:54 AM #144737
【お使いの Snow Monkey のバージョン】28.0.8
【お使いの Snow Monkey Blocks のバージョン】 23.1.3
【お使いの Snow Monkey Editor のバージョン】10.2.0
【お使いの PHP のバージョン】8.3.10
【お使いのブラウザ】
【当該サイトのURL】(管理者により削除)### 発生している問題
いつも大変お世話になっております。
これまで問題なく使用できていたのですが、Snow Monkey Forms の確認画面で「無効なアクセスです。」と表示されるようになりました。
キャッシュの削除や、cookieをオフにして試してみたのですが、解決しませんでした。
考えられる原因として何がありますでしょうか?ご多忙の中、大変恐縮ではございますが、ご教授いただけますと幸いです。
よろしくお願いいたします。### 試したこと
♥ 0Who liked: No user2025年4月7日 12:07 PM #144738ぱっとみた感じではページキャッシュの問題ではなさそうなので、とりあえずは地道に検証するしか無い気がします。無効なアクセスかどうかの処理をしている部分にログ出力を仕込んで、どのような値で処理が実行されているかを確認してみてください。
下記の変更を入れてからフォームの送信を実行することで、サーバーのエラーログにログが記録されます。
plugins/snow-monkey-forms/App/Model/Csrf.php
のpublic static function validate( $posted_token ) { if ( ! $posted_token ) { return false; } if ( ! preg_match( '|^[a-z0-9]+$|', $posted_token ) ) { return false; } $cookie_token = static::saved_token(); return ! is_null( $cookie_token ) && ! is_null( $posted_token ) && hash_equals( $cookie_token, $posted_token ); }
を
public static function validate( $posted_token ) { error_log( "validate:\n" ); error_log( $posted_token . "\n" ); if ( ! $posted_token ) { return false; } if ( ! preg_match( '|^[a-z0-9]+$|', $posted_token ) ) { return false; } $cookie_token = static::saved_token(); error_log( $cookie_token . "\n" ); return ! is_null( $cookie_token ) && ! is_null( $posted_token ) && hash_equals( $cookie_token, $posted_token ); }
に変更。
public static function validate_referer() { // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $referer = isset( $_SERVER['HTTP_REFERER'] ) ? wp_unslash( $_SERVER['HTTP_REFERER'] ) : false; // phpcs:enable $homeurl = untrailingslashit( home_url( '/' ) ); return 0 === strpos( $referer, $homeurl ); }
を
public static function validate_referer() { error_log( "validate_referer:\n" ); // phpcs:disable WordPress.Security.ValidatedSanitizedInput.InputNotSanitized $referer = isset( $_SERVER['HTTP_REFERER'] ) ? wp_unslash( $_SERVER['HTTP_REFERER'] ) : false; error_log( $referer . "\n" ); // phpcs:enable $homeurl = untrailingslashit( home_url( '/' ) ); error_log( $homeurl . "\n" ); return 0 === strpos( $referer, $homeurl ); }
に変更。
—
あ、あと、Snow Monkey Forms のバージョンもお願いします!
♥ 0Who liked: No user2025年4月7日 2:50 PM #144748ご返信ありがとうございます!
変更を入れてフォームの送信を実行したのですが、サーバーのエラーログというのはどちらで確認できますでしょうか?
契約しているサーバーはwpX Speedで、エラーログという項目には[Mon Apr 07 14:37:02.656799 2025] [fcgid:warn] [pid 19657] [client 112.69.162.153:45142] mod_fcgid: stderr: validate_referer:, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:02.656829 2025] [fcgid:warn] [pid 19657] [client 112.69.162.153:45142] mod_fcgid: stderr: https://xxxxx/contact/, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:02.656832 2025] [fcgid:warn] [pid 19657] [client 112.69.162.153:45142] mod_fcgid: stderr: https://xxxxx, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:33.990242 2025] [fcgid:warn] [pid 4155] [client 112.69.162.153:45564] mod_fcgid: stderr: validate_referer:, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:33.990325 2025] [fcgid:warn] [pid 4155] [client 112.69.162.153:45564] mod_fcgid: stderr: https://xxxxx/contact/, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:33.990332 2025] [fcgid:warn] [pid 4155] [client 112.69.162.153:45564] mod_fcgid: stderr: https://xxxxx, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:33.990337 2025] [fcgid:warn] [pid 4155] [client 112.69.162.153:45564] mod_fcgid: stderr: validate:, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:33.990342 2025] [fcgid:warn] [pid 4155] [client 112.69.162.153:45564] mod_fcgid: stderr: 3e4bf70d0fb3a369459d9fc10870ed9b42c68c55c722ee84357086aee2563215, referer: https://xxxxx/contact/ [Mon Apr 07 14:37:33.990348 2025] [fcgid:warn] [pid 4155] [client 112.69.162.153:45564] mod_fcgid: stderr: 94bbffa23378f7774180aba9bbda4d257616fc858dc9e5e9f6a2e8c6bcd5f523, referer: https://xxxxx/contact/
と記載があります。こちらのことでよろしいのでしょうか?
Snow Monkey Forms のバージョンは10.0.2になります!ご確認のほど、よろしくお願いいたします。
♥ 0Who liked: No user2025年4月7日 6:58 PM #144751最後の2行の文字列は送信されたトークンと保存されているトークンで、ここが一致しないと不正なアクセスと判定されてしまいます。
wpX Speed だと、サーバーキャッシュの設定があるようですが、これは有効になっていますかね?もし有効になっている場合、詳しい仕様がわからないので何ともなのですが、例えば PHP の出力もキャッシュするような仕様の場合はエラーになる可能性があるかもしれません。なので有効にしている場合は無効にして確認をお願いします。
♥ 0Who liked: No user2025年4月8日 11:28 AM #1447672025年4月8日 12:58 PM #144770自分の環境でもこの方法で解決しました!
add_filter( 'snow_monkey_form/setting/session-name', function () { return '_snow_monkey_form_session_' . md5( __FILE__ . get_current_blog_id() ); } );
♥ 0Who liked: No user2025年4月8日 1:22 PM #144775@mihashinoriyuki さん
Snow Monkey Forms にsnow_monkey_form/setting/session-name
というフィルターフックってありましたっけ?
なぜこのコードで解決できるのか興味があるので良かったら教えてください!♥ 0Who liked: No user2025年4月8日 1:43 PM #144777ご返信ありがとうございます!
詳しくは自分でもまだ完全には理解できていないのですが、海外の事例を参考にしてみたところ、このフィルターを使うとセッション名が安定して「無効なアクセス」のエラーが出なくなりました。もしかしたらプラグインやPHPのセッションまわりで、ランダムにズレが起きていたのかな?と思っています。
自分の知識不足で説明があやふやになってしまって恐縮ですが、結果として安定したのでご報告させていただきました!
♥ 0Who liked: No user2025年4月8日 1:54 PM #144781なるほどです。
snow_monkey_form/setting/session-name
というフィルターフックを入れたかな?というのと、Snow Monkey Forms では PHP セッションは使っていないと思うので、気になっての質問でした。でも実際に効果があったのであれば何かあるのかもしれませんね。ありがとうございました!@rie0310 さん
解決済みということで、トピックのクローズをお願いします!♥ 0Who liked: No user2025年4月8日 2:14 PM #144785先ほどはアドバイスありがとうございました!
session-name のフィルターを追加してから、最初はうまく動作していたのですが、
何度か試しているうちに、また「無効なアクセスです」というエラーが出るようになってしまいました。現在は、
「確認画面あり」「なし」両方とも
フィルターを入れていても
フォームを作り直しても
送信できたりできなかったり…といった不安定な状態です。
他の Snow Monkey Forms を使っているサイト(同じさくらサーバー)では問題なく動作しているので、
原因が自分ではもう特定できず、もし可能でしたら開発者の方で詳しく調べていただけないかと思っています。素人ながら、できる範囲で設定や検証はしてみたつもりです。
何かログを送るなどお手伝いできることがあれば、喜んで協力します!よろしくお願いいたします。
♥ 0Who liked: No user2025年4月8日 2:43 PM #144790となるとやはりフィルターは効いていなくて、偶然キャッシュの更新のタイミングだったとか、そういう感じがしますね。
基本的には
で書いたように、コードを改変してロガーを仕込み、ログを確認して、最後の2行が一致していなければページキャッシュが怪しい(サーバーのキャッシュ機能 or キャッシュ系プラグイン)という感じになるかなと思います。
♥ 0Who liked: No user2025年4月8日 3:04 PM #144797こんにちは。以前ご相談させていただいた「フォーム送信時に“無効なアクセスです”と出る件」について、
さくらサーバーのエラーログを見てみたところ、以下のような記録が出ていました。forbidden by Options directive
[Tue Apr 08 14:38:38.284418 2025] [php:notice] … validate_referer:
referer: https://ohaka.butuji384.com/muyu-no-mori/reservation/
…何度か出ていて「validate_referer」とか「forbidden」などと書かれていたのですが、
これはフォームの送信がブロックされてしまっている原因なのかなと思いまして…。専門的なことが詳しく分からず恐縮ですが、
このログが「無効なアクセス」と表示される原因になっている可能性はあるでしょうか?もしお時間があれば、考えられることなど教えていただけるととても助かります。
どうぞよろしくお願いいたします!
♥ 0Who liked: No user2025年4月8日 3:24 PM #144799forbidden by Options directive
はわかりませんが、validate_referer:〜
は今回追加していただいたロガーですね。ちょっとこれだけでは何もわからないので、下記のリプライのように、コードを改変して記録されるようになったログをすべて共有してください。♥ 0Who liked: No user2025年4月8日 3:52 PM #144804ご返信ありがとうございます。
ご指摘の通り、validate_referer: の出力は、以前アドバイスいただいたロガーを使わせていただいて記録されたものです。素人ながらではありますが、フォーム送信時の挙動を見ながらログを確認してみました。
ご指示いただいた通り、記録されたログ全文を画像で添付して共有させていただきます。
お忙しいところ恐縮ですが、何か原因の手がかりなどあればご教示いただけますと幸いです。
引き続きどうぞよろしくお願いいたします。♥ 0Who liked: No user2025年4月8日 4:17 PM #144806ありがとうございます。やはり最後の2行(サーバーに保存されているトークンとフォームから送信されたトークン)の値が異なっていますね。これだと不正なアクセス扱いになります。
キャッシュ系のプラグインを使ったり、サーバー側で PHP やページをキャッシュする機能(あるいは何らかの高速化機能)を有効化していませんかね?
♥ 0Who liked: No user -
投稿者投稿
- トピック「Snow Monkey Forms の確認画面で「無効なアクセスです。」と表示されます」には新しい返信をつけることはできません。