クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

Webサーバーに余計なことを見せない(堅牢化)

このレッスンのあとで: Webサーバーが隠すべきこと、断るべきことを、言える。

55分のレッスンコマンド4件Web サーバー堅牢化のラボ:弱い nginx の設定を直して curl で確かめる

話しすぎるラーメン店のサイト

町のラーメン店のサイトは、問題なく動いています。でも、裏で使っているソフトの正確なバージョンを、来た人全員に教えています。値段表のフォルダは、中のファイルを全部並べて見せます。設定ファイルの古い控えまで、公開されています。

誰も攻撃していません。ただ、話を控えるように、設定されていなかったのです。

たった1つのルール

注意

触ってよいのは、自分専用のラボのコピーだけです。このラボは、わざと弱く作ったサーバーで、インターネットにはつながっていません。許可のないサーバーを調べると、不正アクセス禁止法に触れる犯罪になることがあります。

このレッスンのゴール

メモ

Webサーバーが隠すべきこと、断るべきことを、言える。

今日のキーワード

ことばいみれい
堅牢化設定を変えて、見せるものと許すことを減らすことです。
ヘッダー返事の先頭にある、ブラウザへの指示の行です。Server: nginx
ディレクトリ一覧フォルダの中のファイルを、全部並べるページです。
TLSブラウザとサイトの通信を、暗号化する仕組みです。
証明書サイトが本物だと示す、署名つきのファイルです。
HSTS安全なアドレスだけを使うよう、ブラウザに伝えるヘッダーです。

学生が入力するセルは、このプレビューでは空白です。

サーバーは話を控える

サーバーが余計なことを話すと、攻撃する人を助けます。バージョンの番号は、どの既知の弱点を試すかを教えます。フォルダの一覧は、公開するつもりのないファイルを見せます。

堅牢化では、要らないものを外します。Server ヘッダーのバージョン、フォルダの一覧、控えや設定のファイル、誰にでも開いている管理画面です。

ラボのサーバーを見る

ラボでは、小さなラーメン店のサイトが nginx で動いています。起動して、次の4つを実行しましょう。読むだけです。

1つ目は状態の行です。2つ目は Server ヘッダーです。3つ目は、守りのヘッダーを1つ数えます。4つ目は、フォルダのページを読みます。

状態の行

コマンド
curl -s -I http://web | head -n 1

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

Server ヘッダー

コマンド
curl -s -I http://web | grep -i "^server"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

X-Frame-Options の数

コマンド
curl -s -I http://web | grep -ci "x-frame-options"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

フォルダのページの見出し

コマンド
curl -s http://web/files/ | grep -o "Index of [a-z/]*"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

例: 4つの答えを読む

Run表示意味
状態の行HTTP/1.1 200 OKサイトは答えている
Server ヘッダーServer: nginx/1.27.5正確なバージョンを全員に教えている
X-Frame-Options0この守りのヘッダーは、まったく送っていない
フォルダのページIndex of /files/ が2行断らずに、フォルダを並べている。1行は題名、1行は見出し

学生が入力するセルは、このプレビューでは空白です。

守りのヘッダーがブラウザを導く

費用がかからず、問題の型をまとめて減らすヘッダーがいくつかあります。X-Content-Type-Options: nosniff は、ブラウザがファイルの種類を推測するのを止めます。X-Frame-Options は、他のサイトがあなたのページを枠に入れるのを止めます。

Content-Security-Policy は、動かせるスクリプトを絞ります。Referrer-Policy は、他のサイトへ渡すアドレスを絞ります。

よくある間違い

注意

「バージョンを隠せば、サーバーは安全になる」と考える人がいます。それは違います。隠せるのは、手がかりの1つだけです。古いままで、弱点が知られているサーバーは、弱いままです。手がかりを隠すと同時に、ソフトを新しく保ち、要らないものを外します。

通信は今の TLS で暗号化する

TLS には版があります。SSL 3、TLS 1.0、TLS 1.1 は古く、もう安全ではありません。許すのは TLS 1.2 と 1.3 だけです。

よい設定には、信頼できて期限内の証明書もあります。ふつうのアドレスは、安全なアドレスへ移します。HSTS を送り、ブラウザに安全なアドレスを覚えさせます。

見せるのは必要なものだけ

サイトに要るファイルだけを出します。控え、ソース管理のフォルダ、設定ファイルは、公開するフォルダの外に置きます。管理画面は、サインインの奥か、ネットワークの制限の奥に置きます。

外に出すものが1つ減れば、守るものも1つ減ります。

このラボとソースについて: Web サーバー堅牢化のラボ:弱い nginx の設定を直して curl で確かめる

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。