タグ

PHPに関するockeghemのブックマーク (413)

  • 大規模 Web サービスでログインを長期間保持するには SESSION は使わず Cookie とデータベースだけで実装する | ウェブル

    先日ペコリンという Web サービスを公開したのですが、これが初めての WordPress との複合会員向けサービスだったためか、ログインが途中で切れたり、記事投稿時のリダイレクトがかかるタイミングなどで SESSION が切れてしまうことがありました。 しかし Twit Delay では長期的にログインが保持されていたり、mixi とかではログイン時間を指定できたりするので、なんとかできるものだろうと考えていたら Twitter で教えてもらいましたのでまとめておきます。 SESSION だけを使ったログインの保持では長期ログインは不可 私は今までログインの保持は以下のようにしていました。 1 2 3 4 5 <?php ini_set('session.gc_maxlifetime', 60*60*24); ini_set('session.gc_divisor', 10000); s

    ockeghem
    ockeghem 2011/04/26
    自作セッション管理機構は脆弱性の巣窟なので、よい子の皆さんは絶対に真似しないように/注意を追記いただきました。ありがとうございます
  • PHPの新しいround関数にバグをみつけた - hnwの日記

    PHP 5.3.0以降、PHPのround関数の挙動はChristian Seilerさんが提案したRFCに従って一新されています。この新しいround関数の仕様上の問題もしくはバグを見つけました。 以前の記事「PHP5.3.0alpha3のround関数の実装がPHP5.2.6と変わった」でこの新しい実装は「今までよりは良い実装」ではないかと書きましたが、撤回すべきかもしれません。ベースのアイデアとしては以前の記事にも書いた通り悪くないと思うのですが、考え漏れがあるような気がしています。 たとえば次のサンプルコードを見て下さい。 <?php ini_set("precision",19); var_dump(1000000000000000.125); var_dump(round(1000000000000000.125)); サンプルコード中の1000000000000000.125

    PHPの新しいround関数にバグをみつけた - hnwの日記
    ockeghem
    ockeghem 2011/04/07
    『普通に考えれば、roundが整数を返さないのはおかしいですよね』
  • 忙しい人のための「初めてのPHP」

    この記事は7年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。説明は適度に、駆け足でお届けします。 言っておきますが、これを覚えたからと言って「PHP出来ます!(キリッ」とか言ったら鼻で笑われるレベルだということは認識しておいてくださいね。 <追記あり:2012/02/16> 大前提 HTML/CSSの基的なところはわかってるものとします。FTPでアップロードするって意味さえわからない人はこのへんで勉強してください。つまり、出直してください。 あと、もっとちゃんと勉強したい人はこんな駄文を読まないほうがいいです。アシアルさんのコンテンツを読んでください。この文章の100倍素晴らしいコンテンツが満載です。 エディタ Windowsユーザなら、標準で付いてるメモ帳を使うのはやめましょう。 PHPに限らず、プログラムを触るなら、あんなもん使わないでください。文字コードも変更でき

    忙しい人のための「初めてのPHP」
    ockeghem
    ockeghem 2011/03/30
    echo $hoge; としているところは全て、echo htmlspecialchars($hoge, ENT_QUOTES, 'UTF-8'); として欲しいな。本番でecho $hoge;と書いたら大抵脆弱性になるので
  • PDO/MySQL(Windows版)の文字エンコーディング指定の不具合原因 - 徳丸浩の日記(2011-03-29)

    _PDO/MySQL(Windows版)の文字エンコーディング指定の不具合原因 前回のブログ「PHP5.3.6からPDOの文字エンコーディング指定が可能となったがWindows版では不具合(脆弱性)あり」にて、PHP5.3.6(エントリ執筆時点での最新版)からPDOにてサポートされた文字エンコーディング指定がWindows版では正しく動作しないことを報告しました。Linuxでは正常に動作するので不思議だなという話になっていたのですが、千葉征弘さん(@nihen)が調べてくださった結果がtwitter上で発表されました(toggerによるまとめ「PHP5.3.6からPDOの文字エンコーディング指定が可能となったがWindows版では不具合にまつわる件」)。この件につき、当ブログでも報告します。 問題点の復習 PHP5.3.6以降のPDOでは、データベースに接続する際の文字エンコーディングを

    ockeghem
    ockeghem 2011/03/29
    日記書いた/ @nihenさん経由
  • PHP For Windows: Binaries and sources Releases

    This site is dedicated to supporting PHP on Microsoft Windows. It also supports ports of PHP extensions or features as well as providing special builds for the various Windows architectures. If you like to build your own PHP binaries, instructions can be found on the Wiki. PECL For Windows PECL extensions for Windows is being worked on. Windows DLL can be downloaded right from the PECL website. Th

    ockeghem
    ockeghem 2011/03/22
    『As you may have heard, it was discovered on March 19 that one of the php.net servers was compromised by unknown attackers.』<げげ、ダウンしていると思ったら攻撃を受けていたのか
  • PHP5.3.6からPDOの文字エンコーディング指定が可能となったがWindows版では不具合(脆弱性)あり - 徳丸浩の日記(2011-03-22)

    _PHP5.3.6からPDOの文字エンコーディング指定が可能となったがWindows版では不具合(脆弱性)あり PHP5.3.6からPDO/MySQLにてデータベースの接続文字列にて文字エンコーディングが指定可能となりました。この機能を検証した結果、Linux上では正常な動作を確認しました。Windows版でも一見動作するようですが、動的プレースホルダ内部のエスケープ処理に不備があり、Shift_JISでデータベースと接続している際にSQLインジェクション脆弱性の可能性があります。 きっかけ @haruyamaさんのツイートがきっかけで、PHP5.3.6からPDOの文字エンコーディング指定が有効となったことを知りました。 PHP 5.3.6以降では PDO/MySQLのDSNでのcharset指定が有効になったようです. (MySQL 4.1.11以降, MySQL 5.0.7以降, もし

    ockeghem
    ockeghem 2011/03/22
    日記書いた
  • PHP で「外部ファイル取り込み」を再学習 :: セキュリティについてもっと知りたい! - kwsktr's study log

    久しぶりに PHP に触ったら、当たり前の事をすっかり忘れていました。 外部ファイルの読み込みとかも、適当だったりしてセキュリティ的に非常にマズイなぁと思ったのでちょっとだけ調べてみました。 『体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践』を立ち読みしたから、なんですけれどね。 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践posted with amazlet at 11.03.10徳丸 浩 ソフトバンククリエイティブ 売り上げランキング: 258 Amazon.co.jp で詳細を見る ソフトバンク クリエイティブ:体系的に学ぶ 安全なWebアプリケーションの作り方 1章 Webアプリケーションの脆弱性とは 1.1 脆弱性とは、「悪用できるバグ」 1.2 脆弱性があるとなぜ駄目なのか 1.3 脆弱性が生まれる

    PHP で「外部ファイル取り込み」を再学習 :: セキュリティについてもっと知りたい! - kwsktr's study log
    ockeghem
    ockeghem 2011/03/10
    「『体系的に学ぶ 安全なWebアプリケーションの作り方』が、ホントにスゴイんです。Webプログラマは、騙されたつもりで手にとってみることをオススメします」<言及いただきありがとうございます
  • 「体系的に学ぶ 安全なWebアプリケーションの作り方」 - t_komuraの日記

    「体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践」という書籍が3/1に発売されました。 体系的に学ぶ 安全なWebアプリケーションの作り方 脆弱性が生まれる原理と対策の実践 作者: 徳丸浩出版社/メーカー: SBクリエイティブ発売日: 2011/03/01メディア: 単行購入: 119人 クリック: 4,283回この商品を含むブログ (146件) を見る脆弱性が生まれる原理からその解消方法まで、丁寧に説明されています。タイトル通り、体系的に Web アプリケーションセキュリティについて学ぶには最適の書籍だと思います。これまでに出版された書籍や Web サイトは、攻撃方法とその対策という形で書かれることが多かったように思いますが、この書籍では脆弱性がなぜ生まれるのかに重点を置いて説明されています。脆弱性が生まれる原理を理解することは、小手先の対策ではな

    「体系的に学ぶ 安全なWebアプリケーションの作り方」 - t_komuraの日記
    ockeghem
    ockeghem 2011/03/06
    紹介ありがとうございます。また、レビュアーをお引き受けくださりありがとうございました。t_komuraさんの指摘は大変ありがたいものでした
  • 一部の言語構造と関数で引数の値に NULL バイトが含まれていた場合の挙動修正 - t_komuraの日記

    PHP 5.3.4(最新は PHP 5.3.5) で、引数の値にファイルパスが指定可能な言語構造と関数に NULL バイトが含まれていた場合、処理が失敗するように修正されました。 http://svn.php.net/viewvc?view=revision&revision=305507 簡単に調べてみたところ、少なくとも、以下の言語構造と関数が該当するようです。 言語構造 include include_once require require_once Bzip2 bzopen Enchant enchant_broker_request_pwl_dict Fileinfo finfo_open GD image2wbmp imagegd2 imagegif imagejpeg imagepng imagewbmp imagexbm iptcembed jpeg2wbmp png2w

    一部の言語構造と関数で引数の値に NULL バイトが含まれていた場合の挙動修正 - t_komuraの日記
    ockeghem
    ockeghem 2011/03/06
    『少しだけ NULL バイトを使用した攻撃が成功しにくくなりました。ただ、この修正は脆弱性の原因を根本的に解消するようなものではない…』
  • 『体系的に学ぶ 安全な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点を紹介してくださったことが嬉しいですね。また、レビュアーをお引き受けいただきありがとうございました
  • CSRF対策のトークンをワンタイムにしたら意図に反して脆弱になった実装例

    補足 この記事は旧徳丸浩の日記からの転載です(元URL、アーカイブはてなブックマーク1、はてなブックマーク2)。 備忘のため転載いたしますが、この記事は2011年1月27日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり 橋口誠さんから今話題の書籍パーフェクトPHP (PERFECT SERIES 3)を献いただきました。ありがとうございます。このエントリでは同書のCSRF対策の問題点について報告したいと思います*1。 書では、CSRFの対策について以下のように説明されています(同書P338)。 CSRFへの対応方法は、「ワンタイムトークンによるチェックを用いる」「投稿・編集・削除などの操作の際にはパスワード認証をさせる」などがあります。一番確実な方法は両者を併用することですが、ユーザ利便性などの理由から簡略化する場合で

    ockeghem
    ockeghem 2011/01/27
    日記書いた / ↑id:n2s セッションIDが推定できるのであればCSRF以前に成りすましができてCSRF攻撃以上の影響がでます。ですから、セッションIDが推定できないことはWebアプリの大前提です
  • escapeshellcmd

    ockeghem
    ockeghem 2011/01/05
    PHP3→4時代のマニュアルには『標準的な使い方は以下のようになるでしょう。 system(EscapeShellCmd($cmd))』<やはりそうか。でもなぜマニュアルの記述がかわった?
  • CakePHPのSecurityComponentの脆弱性で任意のPHPコードが実行できる仕組み - disり用。

    もはや懐かしい感じのあるCakePHPセキュリティトークンから任意のPHPを実行できる脆弱性ですが、なぜこれで任意のPHPコードが実行可能になってしまうのか心配で夜も眠れない方の為に、実行される仕組みを解説してみようと思います。詳細とアドバイザリ、PoCは以下のものを参照しています。 http://co3k.org/diary/12 http://malloc.im/CakePHP-unserialize.txt http://malloc.im/burnedcake.py CakePHPSecurityComponentが提供するCSRF対策のトークンは単一の識別子ではなく、':' でトークンと$lockedという謎の値が繋がれたものになっています。$lockedには配列をシリアライズしたものをROT13で変換したものが入っています。この$lockedに任意の値を入れることで任意のP

    CakePHPのSecurityComponentの脆弱性で任意のPHPコードが実行できる仕組み - disり用。
    ockeghem
    ockeghem 2011/01/04
    解説ありがとうございます。際どい攻撃ですが、諸般の事情により成立してしまうところがなんとも
  • escapeshellcmdの危険な実例

    補足 この記事は旧徳丸浩の日記からの転載です(元URL、アーカイブはてなブックマーク1、はてなブックマーク2)。 備忘のため転載いたしますが、この記事は2011年1月4日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり 先日の日記PHPのescapeshellcmdの危険性ではPHPのescapeshellcmd関数の危険性について指摘しましたが、脆弱となる実例を挙げていなかったので、「当に危険なのか」と半信半疑の方もおられると思います。そこで、同関数が危険となる実例を考えたので報告します。 grepを使って、サーバー内を検索するスクリプトを考えます。 <?php header('Content-Type: text/html; charset=UTF-8'); ?> <html> <body><pre> <?php $k

    ockeghem
    ockeghem 2011/01/04
    日記書いた
  • PHPのescapeshellcmdの危険性 - 徳丸浩の日記

    補足 この記事は旧徳丸浩の日記からの転載です(元URL、アーカイブはてなブックマーク1、はてなブックマーク2)。 備忘のため転載いたしますが、この記事は2011年1月1日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり を書いています。初稿を一通り書き上げ、第2稿を作成中です。その過程で見つけたことを報告します。 PHPのescapeshellcmdはパラメータをクォートしないので呼び出し側でクォートする必要がありますが、escapeshellcmdの仕様がまずいために、呼び出し側でクォートしても突破できることが分かりました。 escapeshellcmdの仕様 PHPにはシェルのパラメータをエスケープする関数が2つあります。escapeshellargとescapeshellcmdです。escapeshellargは、エ

    ockeghem
    ockeghem 2011/01/01
    日記書いた
  • PHP: News Archive - 2010

    Getting Started Introduction A simple tutorial Language Reference Basic syntax Types Variables Constants Expressions Operators Control Structures Functions Classes and Objects Namespaces Enumerations Errors Exceptions Fibers Generators Attributes References Explained Predefined Variables Predefined Exceptions Predefined Interfaces and Classes Predefined Attributes Context options and parameters Su

    ockeghem
    ockeghem 2010/12/10
    『This release(PHP5.2.15) marks the end of support for PHP 5.2. All users of PHP 5.2 are encouraged to upgrade to PHP 5.3. 』<【重要】PHP5.2系のサポート終了
  • PHP: The Good Parts

    書は、PHPの最も便利な機能を取り上げて詳しく解説し、さらに、どうすればウェブ開発のプロセスをスピードアップできるのか、よく利用されるPHPのエレメントが誤って実装されてしまうことがあるのはなぜなのか、どんな「パーツ」がオブジェクト指向プログラミングに適するのかといった実際的な問題の理由を解き明かします。PHPの初学者から他の言語で開発経験のある開発者まで、幅広い読者を対象としており、基項目を軸にしてていねいに解説。手早くPHPについての理解を深めることができます。プロフェッショナルな開発者にとっては、既存の知識やテクニックを棚卸しして、新鮮な視点を取り入れるきっかけとして役立つでしょう。 序文 1章 グッドパーツ 1.1 なぜPHPなのか 1.1.1 PHPの簡単な歴史 1.1.2 PHPが占める位置 1.1.3 PHPとは何か 1.1.4 PHPでどのようなものが作られてきたか 1

    PHP: The Good Parts
    ockeghem
    ockeghem 2010/11/25
    期待して…いいのか? ゴクリ…/ 個人的には『9.4 パスワードの暗号化』が気になる/原書をAmazonのなか見!で調べたら、固定Saltだったorz
  • PHP5 __destruct() and unserialize() function - TokuLog 改メ tokuhirom’s blog

    http://co3k.org/diary/12 このへんみておもったこと。 unserialize() 関数はオブジェクトの unserialize もできるのだが、5 以後では __destruct() が導入されているので、その unserialize したオブジェクトの __destruct() がよばれてしまう。この際に、たとえば cache の処理などで __destruct() でファイルにデータをかきこむ、などの処理をしていると、そのファイルが汚染されてしまったりするということがおきうる。 で、実際に cakephp ではそういう状況になって、任意のコードが実行可能になった、と。 まとめると 5 以後では unserialize() をユーザーからの入力にたいしてはかならず検証してからおこなうようにするべき。 っていうか、ユーザーの入力にたいしては unserialize(

    ockeghem
    ockeghem 2010/11/18
    『unserialize したオブジェクトの __destruct() がよばれてしまう…__destruct() でファイルにデータをかきこむ…そのファイルが汚染され』
  • CakePHPのSecurityComponentに深刻なセキュリティホールが見つかりました

    すでにご存知の方も多いと思うのですが、CakePHPに深刻なセキュリティホールが見つかりました。 SecurityComponentの実装に問題があり、結果、外部から任意のコードを実行させることができるという深刻な内容です。 セキュリティホールの概要や攻撃手順については以下のエントリが詳しいですので、ご一読を。 CakePHPPHP コード実行の脆弱性を使って CakePHP を焦がす なお、今回の問題はSecurityComponentを利用していない場合は発生しません。 もしSecurityComponentを利用している場合は、以下のいずれかの方法で早急に対策してください。 1. CakePHP1.2.9 or 1.3.6にアップグレードする。 この脆弱性を受けて修正バージョンが出ています。 CakePHP 1.3.6 and 1.2.9 released | The Bake

    ockeghem
    ockeghem 2010/11/18
    脆弱性告知のお手本。影響内容、影響を受ける条件と判定方法が明快に説明されている。CakePHPユーザはすぐに読むべし
  • [PHP] $_GET とか $_POST するとき htmlspecialchars には ENT_QUOTES をした後 addslashes しておく必要がある | ウェブル

    ockeghem
    ockeghem 2010/11/11
    でたらめ。このエントリの元記事はJavaScriptの文字列リテラルのエスケープの話。その前提がすっかり抜け落ちている