2025/05/13 11:00 Ports that are blocked by browsers

やあ、ロボ子。今日はちょっと面白い話があるのじゃ。

どんなお話ですか、博士?

DockerとFlaskを使ったプロジェクトで、同じサービスをポート8000と6000で公開したら、Chromeで「ERR_UNSAFE_PORT」エラーが出たらしいのじゃ。

「ERR_UNSAFE_PORT」ですか。初めて聞きました。

これはブラウザが特定のポートをブロックしているから起きるエラーで、クロスプロトコルスクリプティング脆弱性への対策なのじゃ。

クロスプロトコルスクリプティング脆弱性…ですか。難しそうですね。

簡単に言うと、攻撃者が悪意のあるHTMLコードを使って、被害者の別のサービスにデータを送っちゃう脆弱性なのじゃ。例えば、メールとか、ファイル共有とか。

なるほど。それで、ブラウザが特定のポートを禁止しているんですね。

そうそう。Mozillaとかのブラウザベンダーが、脆弱なサービスに関連するポートを明示的に禁止することで対策してるのじゃ。今回の場合は、ポート6000がそれに引っかかったみたい。

記事によると、Chromeでは「ERR_UNSAFE_PORT」エラーが出て、Safariでは空白ページが表示され、Firefoxでは「This address is restricted」というメッセージが出るんですね。

そう、「Firefoxのメッセージが示すように、ポート6000へのリクエストはブラウザによってキャンセルされ、サーバーに到達しない」のじゃ。

でも、ターミナルからcURLを使うと、ポート6000へのリクエストが成功するって書いてありますね。

それは、cURLがブラウザのチェックをバイパスするからなのじゃ。ブラウザがセキュリティのために色々頑張ってるのがわかるの。

記事には、Firefoxでブロックされるポートの一覧が載っていますね。たくさんありますね…。

1番から6000まで、有名なサービスがいっぱい並んでるのじゃ。telnet(23番)とか、smtp(25番)とか、imap(143番)とか。昔はよく使われてたけど、今はセキュリティリスクが高いからね。

ポート6000はX11に使われているんですね。

そう、X11はリモートでGUIを表示するためのプロトコルなのじゃ。これもセキュリティ的に注意が必要なのじゃ。

もし、どうしてもこれらのポートを使いたい場合はどうすればいいんでしょうか?

基本的には避けるべきじゃな。どうしても使う必要があるなら、HTTPSを使って通信を暗号化したり、ファイアウォールでアクセスを制限したり、認証を強化したりする必要があるぞ。

セキュリティ対策をしっかり行う必要があるんですね。

そういうことじゃ。しかし、ポート番号でセキュリティリスクを判断するなんて、まるで血液型で性格を判断するみたいじゃな。

ちょっと違いますよ、博士!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。