PHP

CGI版のPHPの脆弱性を突いてトラップを仕掛けた事例

PHP

CGI版PHPにリモートからスクリプト実行を許す脆弱性(CVE-2012-1823) | 徳丸浩の日記にあるとおりCGI版PHPには任意のコードを実行できてしまう脆弱性があるとのこと。で、実際にこの脆弱性を突かれた事例が見られたそうです。 【メモ】.htaccess改ざん事例(.…

mb_convert_kanaで変換されない文字

PHP

マニュアルによれば「"」「'」「~」「\」は全角に変換されない。 なぜか。おそらく変換すべき文字が一意に決まらないからだろう。全角だと“ダブルクオート”も‘シングルクオート’も右と左の両方がある。~は波ダッシュか全角チルダか決まらない。\は円記号(¥…

PHPのimap_open()でエラーになる場合の対処の1つ

PHP

PHPのimap_open("{imap.example.com:143}","user","password")で以下のようなエラーが出た。 Warning: imap_open(): Couldn't open stream {imap.example.com:143} in C:\Users\admin\workspace\imap.php on line 45 Notice: Unknown: Certificate failure f…

PHPのPDO_MySQLとクエリキャッシュとプリペアードクエリ

MySQL 5.0〜5.1.16はプリペアードクエリを使うとクエリキャッシュが効かなくなるとのこと。 blog.ISHINAO.net | MySQLのクエリーキャッシュが効かない MySQL で prepared statement を使うと query cache が効かない - kなんとかの日記 floatingdays: PDOの …

オープンソースCMSでのパスワードのハッシュ化方法を調べてみた

ちょっと気になったので調べてみた。 調査結果 プロジェクト 手法 salt ファイル 関数、クラス、メソッド WordPress 2.7.1 blowfish、拡張DES、md5*1 乱数 wp-includes/class-phpass.php PasswordHash*2 MovableType 4.25 crypt*3 乱数 lib/MT/Author.pm set…

auの端末だけPOSTの値の末尾にヌル文字(\0)が入る

PHP

意味が分からない。 しかも通常はPHPではGETやPOSTの値はURLデコードされるのに、ヌル文字が入っているせいかデコードされておらず %A0 などが$_POSTに入ってしまっている。 さらにヌル文字が入っているせいでセッションもおかしくなってしまう。仕方がない…

privateまたはprotectedな変数を含むオブジェクトをserializeするとヌル文字が入る

PHP

突然ブラウザがとんでもない文字化けを起こしたので原因を探ってみたらseriarizeしたオブジェクトにprivateな変数を新設したからだった。 対策としてはこれでいいかな。 $serialized = addslashes(serialize($object)); $unserialized = unserialize(stripsl…

PDOのPDOStatement::bindParamの型指定

PHP

PDOのPDOStatement::bindParamは型を自動的に判別してくれないとのこと。 というわけで型判別してバインドする何か。 $stmt = $pdo->prepare($sql); foreach($binds as $key => $bind){ $type = PDO::PARAM_STR; switch(true){ case is_bool($bind) : $type …

ランダムな文字列の分布

PHP

http://d.hatena.ne.jp/uunfo/20080516/1210957825で生成された文字列が本当にランダムなのかを確かめてみた。 数字 preg_replace("/[^[:digit:]]/", "", hash("whirlpool", mt_rand())); [ 1214388779.7213 sec / 12503 : 1000008 letters ] [/[^[:digit:]]…

Google Chart APIのExtended encodingに変換

PHP

整数をCharts | Google DevelopersのExtended encodingの形式に変換する。Extended encodingはどうみてもbase64。 function google_graph_extended_encoding_character_values($int){ switch(true){ case $int > 4065 : case $int < 0 : return "__"; defaul…

zlib, libjpeg, libpng, libxmlをインストールする

とあるPCにPHPをインストール使用としたらlibjpeg, libxmlがないと言われたのでインストールすることにした。ついでにlibjpegとzlibも最新バージョンを入れることにした。 zlib zlib Home Siteから最新版のソース(今は1.2.3)を落としてmake. $ ./configure…

ランダムな文字列を生成する

PHP

ランダムな文字列生成 - odz buffer Loading... http://www.ecoop.net/memo/2005-05-31-1.html なんか一時期はやっていたの?と思ったらそうでもなさそう。三つ目なんか2005年だし。以前仮パスワードを生成する必要があったときに、以下のようなコードを書い…

in_arrayとarray_flip+array_key_existsの比較3

以前こう書いた。 だめ、全然だめ。array_flipが遅い(そりゃそうだ)。同じ配列の値を数10回以上検索するのならやる価値はあるだろうが、そのときもneedleを配列にして一度にin_arrayで検索した方が速い。今度は Pear::Benchmark (Benchmark/Iterate.php) …

WindowsのPHPでSSL通信を行う

PHPのマニュアル(PHP: ftp_ssl_connect - Manual)には、 Windows でこの関数のサポートを有効にするには、自分で PHP バイナリを コンパイルする必要があります。 とある。が、php-5.2.2-win32-installer.msiでインストールする際に拡張をすべてインストー…

Smartyの修飾子regex_replaceでマッチした値を参照する

preg_replace("/^(\d{2,})(\d{4})(\d{4})/", "$1-$2-$3", $number); のようなことをSmartyのテンプレートで修飾子regex_replaceを使ってやりたかったのだけど、 以下のようにやってもうまくいかない。 {$number|regex_replace : "/^(\d{2,})(\d{4})(\d{4})/"…

nameを配列にしたフォーム要素をJavaScriptから参照する方法

PHPでは <form action="index.php" method="post" name="myform"> 名前<input type="text" name="input[name]" /> メールアドレス<input type="text" name="input[email]" /> パスワード<input type="text" name="input[password]" /> </form> のようにすると、 $name = $_POST['input']['name']; $email = $_POST['input']['email']; $password = $…

Apacheのアクセスログがおかしいから調べてみたら、全信協だった

とあるウェブサーバで4/17だけ異常にアクセス数が増えていて不気味だった。それに日ごと週ごとのアクセス数比較がほとんど無意味になっていて困った。とりあえず、原因のアクセス元を調べてみると 124.87.223.24 と 122.21.237.218 が他の10倍以上のアクセス…

関数に別名を付ける

WindowsとLinuxでまったく異なる結果になった。

PHPEclipseでホバーテキストが文字化けしないようにする。

PHPEclipseは便利なんだけど、文字コードがEUCだとせっかく関数やクラスに付けたコメントがうまく表示されない。 PHPEclipseのソースコードを修正してくれたひとがいるので、ありがたく使わせてもらう。 http://hp.vector.co.jp/authors/VA000137/phpeclipse…

array_searchとin_arrayの比較2

array_keysはとても遅い。でもこれって配列の最後まで検索しているからかな。 果たしてどうなのか。

array_searchとin_arrayの比較

マニュアルには mixed array_search ( mixed needle, array haystack [, bool strict] ) bool in_array ( mixed needle, array haystack [, bool strict] ) とある。 どちらも配列の値を検索するものだが、array_searchは最初にマッチしたキーを返すのに対し…

in_arrayとarray_flip+array_key_existsの比較

だめ、全然だめ。array_flipが遅い(そりゃそうだ)。 同じ配列の値を数10回以上検索するのならやる価値はあるだろうが、そのときもneedleを配列にして一度にin_arrayで検索した方が速い。今度は Pear::Benchmark (Benchmark/Iterate.php) を使ってみようか…