開始108日目〜超初心者、文系、30代のスタート〜 学んだこと追記3
情報セキュリティとは、Webサービスにおいてのセキュリティ(安全保障)です。情報セキュリティにおける理想は、「不正なアクセスや情報の漏洩を防ぎつつ、権限がある人は便利に利用できる」状態を維持することです。これを分解し言い換え、「機密性」「完全性」「可用性」の3つの要素を維持することを目標にします。
・機密性 権限を持たない人が情報資産を見たり使用できないようにすること
・完全性 権限を持たない人が情報を書き換えたり消したりできないようにすること
・可用性 権限を持つ人がいつでも利用したいときに利用できるようにすること
アプリケーション全体のセキュリティに弱点を作り出すコンピュータソフトウェアの欠陥や仕様上の問題点のことを脆弱性(ぜいじゃくせい)。
アプリケーション上で悪意のある者に攻撃を仕掛けられる際の弱点。
被害:
- 個人情報を勝手に閲覧される(機密性侵害)
- Webページの内容が改ざんされる(完全性侵害)
- Webページ自体が利用不能になる(可用性侵害)
HTTPとはWebブラウザとWebサーバの間でHTMLや画像ファイルなどのコンテンツの送受信に用いられる通信プロトコルです。
複数のユーザが滞りなく信号やデータ、情報を相互に伝送できるよう、あらかじめ決められた約束事や手順の集合
ステータスコードとはHTTP通信のレスポンスメッセージのステータスライン中にある3桁の数字で、クライアントからのリクエストに対して、サーバからの返答はどのような状態かを提示してくれるのものになります。Webページが正常に表示されないような状態の時にどこに原因があるのかがわかるようになるため対策を取りやすい。
セッション
複数回に渡るリクエストにおいて、クライアントを特定するための仕組み
クッキー(cookie)
クライアント側のブラウザに保持することができる情報のことです。
ステートレスとはサーバが現在の状態を保持せず、ユーザの入力の内容のみによって出力が決定される状態のこと。
ページが遷移してもユーザの情報や購入しようとしている商品の情報を保持している必要があり、これを保持するために用いられているのがセッション、HTTP通信のセッションを管理するために作られた仕組みをクッキー(cookie)といいます。このような通信をステートフル通信といいます。
HTML生成の実装に問題があると、外部よりスクリプトを埋め込まれクッキーを盗まれたり、JavaScriptによる攻撃を受けてしまうおそれがある。
一般的な対策方法:
HTMLを生成する際に意味を持つ「"」や「<」を文字参照によってエスケープすることが基本
rawメソッド
SQLインジェクション
アプリケーションのSQLの呼び出し方においてセキュリティ上の不備を意図的に利用し、データベースシステムを不正に操作する攻撃方法。
- データベース内のすべての情報が外部から盗まれる
- データベースの内容が書き換えられる
- IDとパスワードを用いずにログインされる(不正ログイン)
- その他、データベースサーバー上のファイルの読み出し、書き込み、プログラムの実行などを行われる
SQLインジェクション脆弱性を解消するためには、SQL文を組み立て実行される際にSQL文を変更されることを防ぐこと。
find_by_sql
SQL文を直接書いて、レコードを取得するメソッド。
CSRF:
Webサイトにスクリプトや自動転送(HTTPリダイレクト)を仕込むことによって、利用者に意図せず別のWebサイト上で何らかの操作(掲示板への書き込みや銀行口座への送金など)を行わせる攻撃手法。
- 利用者のアカウントによる物品の購入
- 利用者の退会処理
- 利用者のアカウントによる掲示板への書き込み
- 利用者のパスワードやメールアドレスが変更
攻撃例:
- 利用者がexample.jpにログインしている
- 攻撃者は罠を作成
- 利用者が罠を閲覧する
- 罠のJavaScriptによる、被害者のブラウザ上で攻撃対象サイトに対し、新しいパスワードabcdefがPOSTメソッドにより送信される
- パスワードが変更される
一般的な対策方法
CSRF攻撃を防ぐには、「重要な処理」に対するリクエストが利用者の意図によるものかどうかを確認することが必要。
正規リクエストかどうかの判断:
- 秘密情報の埋め込み
- パスワードの再入力
- Refererのチェック
セッションハイジャックとは名前の通り、なんらかの方法を用いて正規利用者ではないものが他人のセッションIDを乗っ取る攻撃手法。
攻撃手法:
- セッションIDの推測
- セッションIDの盗み出し
- セッションIDの強制
問題があるセッションID
- ユーザIDやメールアドレス
- リモートIPアドレス
- 日時
- 乱数
SSLとはSecure Socket Layerの略で、インターネット上の通信を暗号化してくれる技術です。これにより、第三者からの情報の盗聴や改ざんを防ぐことができる。