mb_send_mail(),mail()で第5引数を設定する際の注意点

以下の徳丸さんの記事を読んで、以前にmb_send_mail()の関連で調べたことがあったのを思い出しましたので、少し書きます。 PHPだってシェル経由でないコマンド呼び出し機能が欲しい 環境は Unix 系の OS で OS コマンドを使用してメールを送信する場合です。…

マルチバイト正規表現関係のメモ

久しぶりに mbstring モジュール(特にマルチバイト正規表現)のソースコードを眺めていたのですが、いくつか面白い(知らなかった)挙動がありましたでメモしておきます。 確認した PHP のバージョンは 5.4.10 ですが、PHP 5.0 以降であれば、あまり変わりませ…

PHP 5.4.1 以降の mbstring の変更点

mb_ereg_replace_callback() の追加(PHP 5.4.1) PHP 5.4.1 で mb_ereg_replace_callback() が追加されました。正規表現にマッチした文字列に対してコールバック関数による置換ができます。以前から、mb_ereg_replace() のオプションに "e" を設定すると同様…

php.ini で mbstring.encoding_translation を有効にすると max_input_vars が有効にならない(PHP 5.4.8以前、PHP 5.3.18以前)

少し前の話題ですが、PHP 5.4.9 と PHP 5.3.18 が公開されました。その中で、mbstring の項目に「mbstring.encoding_translation = On になっていると max_input_vars が有効にならない」問題が修正されています。 http://git.php.net/?p=php-src.git;a=comm…

最近の mbstring 動向について(PHP 5.4〜)

PHP 5.4 に向けて、久しぶりに PHP の mbstring に対して機能追加と修正がありましたので、メモしておきます。 PHP 5.4.0 の正式リリースまでに「十分なテストが必要」とのことですので、気になる方はテストに参加した方が良いと思います。 変更点は以下の通…

一部の言語構造と関数で引数の値に NULL バイトが含まれていた場合の挙動修正

PHP 5.3.4(最新は PHP 5.3.5) で、引数の値にファイルパスが指定可能な言語構造と関数に NULL バイトが含まれていた場合、処理が失敗するように修正されました。 http://svn.php.net/viewvc?view=revision&revision=305507 簡単に調べてみたところ、少なくと…

「体系的に学ぶ 安全なWebアプリケーションの作り方」

「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践」という書籍が3/1に発売されました。体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践作者: 徳丸浩出版社/メーカー: SBクリエイティ…

the Month of PHP Security

結構、前になりますが、2010/05/01 から 1ヶ月間、http://php-security.org/ で the Month of PHP Security として、PHP とその周辺のセキュリティ問題が報告がされていました。 そのほとんどの問題について、実証コードも掲載されています。その中で、PHP …

PHP 5.3.2 での修正点や機能追加について

PHP

先日、PHP 5.3.2 が公開されました。セキュリティ問題を含む多くの修正や機能追加が行われています。 PHP 5.2.12 や PHP 5.2.13 で修正され、PHP 5.3.1 に含まれていないセキュリティ問題の修正も含まれていますので、特に PHP 5.3.0 や PHP 5.3.1 を使って…

PHP 5.3.0 の日付処理クラスと関数の追加・変更について

PHP

PHP 5.3.0 が公開されたのは結構前ですが、日付関係の処理について、PHP 5.3.0 でクラスや関数の追加・変更がありましたので、気になった部分だけ調べてみました。 新しく追加されたクラスとメソッド PHP 5.3.0 では、以下のクラスが追加されました。 DateIn…

文字エンコーディング判定スクリプト

PHP

最近、忙しかったのですが、久しぶりに少し時間があったので、随分前に書いた文字エンコーディング判定スクリプトを見直してみました。とりあえず、出来上がったものを投稿しておきます。 何か適当な日本語の文字列を与えると、JIS/eucJP-win/SJIS-win/UTF-8…

PHP 5.2.12 の文字エンコーディング関連の修正点

PHP 5.2.12 がリリースされました。 PHP 5.2.12 Release Announcement PHP 5.2.12 ChangeLog Release Announcement にも載っていますが、以前、日記に書いた htmlspecialchars() が Shift_JIS の一部の文字を通してしまう問題は、セキュリティ問題として修正…

いわゆる半角カナや種依存文字などをメールで送信する方法

随分前から書こうと思っていて忘れていたのですが、役に立つ人がいるかもしれませんので、書いておきたいと思います。メールの送信エンコーディングに UTF-8 を使用すれば、機種依存文字という問題を気にする必要はほとんどありませんが、まだ一般的には、IS…

最新の PHP スナップショットでの htmlspecialchars()/htmlentities() の修正内容について

前の記事(Shift_JIS では、htmlspecialchars() を使用しても XSS が可能な場合がある)で Shift_JIS ではブラウザによっては XSS が発生する可能性があることを書きました。この問題は、PHP の開発版のスナップショット(snaps.php.net)で修正されたことを確認…

Shift_JIS では、htmlspecialchars() を使用しても XSS が可能な場合がある

以下のページに関連して、htmlspecialchars() を使用している場合でも XSS が可能かどうか少し調べてみました。 http://www.tokumaru.org/d/20090930.html その結果、いくつかのブラウザで文字エンコーディングに Shift_JIS を使用していた場合、XSS が可能…

出力時の文字エンコーディング変換、妥当性確認について

PHP

大垣さんが以下のページで PHP について言及しておられますので、気になったことを書いておきたいと思います。 http://blog.ohgaki.net/rails-ruby-1-9 私は、現在、PHP で構築したサイト運用はしていませんので、出力時に文字エンコーディングを変換、妥当…

指定日の unixtime を求める方法

PHP

id:hnw さんの日記に以下のような投稿がありましたので、反応してみます。 特定の日時のunixtimeが知りたくなった時って皆さんどうしてますか?例えば2009/09/26 23:00:00 JSTであれば次のワンライナーで求められます。$ php -r 'echo mktime(23,0,0,9,26,20…

文字エンコーディングの妥当性確認(バリデーション)について

PHP

大垣さんからコメントをいただきましたので、最後に追記しました(2009.09.22)。 少し時間が経ってしまいましたが、以下のページを読んで、PHP に関連する部分について思ったことを書きたいと思います。 http://blog.ohgaki.net/char_encoding_must_be_valida…

PHP の svn Revision 287790 での修正で脆弱になったと言えるか

PHP

yohgaki さんから、以下のようなコメントをいただきましたので、少し調べてみました。 何か間違いや勘違いをしているような部分がありましたら、是非コメントでご指摘ください。 http://svn.php.net/viewvc/php/php-src/branches/PHP_5_2/ext/xml/xml.c?r1=2…

最近、PHP の関連でやったことなど

PHP

以前に書いた、UTF-16(BOM 付き Little Endian) を mb_convert_encoding() で変換すると文字列が壊れる件と、mb_detect_encoding() の挙動を調べていた際に見つけた問題について、Patch を PHP-dev のメーリングリストに送ってみました([PHP-dev 1488] mbstr…

プライベートメソッドに対するテスト方法

PHP

phpunit などを使って PHP スクリプトをテストする時に、プライベートメソッドをテストしたくなる時があると思いますが、PHP では結構難しいように思います。 PHP でプライベートメソッドをテストする方法として、思い付くのは以下の方法くらいでしょうか。 …

第45回PHP勉強会@関東に参加してきました

PHP

8/1に開催された第45回PHP勉強会@関東に参加してきました。 会場を提供してくださったはてな様(六本木のお好み焼き屋さん)、幹事の gusagi さん、どうもありがとうございました。 今回も楽しく過ごすことができました。私が発表した資料を以下の場所にアッ…

PHP 5.3.0 の mbstring で使用可能な文字コード名とエイリアス

PHP 5.3.0 で mb_encoding_aliases() が追加されました。 この関数は、第1引数に指定した文字コードが mbstring で使用できる場合、そのエイリアス名を配列で返します。引数の文字コードは大文字、小文字を区別しません。また、MIME名やエイリアス名も指定可…

PHP 5.3.0 への移行で脆弱な Web アプリケーションが発生する?

PHP

PHP6移行で増える脆弱なWebアプリ(yohgaki's blog) を読んで、結構気になったので、調べてみました。調べてみた結果、私には特に問題となるような箇所は見つけられませんでした。調べたことについてメモしておきます。 問題 PHP6移行で増える脆弱なWebアプリ…

PHP 5.3.0 で追加された拡張モジュール・クラス・関数など

PHP

少し前に PHP 5.3.0 が公開されましたので、追加された拡張モジュールやクラス、関数などを調べてみました。比較対象は PHP 5.2.10 です。 PHP 5.2.10、PHP 5.3.0 の両方とも、以下のオプションでコンパイルしました。 ./configure \ --with-apxs=/usr/local…

mb_check_encoding() の代替関数

PHP

これまでに挙げた文字コードについて、正規表現を使用して mb_check_encoding() の代替用の関数を書いてみました。ある程度、妥当なものになっているとは思いますが、間違い等に気付いた方がおられましたら、ご指摘ください。 UTF-8 については、RFC3629 を…

mb_detect_encoding() は文字コードの妥当性検証として使用できるか(その3)

遅くなりましたが、以下の続きです。 mb_detect_encoding() は文字コード判定として使用できるか(その1)) mb_detect_encoding() は文字コード判定として使用できるか(その2)) 今回は ISO-2022-JP、ISO-2022-JP-MS、UTF-16、UTF-16BE、UTF-16LE について、mb_…

mb_check_encoding() の内部処理

参考までに、mb_check_encoding() が内部で何をしているかについて書いておきます。 mb_check_encoding() は mb_convert_encoding() で第2引数と第3引数に同じ文字コードを指定した場合と同じ処理い、元の文字列と、変換後の文字列が同じかどうかで TRUE/FAL…

mb_detect_encoding() は文字コードの妥当性検証として使用できるか(その2)

前回(mb_detect_encoding() は文字コード判定として使用できるか(その1))の続きです。 mb_check_encoding() と mb_detect_encoding() を正規表現として表わして比較してみました。各文字コードごとにまとめます。調査した PHP のバージョンは、5.2.9 で、前…

mb_detect_encoding() は文字コード判定として使用できるか(その1)

最近、mb_detect_encoding() について調べていたので、そのメモです。mb_detect_encoding() は文字コード検出を行う関数です(mb_detect_encoding() - PHP マニュアル)。 結論としては、以下の問題があるため、mb_detect_encoding() を文字コード判定には向い…