Discourse サイトで検索を行う際、/search?q=my search に通常の GET リクエストを送信すれば問題なく動作します。しかし、検索ボックスを使用して XHR GET リクエストで検索を送信すると、406 ステータスが返されます。
その後、Postman でさらにテストを行ったところ、X-Requested-With: XMLHttpRequest ヘッダーをリクエストに追加するだけで動作しなくなることがわかりました。このヘッダーを削除すれば、再び正常に動作します。サーバーは Azure Front Door の背後にあり、Front Door をバイパスしてサーバーに直接アクセスした場合はこの問題が発生しません。nginx または検索機能がこのヘッダーに基づいて何か特別な処理を行っているのでしょうか?リバースプロキシの背後にあることが影響している可能性はありますか?解決策についてご存知でしょうか?
Falco
(Falco)
2020 年 4 月 9 日午後 4:15
2
リバースプロキシは、クライアントアプリが設定するすべてのヘッダーを絶対に破棄してはいけません。これにより、明らかなバグだけでなく、手遅れになるまで決して発見できないような静かなバグも発生する可能性があります。
他の XHR リクエストは正常に動作しているため、ヘッダーが削除されていないと推測します。Discourse において、このリクエストだけが何らかの理由で他と異なっているようです。
いいえ、フロントドアの裏にいないからです。問題はプロキシを経由していることが原因ですが、他の XHR リクエストは正常に動作しているため、なぜそうなるのか分かりません。これは、検索へのリクエストが Discourse によって他の XHR リクエストとは異なって処理されている可能性を示唆しています。
Falco
(Falco)
2020 年 4 月 9 日午後 4:37
6
Meta は AWS ALB リバースプロキシの背後で動作しており、この問題が発生していません。
Try は HAProxy リバースプロキシの背後で動作しており、この問題が発生していません。
ほとんどのセルフホストインスタンスは内部の nginx リバースプロキシのみを備えており、この問題も発生していません。
このため、Azure Front Door が疑われます。Azure の製品が 奇妙な破損した動作 を示すのは、これが初めてではありません。
また、他の WAF 製品が Discourse を破損させる経験もあるため、それらはサポートされていません。
This is a bad idea and it is not recommended. The benefit of this type of thing for a JavaScript app is extremely limited and it adds significant complexity to your hosting setup.
I think the desire for some magic device that auto mitigates issues is somewhat misguided in the Discourse setup. We have a bounty program, we patch issues in Discourse within hours of when they are reported. Sites run tests-passed by default which in today’s case contains commits from today.
Sure if you are running software that was exploited years ago and you have no freedom to upgrade cause … reasons… a WAF makes sense cause it could save you. But in the case of Discourse I think it is at be…
WAF機能は使用していません。ヘッダーの削除など、他の要因がないか確認してみます。検索リクエストのみが影響を受けるのは、少し不自然に思えます。
Falco
(Falco)
2020 年 4 月 9 日午後 4:43
8
先月デバッグしていた別の WAF プロダクトも、定型返信の機能や下書きの保存機能を壊していました。WAF があまり頻繁に使われない機能を壊した場合、すべての非互換性を見つけるのに時間がかかることがあります。
さらにテストを行ったところ、FD が少なくともこの HTTP ヘッダーを誤って渡しているようです。修正を依頼するチケットを提出しました。検索がなぜこのヘッダーを気にするのかは依然として不明ですが、FD のバグを修正したほうが良いと思います。
一般的に、複雑な構成を避けることをお勧めします。どうしても書き換え不可能な要件があり、それが必要になる場合を除きます。そのような稀なケースでは、その必要な複雑さを管理するための専門家への予算も確保されていることを願っています。