Posted on

システムの脆弱性検知ツールを調査してみる

セキュリティの調査で3つ脆弱性検知ツールを入れてみたのですが、結果的には次のようになりました。

-skipfish
Linuxでしか動作しなく導入に手間が掛かる。
導入後、実行してみるが時間が掛かりすぎる。CakePHPを抱え込んで検知したら半日経っても終らない。
素のPHPで小さいシステムを検査してみるが脆弱性が発見できない。

-IPAが出しているiLogScanner
導入作業自体が無くIPAが用意しているサイトにサーバーのアクセスログファイルをUPして調査する。
サーバーのログを上げる作業なので、このプロジェクトの脆弱性を見たいという時は、ログファイルの吐き出し方を切り替えるという作業が必要になってくる。
脆弱性を発見したと検知されるのに、何処のファイルかという情報が無く脆弱性の特定が出来ない。

-Paros
windowsにインストールできて、そのパソコンからブラウザのプロキシを強引に変えて見たいシステムのURLを叩いて操作したログを後で検査するという仕組みです。
素のPHPで書いた小さいシステムを検査すると、何処のファイルに脆弱性があるときちんと出してくれます。
但しCakePHPなどのフレームワークを検査してみると、MVCが分かれているせいでXSSやSQLインジェクションを上手く検地してくれない。

ということでParosがまだ一番使えるかなという感じなのですが、当初の目的のCakePHPを使ってるサイトの脆弱性を検査するという部分が出来ないので、引き続きツールを探して行きたいと思います。
何か良い脆弱性検地ツールは無いんですかね・・・

Posted on

CakePHPのsessionがcore.phpの設定より早く消える!

CakePHPのsessionってsessionデータに作成時間を保存しておき、読み出す時にcore.phpで設定した時間が経過していないかチェックしているんですね。
サーバー設定の方はさわりに行ってないみたいです。
core.phpの

Configure::write('Session.timeout', '120');
Configure::write('Security.level', 'medium');

で3時間以上あってもサーバーの

  • session.cookie_lifetime
  • session.gc_maxlifetime

の方が短ければガーベジコレクションでsessionファイルが消えるので予想より早くログアウトしたりします。
なので
bootstrap.phpに

ini_set("session.cookie_lifetime", 100 * Configure::read('Session.timeout'));
ini_set("session.gc_maxlifetime", 100 * Configure::read('Session.timeout'));

coreの値使ってサーバー設定をcore触るだけで設定できるようにしました。
(100掛けてるのはmediumの係数の100です。session.php見ましたが定数にはなっていない感じでした。)
バージョンは1.2.6です。

Posted on

CakePHPのtextareaの最初の改行コードがなくなる!

————–
\n
\n
テキストエリア内容
————–
のデータがあった場合

$form->input('Model.field', array('type' => 'textarea'));

で表示した場合、最初の改行コードがない状態でフォームに表示されます。
(下記のように2つある改行が1つになっています)

続きを読む CakePHPのtextareaの最初の改行コードがなくなる!

Posted on

CakePHPのqueryのキャッシュでハマる

モデルのquery関数を使ってループをまわしながら最大noをとってくる処理でハマりました・・・
query関数って$sql同じだった場合勝手にキャッシュを使って前回と同じ値を返すんですね。
通常はこれを回避する為に

$this->query($sql, false);

とすることで毎回最新データを取ってきてくれます。
デフォルトでキャッシュが邪魔だったので、app_model.phpで

function query() {
$params = func_get_args();
if (empty($params[1])) {
$params[1] = false;
} else {
if (is_array($params[1]) && empty($params[2])) {
$params[2] = false;
}
}
$db =& ConnectionManager::getDataSource($this->useDbConfig);
return call_user_func_array(array(&$db, 'query'), $params);
}

query関数をオーバーライドしました。
バージョンは1.2.6です。

Posted on

PHPで画像加工

今回UPした画像のリサイズと画像に文字を乗っけるという仕様の仕事があり、PHPで画像加工に挑戦しました。

調べてみるとPHPを入れるときに大体標準で付いてくるGDライブラリで画像加工が出来るとのこと。
今回は画像を小さくリサイズするのと、写真に文字を埋め込むという事をしました。

続きを読む PHPで画像加工

Posted on

複数ファイルを一気にUPする

今回複数の写真を一気にUPしたい案件があったのでネットを探していたら、便利そうなライブラリを発見!!

その名もSWFUploadライブラリというもので、ファイルを選択する際にドラッグで複数選ぶか、ShiftかCtrlを押しながら複数選ぶ。
選び終わったら開くボタンを押す、そしたら選ばれたファイルが進行状況が分かりながらアップロードされていくというライブラリです。

続きを読む 複数ファイルを一気にUPする

Posted on

CakePHPで携帯サイトを作成する

前回携帯サイトを作った方法だと、CakePHPのバージョンアップによって動かなくなってしまっていたので、新しい方法で作った覚書を残していきます。
今回は「CakePHP1.2ガイドブック」の携帯サイトを作成するを参考に作っていっています。
この方法だとcakeのバージョンによって動かなくなることは無いと思いますが、一応バージョンは1.2.3.8166で試してみました。
内容はほぼそのままなのですが、自分が分かりやすいようにコメントを付け加えていってます。

続きを読む CakePHPで携帯サイトを作成する

Posted on

php5.3の環境にCakePHPアップしたらDeprecatedエラーが・・・

php5.3の環境にCakePHPアップしたらDeprecatedエラーが出まくりだったのでメモ

開発環境から本番環境にソースをアップしてブラウザでアクセスしたら

「Deprecated: Assigning the return value of new by reference is deprecated in…」
のメッセージが大量に出た、どうもphp5.3からエラーの定義が変わったのが原因みたい。

どうも5.3からerror_reporting()に定義がかわり、E_ALL値が変更されたらしい。

PHP: 定義済み定数

cake/libs/configure.phpの297行目くらいに下記のコードを追加してエラーの出力を調整

if (isset($config['debug'])) {
if ($_this->debug) {
error_reporting(E_ALL);
//php 5.3のエラー出力調整(ここから追加)
if (error_reporting() > 6143) {
error_reporting(E_ALL & ~E_DEPRECATED);
}
//php 5.3のエラー出力調整(ここまで追加)