CSRF対策
CSRF対策とは
CSRF (Cross-Site Request Forgeries) を意訳すると 「サイトを跨ぐ偽造リクエスト送信」 です。サイトをまたぐ偽造リクエスト送信
罠サイトを踏んだ結果,自分が無関係な別のサイト上で勝手にアクションをさせられる攻撃です。
偽造した送信などを防ぐ同一オリジンポリシーについて知っておく |
【参照】
オリジンとは何か?
CSRF を語るにあたって避けられないのが Origin(オリジン) という用語です。
自分のサイトか無関係な別のサイトかを判定するために,以下の要素を組み合わせたものが使用されます。
例: https://example.com:443 |
スキーム・・・https
ホスト・・・example.com
ポート・・・443
省略された場合,HTTPSの場合は443,HTTPの場合は80が既定値になります。
これらをまとめて Origin(オリジン) と言います。
これらの成分が一致している場合は同じサイトになります。1つでも異なる場合は別のサイトとになります。
同一オリジンポリシーとは何か?
Web ブラウザは,異なるオリジン間で好き勝手リクエストを飛ばされては困ります。
そこで 同一オリジンポリシー (Same-Origin Policy) の規定があります。
異なるオリジンへの書き込みは、概して許可されます。 例えばリンクやリダイレクト、フォームの送信があります。まれに使用される HTTP リクエストの際はプリフライトが必要です。
異なるオリジンからの読み込みは一般に許可されませんが、埋込みによって読み取り権限がしばしば漏れてしまいます。
埋込み画像の幅や高さ、埋込みスクリプトの動作内容、埋込みリソースでアクセス可能なものを読み取ることができます。 |
という事のようです。
異なるオリジンの Web サイトに対し,HTTP リクエストは送ることはできる しかし、その結果の読み取りはできない。 |
ということが書かれています。
【参照】
CSRF 対策は何を守ればいいのか?
「ブサーバーからの結果を「読み取る」」部分は Web ブラウザが守ってくれます。
CSRF 対策で守られないのは,「HTTP リクエストを送る」の部分です。
出典:csrf対策
問題があるのは、「掲示板に記事を投稿」「パスワードを変更」「データベース上に書き込みをする時」、「メール送信する時」です。
送る部分を守れ サーバーからのリクエスと部分はブラウザが守ってくれる |
トークンによる対策方法
対策方法は複数あります。セッションを利用して、トークンを発行するのがおすすめです。
トークンを発行する |
固定トークン(ログイン完了後ずっと固定値になる) |
の二種類があります。
推測不可能という条件のみを満たしていれば十分なので,ワンタイムである必要性はありません。
ワンタイムだとページリロードでの重複送信を防ぐこともできますが,これが逆に不便になることもあります。
CSRF トークンの責務を超えた制御になってくるので,著者個人としては「固定トークン」を推奨しています。
【参照】
パーフェクト方式のCSRF対策は現在時刻を元にしているので、ハッシュ関数を通しても、内部の「種」の文字列を推測される危険性があります。
https://blog.tokumaru.org/2011/01/anti-csrf-onetime-token-failure-case.html
固定トークンの場合
1. ランダム文字列を生成してセッションに格納し,繰り返して使う2. セッション ID のハッシュ値を使う3. セッション ID をそのまま使う (非推奨) |
の3つの方法があります
PHP の Laravel フレームワークではランダム文字列生成が採用されています
セッション ID のハッシュ値でも十分かな,という意見です。
しかし、セッション ID をそのまま使用するのは,XSS 脆弱性から即セッションハイジャックを受けるなどの二次被害にも繋がります。
万が一の保険としてハッシュ関数を通しておくことを推奨します。
ハッシュ値とは
ハッシュ値とは、セッションでよく使います。
ハッシュ関数の「戻り値」 元データに対して生成された、適当な値(適当に見える値) |
ハッシュ関数とは?
「適当な値を中に放り込むと、適当な値を返してくれる関数」の事です。
適当な値が返ってくる |
という特徴があります。
1.ハッシュ値から元のデータを特定するのは、ほとんど無理 2.元のデータが同じなら生成されるハッシュ値も同じ 3.元のデータが変わると生成されるハッシュ値は(ガッツリと)変わる |
「元データ→ハッシュ値」はお手軽だけど「元データ←ハッシュ値」はすっごい大変だよ
【参照】
PHPの勉強方法
目安は1日3~5時間の勉強で100日程度です。実際にやってみましたが、仕事をしながらだと、200日ほどかかります。なぜなら、休日の家族サービス。モチベーションの低下などがあるからです。
前置きはさておき、まずは勉強方法です。
PHPを学ぶには、独自の言葉を覚える必要があります。「・」が付いているものは、外部のサイトへ飛びます。
■ 基本編 ■
PHPとは?
設定方法
PDOとは何か?
mysql_connect()
-> アロー演算子とは?
データベースへのアクセスについて
■ DBへの接続■
PDOについて知ろう
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
■ オブジェクト指向■
クラス・インスタンス・プロパティ
オブジェクト指向とは?
【フレームワーク】
基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザー
MYSQLについて
MYSQLの学習方法について。DBの操作方法を覚えます。 四大操作をまずは覚えておきましょう。
■ 設計について■
UMLとは何か?
ER図を覚えよう
コードイグナイターの勉強方法
コードイグナイターを学んでいきましょう。「・」が付いているものは、外部のサイトへ飛びます。
DB設定 ⇒ 接続 ⇒ SQLクエリ ⇒ DB暮クラスの機能 ⇒ 結果の取得 の順に学ぶとよい。
SQLのクエリ発行には2種類がある。通常方法と、「Acive Record」の2種類です。
■ 基本編 ■
クエリ結果を作る
Active Recordとは?
クエリヘルパー関数
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
【参照】
http://pneskin2.nekoget.com/codeigniter/3/user_guide/index.html
どちらかを見ましょう。
【フレームワーク】
基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザーが入っている。
勉強に必要な書籍について
必ず、最新のverを買うようにしてください。PHPはバージョンによって、かなり違います。PHP、MYSQL、、サーバー、フレームワークと幅広く勉強する必要があります。
本はかならず、2冊用意するようにしましょう。1冊は基本、もう1冊は分からない部分を補完してくれます。
ちなみに、無名関数、コールバック関数などは、何度勉強してもつまずく可能性があります。
基本から詳しく書いてあるが、ところどころ、省略されていて分かりずらい。 |
|
ある程度、分かってから使うとよい |
|
基本から全てが分かります。 PDOでのアクセスを学ぶのによい。 |
|
サーバー、ファイル権限を学ぶのに良い。 サーバーはlinuxベースで出来ているので、ここが分かると、かなり分かる。 |
|
パソコンが動く、原理と基本がわかります ここが分かると、配列、ポインタなどが分かります |
|
XSSなどの基本的なセキュリティー対策が分かります。 |
【MYSQLについて】
データベースについて学びます。「SELECT」を極めましょう。型の指定方法などが学べます。
基本から全てが分かります。 PDOでのアクセスを学ぶのによい。 |
|
基本が終わったら、必ず読みましょう。 |
【サーバーについて】
サーバー、ファイル権限について学びます。
サーバー、ファイル権限を学ぶのに良い。 サーバーはlinuxベースで出来ているので、ここが分かると、かなり分かる。 |
【DB設計について】
DBの設計方法について学ぶことができます。
楽々ERDレッスン |
DBの設計に必要 |
UML入門 |
基本について学んでおくとよい |
参照サイト
大変申し訳ありませんが、当社ではサービスの質を落とさないために、月の契約は5件までとさせていただいております。 契約をお待ちいただく可能性もございますので、ご了承のほどよろしくお願いいたします
この記事を読んだ人は、こんな記事も読んでいます
SEO対策の基本 外部要因とは?
SEO対策の基本的である、外部要因とは何か?
SEO対策をするなら絶対に知っておきたい、基本知識です。
売れるサイトを作るのに知って起きたい知識
サーチエンジンマーケティングという言葉をご存知でしょうか?
ホームページで商品やサービスを売る時に知っておきたいマーケティング
についてご紹介いたします。
SEO対策をする5つのメリットとは?
なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか
についてご紹介させていただきます。
SEO対策の内部要因とは?
上位表示させるためには、内部要因について知っておくことも大事です。
キーワードを上位表示させるために必要なのは、ソースコードを最適化することです
内部要因の対策について知りたい方はこちらへ
キーワード対策をする前に
そのキーワード対策。ちょっと待ってください。
そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は
そんな大きなキーワードで対策をしてはいけません。
広告費用が高くなる本当の理由とは?
売れないサイトに集めていませんか?広告費用がかかるわりには
お問い合わせが少ない・・・と感じる方は多いはずです。
購入率の悪いサイトに集客をしている可能性があります。