サーバー攻撃の基本
サーバーセキュリティーの基本
今回は、サーバーセキュリティーの基本について、私が学んだことをまとめておきます。少しでも後学のために使っていただけたら嬉しいです。
Q.なぜ学ぶのか?
・情報の漏洩になってしまう。
・データが破壊されてしまう
・中身を改ざんされてしまうので
Q.何を学んだらいいのか?
SQLインジェクション、XSS、CSRF対策
・JavaScriptによる攻撃には注意
・FTPパスワードの漏洩を防ぐ(変なページを作られてしまう)
・第三者のJavaScriptは危険
多くの場合は、攻撃を複数組み合わておこなってきます。よって、複数の攻撃に対して、知識をもっておく事が重要になります。
※入力のサニタイズでかなり防げる。
Q,防御方法は?
・セッション認証の理解
・PHPSSIDの理解
・サニタイズの徹底(<script>は、文字列に変換してしまう)
・入力文字数を制限する
・HTTPS通信による暗号化
・CSRFトークンの発行
・httponly属性
Q.ポイントは?
限界まで安全性の高いアプリケーションを作る。
プログラム側で、きちんと対策をしておく事が大事。
XSSとは?
他のサイトに飛ばし、「クロスサイト」。情報を盗み出す事。サイトを横断しない場合もある。
変なページに行き、クッキー情報から、情報を抜きとられ、利用者のブラウザなどのアプリから、不正攻撃などを勝手にされてしまう。
■スクリプトを入れる
・他のページ(罠ページ)に誘導
・ユーザがアクセス
・JSでセッションID(PHPSSID)を抜き取る
・セッションハイジャックと組み合わせて、攻撃をする。
■XSSの流れ
1.メールをクリックして、変なサイトを開く。
2.JSによって、サーバーにリクエストが送信されてしまう。クッキー情報などを読み取られる
3.勝手にログインされて、改ざんされる
・利用後はログアウト ・信頼性の低いサイトにアクセスしない ・操作履歴を見る事 |
■種類について
1.反射型XSS
罠が仕掛けられたWebページにユーザがアクセスすると、悪質なサイトに誘導するためのURLが表示される。
クリックすると攻撃者が用意したサイトに誘導されて、不正なスクリプトが実行されるタイプのXSSです。
ユーザのWebページへのアクセスに対して、悪質なサイトへ誘導するためのURLを返すことから「反射型」と呼ばれます。
2.格納型/蓄積型/持続型XSS
攻撃者があらかじめWebページに不正なスプリクトを格納し、ユーザがそのページを閲覧するたびに不正なスクリプトが実行されるXSS。
反射型XSSに比べると、ユーザがページにアクセスするだけで不正なスクリプトが実行されます。
※FTPの漏洩により起こる。
3.DOM Based XSS
サーバ側で不正なスクリプトを実行するのではなく、Webブラウザ上で動作するJavaScriptの脆弱性を悪用したXSSです。DOM(Document Object Model)は、簡単にいうと、JavaScriptを使ってWebページを操作する仕組みで、その仕組みを悪用したのが、DOM Based XSSです。
■対策方法
・サニタイズ処理(チェック処理、エスケープ処理) ・JSのライブラリなどを、最新環境にする ・HTTPS通信のみOKにする ・入力文字の制限 ・利用後はログアウト ・信頼性の低いサイトにアクセスしない ・操作履歴を見る事 |
httponly属性だけだと、防げない...という事ですね^^;
あくまで、緩和できるようです。
CSRFとは?
■基本
セッションIDを盗まれてしまい、ログインされてしまう事。
ログインしたままの状態を狙う。
ネットバンキングでの被害が深刻。ワンタイムパスワードなどは、この対策のため。
スマホが普及して、ログイン状態を保存するようになり、被害が拡大した。
被害例
・ECで勝手に買い物される ・SNSに勝手に投稿 ・預金の引き出し |
対策方法
・ワンタイムパスワードの発行 ・リクエスト送信元の確認 ・キャプチャをつける(画像のヤツ) ・トークンの発行 ・パスワードの再入力 |
・セッション変数とhiddenタグのパスワードを照合して、認証をする仕組み。
これが安全。
・送信元のリファラーのチェック
・reCAPTCHAをつけるとさらに安全になる。
※自分で作ったアプリに、セキュリティー実験を行うと良い。
CIの対策
1.SSL接続にして、通信を暗号化する
2.ランダムなセッションIDを生成する
3.
$config['cookie_httponly'] = TRUE; |
HTTPOnly属性が設定されるため、JavaScriptによるセッションハイジャックが防止されます。
$config['sess_match_ip'] = TRUE; |
セッションデータのIPアドレスとクライアントIPアドレスがマッチしているかチェック
$config['sess_match_useragent'] = TRUE; |
セッションデータのUser-Agentとリクエスト時のUser-Agentがマッチしているかチェック
$config['sess_regenerate_destroy'] = TRUE; |
セッション ID の自動再生成をするときに古いセッション ID に関連付けられたセッションデータを 破棄するかどうか。 FALSE に設定すると、データはガベージコレクタによってあとで削除されます。
$config['sess_encrypt_cookie'] = TRUE; |
セッションデータの暗号化
■HTTPSのOK
$config['cookie_secure'] = TRUE; |
HTTPSのみCookieを許可する設定
■ドメインの指定
$config['cookie_domain'] |
本番環境では、ドメインの指定までしておくと、安全です。
考察
HTTPSとドメイン指定で、かなり防ぐことができる。
全部指定すると、かなり強いセキュリティーニデキル!!
【参照】
HTTPOnly属性
HTTPOnly属性...JSからのアクセスができないようにする設定。
XSS攻撃の防止になる。
SQLインジェクション
不正なSQL文を差し込まれることで、おこる。
DB内を全て消される可能性があるので、凄く注意しておく必要がある。
被害
・DB内の情報を抜き取られる ・DBの全消去 |
場所
・検索ボックスのSQLは注意 |
対策
・文字列のサニタイズ ・入力値の制限 ・プリペアドステートメントで防止
|
セッション固定化攻撃
・セッションIDをURLパラメータにしない(クッキーに格納する)
・HTTPS通信で利用するCookieにはsecure属性をつける。
・ログイン後に新しくセッションを開始する(降りなおす)
まとめ
セキュリティーの基本は、サニタイズです。
JS攻撃を防ぐために、https通信のみ許可にしておく事です。
httponlyはDOM攻撃を防ぐことができませんが、しっかりと対策しておきましょう。
これだけで、かなり防ぐことができます。ログインが必要な場合は、合わせてセッションidについての知識などを勉強しておきましょう。
【参照】
クロスサイトリクエストフォージュリ(CSRF)をPHPで検証する
サイトを安全に!PHPでcsrf対策を行う方法【初心者向け】
PHPの勉強方法
目安は1日3~5時間の勉強で200日程度です。
PHPを学ぶには、独自の言葉を覚える必要があります。「・」が付いているものは、外部のサイトへ飛びます。
■ 基本編 ■
PHPとは?
SSLの設定
PDOとは何か?
mysql_connect()
-> アロー演算子とは?
データベースへのアクセスについて
■セキュリティー
http通信
セッション認証
XSS
CSRF
SQLインジェクション
■phpMyAdmin
テーブルを作成する
■セッション
アコーディオンメニュー
■フォーム
■ DBへの接続■
PDOについて知ろう
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
■ オブジェクト指向■
オブジェクト指向とは?
【フレームワーク】
基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザー
コードイグナイターの勉強方法
コードイグナイターを学んでいきましょう。「・」が付いているものは、外部のサイトへ飛びます。
■ 基本編 ■
クエリ結果を作る
Active Recordとは?
クエリヘルパー関数
■ フレームワーク ■
フレームワークは何を使ったらいいのか?
ララベルとは?
コードイグナイターとは?
オートロードとは
無名関数とは?
MVCとは何か?
【フレームワーク】
基本的には、ララベルを学ぶ方がよい。 ララベルはコンポーザーが入っている。
参照サイト
お気軽にご相談くださいませ!!
この記事を読んだ人は、こんな記事も読んでいます
SEO対策の基本 外部要因とは?
SEO対策の基本的である、外部要因とは何か?
SEO対策をするなら絶対に知っておきたい、基本知識です。
売れるサイトを作るのに知って起きたい知識
サーチエンジンマーケティングという言葉をご存知でしょうか?
ホームページで商品やサービスを売る時に知っておきたいマーケティング
についてご紹介いたします。
SEO対策をする5つのメリットとは?
なぜ上位表示させることが大事なのか?なぜSEO対策をする必要があるのか
についてご紹介させていただきます。
SEO対策の内部要因とは?
上位表示させるためには、内部要因について知っておくことも大事です。
キーワードを上位表示させるために必要なのは、ソースコードを最適化することです
内部要因の対策について知りたい方はこちらへ
キーワード対策をする前に
そのキーワード対策。ちょっと待ってください。
そのまま対策をすると、必ずお金を損してしまいます。個人事業主や中小企業は
そんな大きなキーワードで対策をしてはいけません。
広告費用が高くなる本当の理由とは?
売れないサイトに集めていませんか?広告費用がかかるわりには
お問い合わせが少ない・・・と感じる方は多いはずです。
購入率の悪いサイトに集客をしている可能性があります。