【PHPセキュリティ】セッション固定攻撃

セッション固定攻撃とは

任意のセッションIDを強制的に利用させる攻撃。
セッションハイジャックを成立させるための手段などで使われる。

対策

ログイン前からセッションが有効になっていて、ログイン後も同じセッションIDを利用している
場合にと言うケースで session_regenerate_id() でログイン後には新しいセッションIDを割り振る。
この関数使ってたけど、具体的になにへの対策の為かが分かってスッキリ。

ただし、PHPのバージョンが5.1以前の場合は古いセッション情報がサーバーから削除されないので

$session_data = session_encode();
$_SESSION = array();
session_regenerate_id();
session_decode($session_data);

の様に書き直す必要がある。

【PHPセキュリティ】SQLインジェクション

SQLインジェクションとは

SQLを改ざんした攻撃。
想像しただけで恐ろしいね。

対策

  • PDOのプリペアドステートメントを使う
  • PDO以外でもmysqliの拡張のmysqli_prepare() 関数もある

これやれば、エスケープ処理をしてくれるのであちこちでmysql_real_escape_stringやらなくていいし確実なんだね。

【PHPセキュリティ】CSRF対策

クロスサイトフォージェリ(CSRF)とは

ユーザーが意図しない操作をユーザー自身の権限を用いて実行させてしまう。
これだと意味わかんね。

例えば、ユーザーがはてなブログにログインする。
で、はてなブログには記事の削除機能がある。これをユーザー自身にさせてしまう。
どっか他のサーバーにはてなブログの記事を削除を実行するページへデータをpostしてしまうページを用意しておく。
それをユーザーが踏んじゃうとユーザー自身が削除したことになってしまう。
恐ろしや。

対策

  • 実行時にパスワードを入力させる。
  • ワンタイムトークンでチェックする

パスワード入力が必要であれば、リダイレクトされてもいきなり削除されないもんね。
でも、パスワード盗まれてたらpostされて実行できちゃうね。
まあ、パスワード盗まれてる時点で終わってんだけどねw
だから、本当は両方やるべき。

そこは利便性を天秤にかけて考える。

【PHPセキュリティ】スクリプト挿入攻撃とXSSの対策

PHPのセキュリティの勉強をしている。
アホなので、書かないと覚えられないので書く。

スクリプト挿入攻撃とは

読んで時の如く、スクリプトを挿入して攻撃する。
掲示板などのサイトユーザーがデータを挿入するコンテンツで、HTMLの投稿を許可している場合に狙われる。
外部から入力されたデータをそのまま表示してしまうと、javascriptなどのコードが実行されてしまう。

クロスサイトスクリプティングとは

リンクを踏ませるなどして、間接的に悪意あるスクリプトを実行させる。
よく聞くXSSってやつ。

これを回避するために、POSTされたデータをhtmlspecialchars関数を使ってサニタイズする。

$test = htmlspecialchars ( $_POST['test'], ENT_QUOTES, '文字コード');

ENT_QUOTESはシングルクォーテーションをエスケープするための引数。

ナオト・インティライミ

今、俺の中で最も旬なキーワードが「ナオト・インティライミ」だ。


彼のことや、音楽が好きとか嫌いとかそんなことは全く関係なくて
単語として「ナオト・インティライミ」が面白い。

・ホップ、ステップ、ナオト・インティライミ
・ピーマンとナオト・インティライミの炒め物
ナオト・インティライミが2個で98円
・4番線からナオト・インティライミが参ります
トップロープ上段からのナオト・インティライミ
・ご一緒にナオト・インティライミはいかがですか?


もうだめだ、なにしたって面白い。
CTスキャン受けてくる。

php.iniの設定が反映されない場合の対処

そういえば、前回の記事phpのライブラリ関連でphp.iniを弄ってるのに全然値が反映されなくて地味にハマった時のメモ。

Apacheちゃんとリロードしてるのになーって思ってて、じゃあphp.ini読んでないんじゃね?
と思いググったら出てきた。

installしたphpApacheのモジュールとして動いている。
そこで、httpd.confでphp.iniが置いてあるディレクトリを明示しておかなくてはならないらしい。

httpd.confを開いて、以下を記述してapacheをリロードして反映した。

PHPIniDir '/etc/'

etcの部分はphp.iniが置いてあるディレクトリを指定する。
centosだとデフォルトで/etc以下にphp.iniは配置されている。

php.iniの場所は、phpinfoのLoaded Configuration Fileの欄で確認することができる。

ECcube2.11.0からECcube2.11.1へアップデート

先日でたばかりの、ECcube2.11.0ですが予想通りバグが沢山あった模様。。
そこで、ある程度バグ修正されているECcube2.11.1にアップデートすることにした。

最初、2.11.0から2.11.1への修正の差分ファイルがあったのでそのファイルをアップロードしたら
なんとテンプレートのレイアウト変更が全く効かない状態になってしまった。

すざけんなということで、2.11.1を普通にインストールしてデータを移行することにした。

  1. システム設定>バックアップ管理からバックアップを取りローカルへダウンロード。
  2. /html/upload/ 以下に画像のデータがあるので、これもローカルへダウンロード。
  3. 1で取得したバックアップデータを、/data/downloads/backup ディレクトリ内にアップロード。
  4. 3のファイルの所有者をApacheの実行ユーザー(通常はApache)にし、パーミッションは666にする。
  5. データベースにログインして、このバックアップファイルをバックアップデータとして動作させるためにdtb_bkupテーブルにデータをインサートする。

insert into dtb_bkup (bkup_name,bkup_memo,create_date) VALUES('バックアップファイル名','メモ','2011-05-18 10:55:43');

bkup_nameだけは、バックアップとして取ったファイル名を正確に入れる。(backup.tar.gzだったらbackup)
他は適当でいい。

これで初めて、インターフェイス上でバックアップデータとして認識されてバックアップ一覧に現れる。
あとは、これをリストアして画像データをアップロードすればおしまい。

オープンソースECサイト構築ソフトEC-CUBE【Ver2対応】公式ガイドブック

オープンソースECサイト構築ソフトEC-CUBE【Ver2対応】公式ガイドブック