PHP Security
ハッシュ(HMAC)を使って有効期限付きURL/URIを作る方法
より高度なCSRF対策 – URL/URI個別にバリデーションする方法でハッシュ(HMAC)を使えばデータベースを使わずに有効期限付きのURLを作れる、と紹介しました。今回は有効期限付きURL(URI)の作り方を紹介します。 (さらに…)
PHPのmt_rand()/rand()問題
PHPのmt_rand()とrand()には状態の初期化/再初期化に問題があります。話しを簡単にするためにrand()をmt_rand()のエイリアスにする提案 https://wiki.php.net/rfc/rng_fixes が適用された状態を前提にMT rand問題として解説します。しかし、基本的には古いPHPでrand()を使う場合も同じ(かそれ以…
ISO 27000の入力データ妥当性確認
セキュリティ標準では入力データの妥当性確認(入力バリデーション)が要求されています。具体的な方法はBS 7799(英国のJIS規格のような物、2000年に国際標準化)が作られた時(90年代後半)から記載されており、前の版までのISO 270001にも記載されています。2013年版のISO 27000ではセキュアプログラミングが普及したので具体的な方法などは省…
セッションデータインジェクション
PHP 5.6.25/7.010以降で修正されたセッションデータインジェクション Fixed bug #72681 (PHP Session Data Injection Vulnerability). (CVE-2016-7125) の解説です。 この脆弱性を利用するとオブジェクトインジェクションが簡単に行えます。結構深刻な問題ですが、あまり話題にはなって…
プライベートサイトを作るならPHPのURL Rewriterを使う
クロスサイト・リクエスト(他のWebサイトから自分のサイトへURLリンクやPOSTでアクセスする)を制限したいWebアプリケーションは結構あります。例えば、ホームルーターの管理ページを作る場合、クロスサイト・リクエストは有用などころか有害です。ホームルーターの管理ページにはクロスサイト・リクエストによる脆弱性が多数報告されています。 PHPの基本機能を使えば…
完全なSQLインジェクション対策
不完全なSQLインジェクション対策だけで、SQLインジェクション対策は万全、と誤解しているケースが少なくないです。 プリペアードクエリ/プレイスホルダを使ったSQLインジェクション対策でOK は誤りです。「とにかくプレイスホルダを使おう」では脆弱性は無くなりません。 簡単な証明:プリペアードクエリ”だけ”では、識別子(カラム/テーブル等)を使うソートクエリ、…
ソーシャルメディアフィンガープリントとその対策
ソーシャルメディアフィンガープリントがまた話題になっているようです。ソーシャルメディアフィンガープリントとは何か?およびその対策です。 ソーシャルメディアに限らず、ログインをサポートしているサイトであれば、全て対象です。 (さらに…)
PHPスクリプトの分析ツール
PHPスクリプトを分析するツールをまとめたページの紹介です。 (さらに…)