92409
**やりたいこと**  
開発環境 MAC OS + docker 上のウェブサービスで配信される JS で  
リファラー制限のある web API を使うシステムをブラウザから動くようにしたいです

OS やセキュリティソフトのが何してるかがブラックボックスすぎて  
/etc/hosts を書き換える方針では以上進展しなさそうなので

localhost という名前であれば localhost につながるので  
localhost:80 にプロキシサーバーを立てて  
その中でヘッダのリファラを無理やりかきかえてテストしようと思っているのですが

ヘッダをいじる程度の簡易ウェブサーバーをたてるための  
python /ruby / node あたりのワンライナーや  
手軽に扱えるようなコマンドやライブラリってないでしょうか？

TCP のエコーサーバーみたいなのは学生の時課題でかいたことがあるので  
１から自作やれなくはないと思うのですが HTTP の解釈とかを自前でかかないといけないので  
そこをやってくれるライブラリがあるとうれしいです

ちなみにプロキシサーバーを別にたてるのではなく  
chrome の devtool 内で実行できるようなもので  
ブラウザが を解釈して取得に行く際のヘッダを変更するようなことってさすがにできないですよね？  
javascript 内にかかれた ajax 通信とかなら無理やりメソッドの中身を上書きしてヘッダを書き換えるとかもできそうなんですが

**試したこと（未解決）**

ブラウザのURLに本番環境と同じドメイン名をいれて開発環境につながるようにすればいいと思ったので

/etc/hosts に

```

    127.0.0.1 test.local
    
```

と書いて chrome に  
`http://test.local:3000`  
とうちこんで表示させようとしてもDNSエラーになります

```

    Trend Micro Web Security as a Service
    DNSエラー
    503 サービス利用不可
    
    イベント詳細:
    test.local サーバの名前解決に失敗しました
    
```

`http://localhost:3000`  
だと docker 上で動いてるウェブアプリのページが表示されます

/etc/hosts の設定ってブラウザ上の DNS 名前解決には関与できないんでしょうか？

* * *

もっと根本的に chrome の拡張機能とか開発ツール等で  
リファラーを強制的に上書きするような方法ってないでしょうか

* * *

追記：

エラーをみて気付いたんですがセキュリティプロキシが入ってるみたいです  
これが問題なんでしょうか  
だとしても etc/hosts の解決ってプロキシ設定より優先されると思ってるんですが

試しに wifi 切断してブラウザアクセスすると  
localhost では変わらずアクセスできましたが  
test.local だと接続エラーになります

```

    インターネットに接続されていません
    次をお試しください
    
    ネットワーク ケーブル、モデム、ルーターを確認する
    Wi-Fi に再度接続する
    ERR_INTERNET_DISCONNECTED
    
```

* * *

追記：

一時うまくいったと思ったんですが  
/etc/hosts そのまま残してるにもかかわらず  
今日アクセスしたらまた DNS エラーになってしまいました

test.local だけでなく sample.test という名前のレコードも残してあるんですが  
その名前でアクセスしても DNS エラーになってしまいます

* * *

追記：

セキュリティチームに確認したんですが .local で終わるドメインはプロキシを通さない設定にはじめからしてくれていたようで

Mac の システム環境設定 > ネットワーク > wifi タブ詳細 > プロキシ  
の項目でプロキシ設定を使用しないホストとドメインの項目

```

    *.local　
    
```

というのが入っていて

Chrome の システム > パソコンのプロキシ設定を開く でも同じものが参照されています

ポートも影響してる可能性があるので念の為 80 番ポートで docker コンテナの 3000 につながるように docker-compose
を編集してみたのですがやはり

http://localhost  
にアクセスすると docker 上のウェブアプリにつながるのに  
<http://test.local>  
にアクセスするとトレンドマイクロのウェブプロキシのDNSエラー画面になってしまいます

他に /etc/hosts をみにいくかゲートウェイ上のDNSに問合わせるかをきめてる部分があるのでしょうか
CC BY-SA 4.0
2022-11-22T04:17:08.510
92368
2022-12-06T05:44:24.213
2022-12-06T05:33:11.593
question
macos dns proxy
リファラー制限のある外部 web API を開発環境から使いたい
回答ではありませんが参考までに。

> etc/hosts の解決ってプロキシ設定より優先されると思ってるんですが

いいえそうとは限りません。名前解決も含めてプロキシに任せるのが一般的です。使用するプロキシを決定する[プロキシー自動設定ファイル（PAC）](https://developer.mozilla.org/ja/docs/Web/HTTP/Proxy_servers_and_tunneling/Proxy_Auto-
Configuration_PAC_file)でも

  * `isResolvable()`  
名前解決可能か判断する

  * `dnsDomainIs()`  
名前解決を行わずホスト名だけで判断する

  * `dnsResolve()`  
名前解決を行う

  * `isInNet()`  
名前解決を行いIPアドレスで判断する

というように、PACファイル含めブラウザーは名前解決できない環境でも動作するように設計されています。
CC BY-SA 4.0
2022-11-24T10:35:57.710
92409
2022-11-24T10:35:57.710
4236
92368
answer
「リファラー制限のある web API」が具体的にどのようなものか分かりませんが、事前に許可する HTTP リファラー等を設定するのであれば、
**開発環境の情報 (IP アドレスやホスト名) を登録して許可する** のが正攻法じゃないでしょうか。

もしくは、リスクは許容した上で "localhost" 等での一時的な登録をする等

[Google Maps APIをローカル開発環境で使用するときの制限設定方法](https://webrandum.net/google-maps-
api-local-restriction/)

> #### HTTP リファラーに「localhost」入力はしない
>
> サーバーにアップする場合は「HTTP
> リファラー」でURLを入力すれば、そのURL以下でしか使用できなくなりますが、ローカル開発環境の場合は特定のURLがないのでそれが使えません。
>
>
> 一応URLに「localhost:xxxx」などlocalhostを入力しても使えますが、それだと関係ない人も同じようにローカル開発環境を作れば使用できてしまいます。
>
> IPアドレスで制限をかけた方が安心・安全です。

リファラーの偽装で解決しようとしていますが、この方法は裏を返せば本番環境に対して (悪意ある)
第三者が同じように偽装して不正に使用するかもしれない可能性も考えた方がよさそうです。
CC BY-SA 4.0
2022-12-06T05:44:24.213
92599
2022-12-06T05:44:24.213
3060
92368
answer