セキュリティエンジニアへの道1 ~最も単純なHTTPリクエスト・レスポンス~

何がしたいのか

本シリーズでは PHP で Web サイトをあえてシンプルに、脆弱に構築していき、Web セキュリティについて学んで行けたらと思います。

というのも、初心者が最初から安全な Web サイトを意識して作り始めると「エスケープ処理が適切か」だとか「セッションIDの推測が~」とかなんとか言われて結局どこかで手が止まります。

だって人に「これ危険だから!」とか言われても「へー」としか思わないですよね。これじゃあ続かないです。どこかで「へーーー…」と失速していきます。

結論として、冒頭にあるように本シリーズでは最初から脆弱性を作り込まない開発はやりません。逆に最も脆弱なサイトを作り、そこから脆弱性の対処を行うという流れで進めていきます。

なお、HTML と CSS の解説や途中に出てくるツール(Burp)などの説明はほとんど省略するのであしからず。

構成

サーバは CentOS8 のマシンを2台用意し、1台目に Apache を、2台目に MySQL を導入します。なお SELINUX と Firewalld は無効化しておき、IP はそれぞれ 192.168.0.200、210 とします。

Xampp でもいいんですが、実際の環境に近い方が勉強になると思うので形だけは Web サーバと DB サーバを分けます。実際には OS の設定はほぼ手付かずです。

Apache と MySQL の導入方法

MySQL の構築方法については次回説明します。Apache は yum でインストールするだけですが、よくわからない方は以下の記事を参考にしてください。

vsftpd

Web サーバには vsftpd をインストールしておき ftp で繋げられるようにしておきます。

TeraTerm の SCP でコピーでもいいんですが、コンテンツが増えると絶対面倒になるので最初から FTP の環境を作っておきます。

以下のコマンドを実行してください。

yum install -y vsftpd
systemctl start vsftpd
systemctl enable vsftpd

そのあとに「/etc/vsftpd/vsftpd.conf」に「userlist_enable=YES」があることを確認します。デフォルトは YES です。

次に「/etc/vsftpd/user_list」を以下のように修正します。ここに記載されているユーザは接続が拒否されます。

# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
# root
…

次に「/etc/vsftpd/ftpusers」を以下のように修正します。ここに記載されているユーザも接続が拒否されます。

# Users that are not allowed to login via ftp
# root
…

この時点で root で ftp が可能になります。

最シンプルを知る

下準備ができたので、ここで以下のような最シンプルかつ使い物にならない index.html を作成して Apache で公開しました。

<!DOCTYPE html>
<html lang="ja">
	<head>
	<meta charset="UTF-8">
	<title>Yamazon</title>
	<link rel="shortcut icon" href="image/favicon.ico">
	<link rel="stylesheet" href="css/reset.css">
	<link rel="stylesheet" href="css/style.css">
</head>
<body>
	a
</body>
</html>

表示内容はただの a ですが、れっきとした Web ページです。

最後に Burp を使用して最もシンプルな HTTP メッセージを見てみます。

favicon.ico、style.css を見配置(reset.cssは配置済)の場合、以下のように favicon.ico と style.css が404で帰ってきます。

index.html
style.css

上記から HTTP はそれぞれのコンテンツに対して1つ1つ GET を行っていることが分かります。

また、GET の確認において注意しなくてはならないのがキャッシュです。例えば Ctrl+F5 ではなく通常の F5 もしくはブラウザの更新ボタンにより更新を行った場合、index.html が200ではなく304(Not Modified)となります。

ただの更新だと304になる

次回は DB サーバを構築していきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)