タグ

hnwに関するockeghemのブックマーク (19)

  • 『体系的に学ぶ 安全なWebアプリケーションの作り方』のススメ - hnwの日記

    (2011/03/04 14:00 追記)id:shin1x1さんのはてブコメントに基づきheader関数の挙動について修正しました。ご指摘ありがとうございました。 徳丸浩さん(id:ockeghem)が書かれたセキュリティ『体系的に学ぶ 安全なWebアプリケーションの作り方』が3/1に発売されました。このPHPのサンプルコードがふんだんに提示されているセキュリティの解説書で、セキュリティの理解を深めたいWeb技術者全員にお勧めしたいです。 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 作者: 徳丸浩出版社/メーカー: SBクリエイティブ発売日: 2011/03/01メディア: 単行購入: 119人 クリック: 4,283回この商品を含むブログ (146件) を見る 僕はこののレビュアーとして参加させて頂きましたが、他のレビュアーの方々が

    『体系的に学ぶ 安全なWebアプリケーションの作り方』のススメ - hnwの日記
    ockeghem
    ockeghem 2011/03/05
    『この本で僕が特徴的だと思う点を3点紹介します』<この3点を紹介してくださったことが嬉しいですね。また、レビュアーをお引き受けいただきありがとうございました
  • 例えばPHPのpreg_replace関数でe修飾子を避ける - hnwの日記

    (2015/04/19追記)e修飾子はPHP 5.5からdeprecatedになっています。また、PHP7からは廃止されます。 PHPのpreg_replace関数では、e修飾子が利用できます。これはPerlから輸入された機能で、置換後パターンの文字列をPHP文法に従って評価する(evalする)というものです。Perlを知らないとあまり使わない機能かもしれませんが、Perlを知っているとPHPでも使いたくなるのではないでしょうか。記事では、preg_replace関数でe修飾子を使う場合の注意点を指摘し、代替案を示します。 preg_replace関数のe修飾子 preg_replace関数のe修飾子は次のような機能です。 e 修飾子を設定すると、preg_replace() は、参照先の対応する置換を行う際に replacement 引数を PHP コードであるとして取り扱います。re

    例えばPHPのpreg_replace関数でe修飾子を避ける - hnwの日記
    ockeghem
    ockeghem 2010/08/17
    分かりやすい解説をありがとうございます。あわせて読みたい→ http://d.hatena.ne.jp/teracc/20080606#1212764548
  • PHPのY10K問題 - hnwの日記

    PHPは他の言語と同様に、時刻を扱う際にunix epochからの経過秒数(いわゆるunix time)を利用しています。PHP5.2.6以降では、64bit環境であればunix timeも64bitに拡張されています。これで2038年問題も過去のものになるというわけです。 一方、unix timeが64bitに拡張されたことでカオスな結果になることがあるようです。64bit環境のPHP5.2.11で気づいた点を紹介します。 strtotimeが西暦10K年以降に対応していない <?php var_dump(strtotime("9999-12-31 23:59:59")); // int(253402268399) var_dump(strtotime("+10000-01-01 00:00:00")); //int(946648800) ISO8601的に+10000という書き方は正し

    PHPのY10K問題 - hnwの日記
    ockeghem
    ockeghem 2010/02/24
    『2038年問題の次はY10K問題が来ます!業界的に特需間違いなしですね!』<西暦1万年が待ち遠しいです
  • いまさらxargsの便利さを主張してみる — ディノオープンラボラトリ

    タイトルの通りですが、xargsコマンドの便利さを紹介する記事を書いてみました。xargsは私が大好きなコマンドの一つで、標準入力から渡されたファイル名などを引数とみなして、別のコマンドの引数として起動するというものです。 例えばfindで見つけたファイルを全部削除したい場合、xargsなしでも下記のように書くことができます。

  • SplFixedArrayはPHP標準の配列よりメモリを消費しない - hnwの日記

    PHP5.3.0から実装されたSplFixedArrayというSPLクラスがあります。これはマニュアルによれば下記のようなクラスです。 SplFixedArray クラスは配列の主要な機能を提供します。 SplFixedArray と通常の PHPの配列との主な違いは、 SplFixedArray は固定長であって、整数値で指定した範囲内の添字しか使用できないところです。これにより、より高速な配列の実装が可能となりました。 http://docs.php.net/manual/ja/class.splfixedarray.php 制限はあるけれども高速な配列もどきのクラスだと紹介してありますね。このクラスについて少し調べてみました。 SplFixedArrayの速度 まずはSplFixedArrayが当に速いのかどうか、下記のようなプログラムで実験してみました。実験はPHP5.3.0で行

    SplFixedArrayはPHP標準の配列よりメモリを消費しない - hnwの日記
  • LT発表者決定! « スタッフブログ | PHPカンファレンス2009

    広報のsotarokです. 先週26日まで受け付けておりました,LTの発表者が決定しました.(順不同・敬称略) 小山健一郎 「Tokyo Tyrant + PHP」 hnw 「phpall:PHPの全バージョンの挙動を試す」 萩原崇之 「クラウド対応型フレームワーク「Monocheros」」 里 洋平(yokkuns) 「初めてのPHP Extension」 大垣靖男 「PHP4の現状とセキュリティパッチサービス」 以上の5名の方が,PHPカンファレンスを締めくくるべく個性あふれるネタを披露してくださいます. テックデイをお楽しみに! この投稿は 2009 年 9 月 1 日 火曜日 7:35 PM に プログラム カテゴリーに公開されました。 この投稿へのコメントは RSS 2.0 フィードで購読することができます。 コメントを残すか、ご自分のサイトからトラックバックすることができます。

  • PHP 5.3の無名関数を試してみた - hnwの日記

    何番煎じかわからないですが、PHP 5.3からは無名関数が実装されたということで、試しに使ってみました。 見なくても何となく使えるようなものだと思いますが、ドキュメントが「PHP: 無名関数 - Manual」にありますので、ざっと目を通した方がいいと思います。 僕は「どうせ無名関数って中身はcreate_functionなんでしょ?」と思っていたんですが、Closureクラスを使って実装されているなんてことも書いてあります。PHPにしてはマトモっぽくて意外に感じました。 コールバック関数としての無名関数 PHPには引数としてコールバック関数を要求する関数がありますが、PHP5.3.0からは無名関数を引数にしても動くようになりました。 無名関数は、普段の関数と同じノリで「function」から書き始めればOKです。関数宣言との違いは関数名を書かない点だけで、引数やタイプヒンティングについて

    PHP 5.3の無名関数を試してみた - hnwの日記
    ockeghem
    ockeghem 2009/07/11
    できの悪い子の意外な成長を喜ぶ親のような、慈愛に満ちた評。たとえば、ココ>『割と直感的に記述できている印象です。array_mapとarray_filterとで引数の順序が逆なのに気づいて少々のけぞりましたが、まあPHPですしね』
  • PCREはUnicode文字プロパティをサポートするとは限らない - hnwの日記

    (2011/05/19追記)CentOS5のpcreパッケージについて言えば、2010年7月以降Unicode文字プロパティが有効になっているそうです。安心ですね!(via「 CentOS5.5でCakePHP1.3系のInflector::slugを正常動作させる方法 - Lism.in * blog - nekoya (id:studio-m)」) PCREというのは、Perl互換の正規表現ライブラリです。PCREは例えばPHPのpreg系関数で利用されていますし、他の処理系でも多く利用されているかと思います。ところで、PCREの挙動は環境ごとに異なる可能性があることをご存知でしょうか。具体的には、Unicode文字プロパティをサポートする環境としない環境とがあり、同じ正規表現でも挙動が変わることがあります。僕はそんなことを考えた事もなかったので、ビックリしました。 同じ原因で、以前の

    PCREはUnicode文字プロパティをサポートするとは限らない - hnwの日記
    ockeghem
    ockeghem 2009/06/29
    これは素晴らしい指摘。『preg系関数のUnicode文字プロパティは使えない環境があるので注意』
  • array_unique関数がPHP5.2.10から後方互換性を取り戻します - hnwの日記

    「array_unique関数がPHP5.2.9から後方互換性を失いました」の内容について、PHPの中の人も認識を改めたようです。次のようなタレコミがありました。 【速報】「sort()関数は相当おかしい」と PHP 開発者を訴えていた問題で、原告の hnw さんが最高裁で勝訴の模様 http://news.php.net/php.internals/43980 http://wassr.jp/user/moriyoshi/statuses/e04jq6Xu3o id:moriyoshiさんの地道な働きかけのおかげだと思います。ありがとうございます。 そんなわけで、array_uniqueの第2引数のデフォルト値をSORT_STRINGにする(=5.2.8以前の挙動に合わせる)ことで落ち着いたようです。先ほどsnapshotを取って来たところ、5.2系も5.3系も直っていました。 また、P

    array_unique関数がPHP5.2.10から後方互換性を取り戻します - hnwの日記
    ockeghem
    ockeghem 2009/05/16
    hnw++
  • 関数に見えて実は言語構造であるようなPHPキーワード一覧 - hnwの日記

    追記(2009/05/10 09:25):何をもって「関数に見える」かは人によると思いますが、下記のリストはリファレンスマニュアルのURLがfunction.*.phpとなっているものを引っ張ってきました。 PHPには一見関数に見えるけど関数ではないキーワードが多く存在します。つまり、PHPの言語の解釈として関数とは異なる処理をしている関数モドキが何個かあるのです。具体的には、他の関数については関数名の解釈はparserが行うのですが、この「関数に見えるけど言語構造」についてはlexer(tokenizerとも呼ばれます)レベルで別のトークンとして解釈されます。 そんなキーワードをZend/zend_language_scanner.lから抜粋してみました。 array die echo empty eval exit include include_once isset list pri

    関数に見えて実は言語構造であるようなPHPキーワード一覧 - hnwの日記
    ockeghem
    ockeghem 2009/05/10
    関数でないものがちょっと多いね。なんかBASICのノリだなぁと思いました。dankogaiが言った、言語で言語を拡張できないという、PHPの悪口を思い出しますね
  • UTF-8→SJIS/EUC-JPの重複文字をまとめてみた - hnwの日記

    文字エンコーディングの変換を行うと、異なる2文字が同じ文字に変換されることがあります。このような文字を重複文字と呼ぶことにします。UTF-8→Shift_JISおよびUTF-8→EUC-JPについて、重複文字を自分用の資料としてまとめてみました。 MacOSX上のPHP5.2.9での実験結果ですが、プログラミング言語や環境によらず気をつけるべき文字一覧ということになると思います。 色のついている部分が重複している部分です。「-」となっているのは変換できなかった文字です。また、ヘッダのカッコ数字ごとに文字エンコーディング変換に利用した関数が異なります。詳細は下記の通りです。 (1) mb_convert_encoding($char, "Shift_JIS", "UTF-8") (2) mb_convert_encoding($char, "SJIS-win", "UTF-8") (3) i

    UTF-8→SJIS/EUC-JPの重複文字をまとめてみた - hnwの日記
    ockeghem
    ockeghem 2009/05/05
    これは労作。U+00A5がiconvではShift_JISやEUC-JPへの変換に際して0x5Cに変換されるのでセキュリティ上の問題が発生する可能性。参考:http://itpro.nikkeibp.co.jp/article/COLUMN/20090215/324766/
  • 講習会「文字集合と文字エンコーディング」を開催しました — ディノオープンラボラトリ

    「文字集合と文字エンコーディング」というタイトルで、経験2〜3年目の人をターゲットに社内勉強会を開催しました。文字集合という単語を知っている必要はないですけど、少なくともUTF-8とShift_JISとでは扱える文字の種類数が違うことだけは伝えたかったので、その意味では目標が達成できたと思っています。 まとめ 文字集合とは、扱える文字の集合 JIS X 0208なら6000文字くらいの日語の文字 UCS-2なら60000文字くらいの世界中の主要な文字 文字エンコーディングとは、文字の集合をバイト列に直す方式 Shift_JISはJIS X 0208(など)を1〜2バイトにする UTF-8はUCS-2を1〜3バイトにする 文字エンコーディング関連のツールを使いこなそう nkfやlvを使いこなそう 日語を探すならlgrep 最終兵器:hexjaで16進ダンプ ムービー

    ockeghem
    ockeghem 2009/04/21
    ↑UCS-2は、BMPのみを表現する文字エンコーディング(big endian)も指すので、「サロゲートのないUTF-16」と書いても間違いではないと思いますが/http://d.hatena.ne.jp/nurse/20090325#1237964260 などを参照されたし
  • mb_check_encodingは何をチェックするのか(その3 UTF-8編) - hnwの日記

    (2009/10/05追記)「サロゲートペアに相当する3バイト表現も正しいとみなしている」という件はバグとしてPHP5.3.0から修正されているようです。id:moriyoshiさんに超感謝。 PHPのmb_check_encoding関数の調査、おそらく今回が最終回です。今回はUTF-8について調べてみました。 UTF-8 UTF-8というのはUnicodeのエンコーディング形式の一つです。当にざっくり言ってしまうと、ASCIIが1バイト、ヨーロッパ圏の文字が2バイト、漢字などが3バイトで表現されるようなエンコーディングです。 今回は、「UTF-8 - Wikipedia」を参考に、4バイトまでのビットパターンを全数調査しました。5バイト、6バイトも少し実験しました。 1byte : 0xxxxxxx 2byte : 110yyyyx 10xxxxxx 3byte : 1110yyyy

    mb_check_encodingは何をチェックするのか(その3 UTF-8編) - hnwの日記
  • PHP :: Bug #47399 :: mb_check_encoding returns true with illegal SJIS string

    mbstring related Bug Reported by for-bugs@... Mon, 16 Feb 2009 00:05:52 +0000 PHP: 5.2.9RC2, OS: any Description: ------------ mb_check_encoding returns true when specific invalid "SJIS" or "SJIS-win" string. Reproduce code: --------------- <?php var_dump(mb_check_encoding("\x81\x3A", "SJIS-win")); Expected result: ---------------- bool(false) Actual result: -------------- bool(true)

    ockeghem
    ockeghem 2009/02/16
    hnw++
  • mb_check_encodingは何をチェックするのか(その1 SJIS編) - hnwの日記

    (2009/02/15 17:20)「個人的な感想」を追記しました。また、下記はPHP5.2.1以降の挙動です。PHP5.2.0以前のmb_check_encodingは更にカオスなので、あまり使い物にならないと思います。 (2009/02/16 12:30)追記2:バグっぽいと思った件は当にバグで、修正がhttp://news.php.net/php.cvs/56276の通り取り込まれました。PHP5.2.9から修正される予定です。 (2009/02/22 16:20)追記3:他のエンコーディングについても調査しました。「(その2 EUC-JP編)」と「(その3 UTF-8編)」も合わせてご覧下さい。 PHPのmb_check_encoding関数が一体何のチェックをしているのか、エンコーディングごとに一通り調べてみます。 まずはSJISとSJIS-win(CP932)について調べてみ

    mb_check_encodingは何をチェックするのか(その1 SJIS編) - hnwの日記
    ockeghem
    ockeghem 2009/02/15
    貴重な情報ありがとうございます。追試とセキュリティ上の影響を当方でも調査してみます
  • 第38回PHP勉強会に参加してきました - hnwの日記

    第38回PHP勉強会に参加して、5分ほどLTをしました。勉強会の会場はトライコーン株式会社さんにお貸し頂きました。ありがとうございます。 発表資料:「PHPの全バージョンを揃えよう」(PDF) Ustream録画:http://www.ustream.tv/recorded/989155 (5:54) というわけで、みんな複数バージョンのPHPを用意しましょう。結構ウケていた気がしますが、僕は半分くらい気です。 全バージョンと言いつつPHP5だけかよ、という意見もあるとは思いますが、PHP5.0.5あたりまでの古いバージョンはgcc4でコンパイルするのに工夫が必要とか、PHP5だけでも多少困難があるんです。PHP4を全部揃えるとか言い出したら面倒すぎて死ぬと思います。 ビルドの方法やphpallコマンドの紹介などは別の記事としてまとめました(「phpallコマンドでPHPの全バージョンの

    第38回PHP勉強会に参加してきました - hnwの日記
    ockeghem
    ockeghem 2009/01/27
    面白かったです。僕が常駐させているPHPは5バージョンで,5.2.7もありです
  • PHPの浮動小数点数の表示 - hnwの日記

    PHPのround関数のリファレンスマニュアルのページに面白いコメントを見つけたので紹介します。 <?php echo 1100000.0, "\n"; echo 1200000.0, "\n"; echo 1300000.0, "\n"; echo 1400000.0, "\n"; 上記のプログラムをPHPのバージョン5.2.2〜5.2.6のいずれかで実行すると、下記の結果が得られます。 1100000 1.2E+6 1300000 1.4E+6 これはキモいですね。print_rやvar_dumpでも同様の挙動です。 興味がわかなかったので原因は追いかけていません。この挙動が影響するようなコードを書いている人は、printfを使う習慣を身につけるべきだと思います。

    PHPの浮動小数点数の表示 - hnwの日記
    ockeghem
    ockeghem 2008/12/12
    『これはキモいですね』
  • PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった - hnwの日記

    (2016/07/02 20:00追記)稿をさらに掘り下げた記事「PHPのround関数を読み解く (1)丸め桁数が大きすぎ・小さすぎる場合」「PHPの新しいround関数を読み解く (2)pre-roundingの意味」を書きました。合わせてご確認ください。 12月4日付でPHP5.2.7とPHP5.3.0alpha3が同時リリースされましたが、これに関連して毎度おなじみPHPのround関数の話題です。相変わらず記事は長いので簡単なまとめから。 PHP5.3.0alpha3ではこれまでのPHPのいずれとも違うround関数が実装されました。少々疑問は残るものの、比較的マシな実装だと僕は考えています。今回は0.50000000001のような不思議な数は含まれていませんし、問題が起こる例が以前より減ったように思います。 第3引数で丸め方式を選択できるようになりました。四捨五入(デフォルト

    PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった - hnwの日記
  • PHPの==がキモい件 - hnwの日記

    どうやら僕はround()の人なんだそうです(参考資料)。それはそうとして、もう少し前までは==の人だった気がしますので、その頃の話題を再掲します。 僕は2年ほど前に「==がキモい件」などのタイトルで勉強会で発表していた頃がありました。PHPの==演算子の挙動について、啓蒙が必要だろうと考えていたためです。当時に比べれば最近はPHPの==演算子の不思議な挙動に関する記事を見る気がしますが、まだまだキモさの全容を把握している人は少ないような気もします。 PHPの==演算子の何がキモいのか、一言で言うと両辺の値の型をテキトーに合わせて比較する点です。言い換えると、「型はさておき、等しい値を意味しているようならtrue」という演算子です。 マニュアルの「PHP 型の比較表」の「==による緩やかな比較」を見てもキモさがチラホラ見えるんですが、今回は更に突っ込んだ比較表を作ってみました。 まずは以前

    PHPの==がキモい件 - hnwの日記
  • 1