Cloudflare
Cloudflareは、訪問者にセキュリティチェックを通過させてからサイトへのアクセスを許可し、サイトを保護します。ブラウザーはこのチェックをバックグラウンドで通過します。WCPOSアプリはブラウザーではなく、店舗のREST APIにアクセスします。Cloudflareがデータの代わりにセキュリティチェックのページを返すと、アプリは接続できません。
このページでは、問題の見分け方と、アプリを通過させるようCloudflareに設定する方法を説明します。ここでの手順はすべて、店舗のオーナー、またはサイトのCloudflareアカウントを管理している方を対象としています。
問題の見分け方
- 接続画面に、エラーコード HOST121 とともに 「この店舗のホスティング設定によってアプリがブロックされています」 と表示されます。
- 接続中または同期中に、デスクトップアプリで 「your-store.com のセキュリティチェック」 という小さなウィンドウが開きます。
- 以前のバージョンでは、明らかにオンラインのサイトでも 「サイトはWordPressサイトではないようです」 または 「サイトからの応答に時間がかかりすぎています」 と表示されていました。
- クラウド印刷が停止し、「セキュリティサービスがWCPOS Cloud Printをブロックしています」というメッセージが表示されます。
確認するには、ターミナルを開いて次のコマンドを実行します。
curl -sI https://your-store.com/wp-json/
ブロックされている店舗では、403 ステータスと cf-mitigated: challenge ヘッダーが返されます。正常な店舗では、200 と content-type: application/json が返されます。404 が返される場合、サイトではパーマリンクが有効になっていません。同じ確認を 'https://your-store.com/?rest_route=/' に対して実行してください。WordPressがサブフォルダーにある場合は、https://example.com/shop/wp-json/ のようにサブフォルダーのパスを含めます。
最近のバージョンのデスクトップアプリは、可能な場合、小さなウィンドウでCloudflareのチェックを完了します。これにより業務を続けられますが、Cloudflareが発行する許可は有効期限(デフォルトでは30分)が切れると、再びチェックが表示されます。このウィンドウは一時しのぎとして扱い、以下の修正を適用してください。
原因となっているCloudflare機能
修正方法は、アプリにチェックを要求している機能によって異なります。サイトのCloudflareダッシュボードで、次の項目を確認してください。Cloudflareではメニューが変更されているため、以前の場所を括弧内に記載しています。
| 機能 | 場所 | APIを除外できるか |
|---|---|---|
| ボットファイトモード(無料プラン) | セキュリティ → 設定 → ボットトラフィック(以前のダッシュボード:セキュリティ → ボット) | いいえ。 Cloudflareではスキップルールや許可ルールで回避できません。無効にするか、Proにアップグレードして、以下のスキップルールで除外できるスーパー・ボットファイトモードを使用してください。 |
| アンダーアタックモード | サイトの概要にある「アンダーアタックモード」切り替え、またはセキュリティ → 設定 | はい。以下のスキップルールでセキュリティレベルをスキップできます。アンダーアタックモードによって引き上げられるのはセキュリティレベルです。または、攻撃が収まった後にアンダーアタックモードを無効にしてください。 |
| スーパー・ボットファイトモード(Pro以上) | セキュリティ → 設定 → ボットトラフィック(以前のダッシュボード:セキュリティ → ボット) | はい。以下のスキップルールで除外できます。 |
| マネージドチャレンジ に設定された WAFのカスタムルールまたはマネージドルール | セキュリティ → セキュリティルール(以前のダッシュボード:セキュリティ → WAF) | はい。以下のスキップルールを、チェックを要求するカスタムルールより上に配置して除外できます。マネージドルールは常にカスタムルールの後に実行されるため、配置順は関係ありません。 |
公式のCloudflare WordPressプラグインでは、アンダーアタックモードの切り替えやWAFの有効化ができますが、スキップルールは作成できません。スキップルールはCloudflareダッシュボードで設定します。
REST API用のスキップルールを追加する
これはボットファイトモード以外のすべてのケースに有効な修正です。店舗のREST APIへのリクエストに対して、Cloudflareがチェックを要求しないようにします。これらのエンドポイントは引き続きWordPress独自のログイン認証と権限チェックで保護されます。
-
Cloudflareダッシュボードでサイトを開き、セキュリティ → セキュリティルール(以前のダッシュボード:セキュリティ → WAF → カスタムルール)に移動して、ルールを作成 → カスタムルール を選択します。
-
ルール名を
WCPOS REST APIにします。 -
受信リクエストが一致する場合 で 式を編集 を選択し、次を貼り付けます。
(starts_with(http.request.uri.path, "/wp-json/")) or (http.request.uri.path eq "/" and (starts_with(http.request.uri.query, "rest_route=") or http.request.uri.query contains "&rest_route="))後半部分はWordPressのフォールバックアドレス
/?rest_route=/...に一致し、サイトのルートに限って適用されます。そのため、別のページのクエリに含まれるrest_route=文字列によって、そのページの保護が無効になることはありません。WordPressがhttps://example.com/shopのようなサブフォルダーにある場合は、/wp-json/と/の代わりに/shop/wp-json/と/shop/を使用してください。 -
次に実行するアクション で スキップ を選択します。
-
残りのすべてのカスタムルール にチェックを入れます。スキップするコンポーネントの一覧で、スーパー・ボットファイトモードのすべてのルール と セキュリティレベル にチェックを入れます。マネージドルールがチェックを要求している場合に限り、すべてのマネージドルール にもチェックを入れ、「(以前のバージョン)」と表示された項目には触れないでください。
-
ルールをデプロイします。チェックを要求またはブロックする他のカスタムルールがある場合は、このルールがそれらより上に配置されていることを確認してください。
もう一度 curl の確認を実行します。cf-mitigated ヘッダーがなくなり、レスポンスがJSONになっているはずです。
スキップルールを追加しても curl の確認でチェックが表示され、ボットファイトモード が有効になっている場合は、ボットファイトモードが原因です。無料プランでは、セキュリティ → 設定 → ボットトラフィックで無効にする以外に修正方法はありません。Cloudflareの公式ドキュメントでも、ルールで回避できないことが説明されています。ボットファイトモードがすでに無効の場合は、まだブロックされる場合を参照してください。
キャッシュ
CloudflareがREST APIのレスポンスをキャッシュすると、アプリに古い商品や注文が表示されることもあります。上記のスキップルールではキャッシュ設定は変わりません。HTMLページのキャッシュまたは自動プラットフォーム最適化にCloudflareを使用している場合は、同じ式に対して キャッシュをバイパス に設定する キャッシュルール を追加してください。
まだブロックされる場合
スキップルールが下書き保存ではなくデプロイ済みであること、またIPアクセスルールによってレジのネットワークがブロックされていないことを確認してください。サイトの前段にある他のサービスもCloudflareと同様に動作します。セキュリティプラグインについてはプラグインの競合を、GoDaddyやWP Engineなどについてはホスティングに関する注意事項を参照してください。