1. はじめに
プログラミング学習を進める中で、Web技術の基本的な知識が不足していると感じていました。「なんとなく動いている」という状態から抜け出すため、入門書の内容を自分なりにまとめてみました。
2. 概要
そもそもWebとは何か?
インターネットはもともと研究者間が、論文などの文書をやり取りするために使用していた。
→機器が安価になり誰でも手に入るように、また、共通のプロトコルを採用することで異なるOS間でも情報のやり取りが可能に
→文書の閲覧だけではなく、世界中のコンピューター同士で情報をやり取りできるようになった。
どのように通信するのか?
TCP/IPプロトコルを用いる(Transmission Control Protocol/Internet Protocol)
コンピューター同士の通信方式に関する取り決め。
URLから通信相手を特定し、情報をやり取りする。URLとは住所のようなもの
例)URL(https://www.sample.jp/test/index.html)
https = スキーム。リソースを取得するための方法。httpsは暗号化されたhttp通信を表す。
www.sample.jp = ホスト名。一意の値になっており、通信する相手側を表す。
test/index.html = パス名。指定したリソースの位置を表す。(相手側のどこに該当のファイルがあるか)
URLはそのまま送らず、入力された値をDNSサーバーで機械が読み取れるように変換を行う。変換された情報をもとに通信相手を探す。(DNSサーバーは電話帳みたいなもの。電話番号だけでは情報がわかりづらいので、人間が分かるようにURLが用いられている。)
通信する相手が見つかっても、どのアプリと通信すればいいかわからない→ポート番号を指定することで、どこに通信すればいいかがわかる。(普段はポート番号を指定しなくても、通信方式によってコンピューターが自動で番号を振り分けてくれる。http通信のばあいは80番のポート番号に繋げる。)
情報はパケット通信方式でやり取りされる。(情報をパケットという小包の中に入れて、通信を行う方法)こうすることで、混雑状態でうまく情報が送れなかった場合も、遅れなかったパケットのみ再度送れば、必要な情報を取得することが可能である。
ログイン情報保持の仕組み
ブラウザとサーバーのやり取りはステートレスのため、ブラウザがどのような状態か記憶することができない。
→ブラウザからのリクエストに応じて、サーバーはセッションIDを発行、ブラウザはcokiesでIDを保持することで、ページが切り替わっても、サーバー側は同じユーザーからの通信であることがわかる。(悪意のあるユーザーがセッションIDを盗むだすことで他人になりすますことで個人情報を取られるリスク(セッションハイジャック)があるため、開発者は、セッションIDをハッシュ化させたり、IDの有効期限を短くするなどの対策が必要。)
Webアプリの構造
MVCモデルという枠組みにより処理を分ける(Model、View、Controller)
Model=アプリの処理の部分担当。情報の保持を行い、データベースから情報を取得する。
View=処理結果の画面表示担当。モデルから渡されたデータを成形しブラウザに表示。
Controller=全体の流れを総括。ブラウザから送られた情報をもとに、モデルに情報の受け渡しと、モデルの処理結果をビューに渡す。
プログラミング言語ごとのフレームワークを活用することで、MVCモデルに準拠したアプリを、素早く、高品質で作成することが可能。
セキュリティについて
Webサイトは不特定多数が閲覧するため、開発者は、悪用されないようセキュリティ対策をきちんと行わなければならない。
代表的な攻撃方法
- SQLインジェクション データベースに任意のSQLを実行することで、不正に情報を取得する。
→バリデーションチェックにより、送信内容を制限することで対策。 - クロスサイトスクリプティング 脆弱性のあるサイトにJavascriptのプログラムを実行させ、不正に情報を盗み出す。
→サニタイジングを行い、特殊文字を無害化することで対策。 - クロスサイトリクエストフォージェリ 攻撃者が捏造したフォームに情報を入力することで、掲示板に意図しない書き込みをしてしまう。
→ワンタイムトークンを利用したトークン認証を行い、ユーザー本人であることを確認することで対策。
3. おわりに
- 世界中のコンピューター同士がつながるために、通信方式や規格などさまざまな共通事項を通して技術が作られていることがわかった。
- Webアプリを開発する際は、フレームワークを使えば、MVCモデルに準拠したアプリを作成することができるが、記述内容の意味がわからない部分があったが、アプリ中で行われている処理について理解を深めることができた。
読んだ本