お知らせ

現在サイトのリニューアル作業中のため、全体的にページの表示が乱れています。

HTTPリクエストヘッダーに意味のない値を入れないで欲しい

投稿日:
技術::プロトコル::HTTP

日頃仕事で開発をしていたり、そこら辺のWebサービスの振る舞いを眺めていると不思議というか、奇妙というか、端的に言うとありえないリクエストを投げているものを見かける。

一例としては次のようなものを見たことがある。

フロントエンドで第三者サービスに問い合わせクライアントIPを取得し、それをバックエンドに送る

これの問題点はまずクライアントのIPを幾らでも捏造できることだ。

クライアントからバックエンドに投げている値など幾らでも偽装できるため、その中にクライアントのIPアドレスを含めるのは何の価値もない。

他にも第三者のサービスを利用しているので、そこが落ちてたり、仕様変更があったりすると使えなくなる。

サーバー間のHTTP通信でクライアントのIPをREMOTE_ADDRヘッダーに入れて送る

具体的にはSSRを利用しているNext.jsのサーバーサイドレンダリング側で、クライアントのIPを取得し、後ろにいるAPサーバーにHTTPで投げるときにREMOTE_ADDRヘッダーに入れて送っていたケースだ。curlで表すと次のような形式だ。

curl -H 'REMOTE_ADDR: <ここにIP>' http://example.com

サーバー側はクライアント側のIPをサーバー側が設定するので、このリクエストには意味がない。トラフィックと実装コードの無駄といえる。

サーバー側が何を基にして設定しているかは実装依存だと思うが、恐らく一般的にはトランスポート層より下ではないだろうか?

あとがき

いわゆるフロントエンドエンジニアや、プログラミングスクール卒などの意識が低いエンジニアらが書いたコードを見ているとこのようなものが散見される印象だが、もう少しちゃんと考えて実装して欲しいと思う。

なんというか、最低限常識とされている部分は理解しておいてほしいなというのはすごく思う。