『プロになるためのWeb技術入門』の重要な点をまとめる--Lesson7

皆様こんにちは、もしくははじめまして。IDEです。
今日の記事はLesson7についてです。
最後の章では、セキュリティ対策について学びました。
ECサイトなどを開発する上で、最も重要な技術です。しっかりと学んでいきます。
詳細は下記リンクをチェック。

目次

  1. Webアプリケーションが守るべきセキュリティ
  2. 代表的なWebアプリケーションの攻撃手法と対策
  3. 設計・実装によるセキュリティ問題等を防ぐための対策
  4. LESSON7のまとめ
  5. 総まとめ

Webアプリケーションが守るべきセキュリティ

セキュリティについて学ぶ前に、そもそもセキュリティで守るべきものは何なのかについて考えていきます。
主に、以下の3点が挙げられるでしょう。

  • 機密性/第三者への情報流出
  • 完全性/第三者による情報改ざん(運営側に乗っ取る)
  • 可用性/適切な権限者に対する適切な情報の提供(顧客側の乗っ取り)

    HTTP、WWW登場初期は学術関係者など利用者が少なかったため、セキュリティに対してそこまで考慮する必要がありませんでした。
    今では誰でも利用できますがその反面、さまざまな攻撃手法が考え出され、さまざまな危機と隣り合わせです。
    では、どんな攻撃手法があり、どう対策すればよいのかみていきましょう。


    代表的なWebアプリケーションの攻撃手法と対策

    攻撃手法 簡単な説明 防衛方法
    SQLインジェクション フォーム等からSQLを変更して情報の不正取得等を行う
  • バリデーション
  • プリペアード・ステートメントの利用
  • クロスサイトスクリプティング(XSS) 悪意のあるJavaScriptを埋め込むことでセッションハイジャックの踏み台にする サニタイジング
    セッションハイジャック セッションIDを第三者が盗み、利用者になりすます
  • XSS対策
  • SSLの利用
  • セッション・タイムアウト値の変更
  • セッションIDのランダム化
  • クロスサイトリクエストフォージェリ(CSRF) 捏造されたフォームから強制的に情報をサブミットされることで意図しない書き込み等をされる ワンタイムトークンの利用
    強制ブラウズ URLを直接入力して本来表示すべきでない画面を表示させる攻撃
  • JavaScriptを利用してURLの確認や直接入力を不可能にする
  • インデックス表示機能を無効にする
  • ディレクトリトラバーサル リクエスト内の文字列がパスの一部となっているアプリケーションにおいて不正な文字列を入力してファイル等を閲覧すること
  • サニタイジング
  • パラメータをファイル名として使用しない設計にする
  • 今回は簡単な説明と防衛方法の記載のみといたしました。


    設計・実装ミスによるセキュリティ問題等を防ぐための対策

    ここでは、設計・実装ミスにより情報漏洩につながってしまうなどの問題について、その原因と対策を学びます。

    すべき対策 起こりうる事案 対策
    戻るボタン対策 注文画面で戻るボタンを押したことにより注文ボタンを2回押すと、誤って2回注文してしまう
  • ブラウザによるキャッシュの無効化
  • 戻るボタンの無効化
  • ワンタイムトークンの利用
  • ダブルサブミット対策 画面遷移に時間がかかった時、何度もボタンを押したことにより同リクエストを何度も送ってしまう
  • JavaScriptによる対策
  • ワンタイムトークンの利用
  • 私も画面遷移に時間がかかった時、何度もボタンをタップしてしまうときがあります…
    もちろん私も気長に待つ必要があると思いますが(笑)開発者側としても対策をしっかりと講じる必要があると改めて思いました。


    Lesson7のまとめ

    この章ではセキュリティ対策について、原因と対策を学びました。
    開発をしていく上ではどの問題も起こりうる可能性があることをしっかりと念頭に置かねばいけません。
    楽しいアプリケーション開発でも、すぐ隣には危険があるかも知ればい、という認識は必要ではないでしょうか。


    総まとめ

    この1冊を通して、アプリケーションを開発する上で土台となる知識を学んでいきました。
    自分が何も考えずに使っていたフレームワークやメソッドがどのような背景で生まれたか、どのような仕組みで動いているかを改めて認識しました。
    1回でしっかり頭の中に入ったかと言われるとまだあやふやな部分はたくさんあります。
    定期的に復習することで基礎をしっかりと固め、その上でアプリケーション開発していけば、自分の開発したものをより詳細に知り、皆様にお届けできるのではないか、と感じました。
    最後までお付き合いいただいた方、ありがとうございました。
    まだ学びたい技術や読めていない技術書がたくさんあります。
    その都度アウトプットしていくので、引き続きお付き合いいただけますと幸いです。