0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

セキュリティ対策について

Last updated at Posted at 2020-08-07

セキュリティ対策について、自分の言葉でわかりやすくキロク。

#CSRF(cross-site request forgeries):クロスサイトリクエストフォージェリ

###CSRFの例

例えば、お問い合わせフォームなどで、送信ボタンを押した際、
悪意のあるユーザによって作成された遷移先にたどり着いてしまったら、
個人情報が盗まれてしまうかもしれない。

###対策
対策としては、元のページと、遷移先のページが同じ管理元であることを確かめる必要がある。

合言葉を作って確認するのです。

その合言葉はtokenと言われるもので、数十桁の意味のない文字列を都度生成する。

その合言葉(token)をsessionに格納し、遷移先で一致しているか確認し、一致していた場合に処理を続ける。
それ以外の場合は弾く、とすれば、CSRFの脅威から守られる。

  • tokenに、意味のない文字列数十桁を生成する
  • $_POSTで取得するtokenは、formのタイプ:hiddenで送る
  • sessionに格納したtokenと、hidden送信されたtokenをチェックし、一致していたら処理を続けます

以下にソースコードの一部を記します。

csrf.php
// post送信でtokenが取得できない、または、hiddenで送信されたtokenとsessionのtokenが一致しない場合
if (isset($_POST['token']) ===false || $_POST['token'] !== $_SESSION['token']){
  header('location:index.php'); // トップページへ遷移
  $_SESSION = array(); // 不正なtokenだったからsessionから削除しておく
  exit; // 処理を抜ける

} else {  
  //処理を続ける
}

#XXS(Cross Site Scripting):クロスサイトスクリプティング

###XXSの例

Webサイトの脆弱性を攻撃する。

例えば、リンクのURLに罠を仕掛けて、悪意のあるページに引き寄せる。
そして、正規のサイトに似たページが表示され、そこで、ID、パスワードなどを入力させ、情報が抜き取られる(フィッシング)。

###XSS対策
悪意のあるユーザーがスクリプトを埋め込もうとしても、それらを無効にする必要があります。

対策として、
私はいつも安全に表示するためのユーザー関数を定義しておいて(下コード参照)、PHPのprintで出力するタイミングでこの関数を使用するようにしています。

xxs.php

// 安全に表示するユーザー関数
function h($value) {
    return htmlspecialchars($value, ENT_QUOTES, 'utf-8');
}

#SQLインジェクション

###SQLインジェクションの例

SQL文として成立する文字列が不正に送られて、データベースを操作されること。
XSSはWebサイトの脆弱性を攻撃してくるのに対し、SQLインジェクションは相手のデータベースに攻撃を仕掛ける。

###対策

プレースホルダやバインド変数やprepaired statementを利用して、
SQL文には、変数などの値を入力しないようにする。

以下コードは値をバインドしている例
SQL文には、値を代入せず、'?'を代用して、SQL文を実行する際に値を代入しています。

sql.php

$sql  = 'INSERT INTO items(name,price)VALUES(?,?)'; // SQL文
$stmt = $dbh->prepare($sql); // 準備
$stmt -> execute(['apple', 100]); // 実行

今回は、セキュリティ対策についてキロクしました。

最近、大手企業への不正アクセスがあり、個人情報がもれた、などの報道がありました。
こんな悪いこと誰がするんだろう、って思ってたけど、いるんですね、悪い人は。

そんな悪さに負けないWebサービスを作ってみたいものです。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?