タグ

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

  • PHP 7.3 – yohgaki's blog

    (Last Updated On: 2018年12月2日) PHP 7.3が今月(2018/12)リリース予定です。新機能や機能変更は小振りですが、結構多くの追加/変更があります。ソースコード中のUPGRADINGに変更点は記載されています。ここでは独断と偏見で選んだ重要度が高い追加/変更を紹介します。 ※ PHP 7.3.0 RC6時点のUPGRADINGから紹介します。 記載していない変更の方が多いです。詳しくはリリース版のUPGRADINGを参照してください。 エラー処理の強化 バンドルされているモジュールのエラー処理はお世辞にも理想的と言える処理ではなかったモノがあります。これらのエラー処理が改善されました。エラーの発生の仕方やエラー発生後の動作が異なることになります。これでは困る事になるかも?と思うかも知れませんが、おかしな動作を起こすデータやコード、はそもそも問題の原因です。問

    PHP 7.3 – yohgaki's blog
    gayou
    gayou 2018/12/03
  • Railsのリモートコード実行脆弱性、今昔 – yohgaki's blog

    (Last Updated On: 2018年10月9日) 去年、今年とStruts2、Drupalのリモートコード実行脆弱性が問題になりました。記憶に新しい方も多いと思います。Railsにもリモートコード実行脆弱性が複数レポートされており、Railsユーザーであればよくご存知だと思います。 ざっと思い付く昔の脆弱性から最近の脆弱性まで簡単にまとめてみます。 evalやexec Rubyのコードを実行する機能です。当たり前ですが、ユーザー入力を許可し、入力データをバリデーション&エスケープしていないとRubyコードが実行されます。 Kernel.execが攻撃に使えるとコマンドが自由に実行できます。(OSコマンド実行脆弱性)Rubyコードの作成も自由自在なので、Rubyコードの実行にも利用できます。 RubyもUNIX系とWindowsをサポートしており、コマンドラインのシェルが異なります

    Railsのリモートコード実行脆弱性、今昔 – yohgaki's blog
  • php-session-cookie-samesite-support

    (Last Updated On: 2018年8月13日)PHPのセッションID用クッキーと他のクッキー関数にSameSiteサポートが追加されます。 https://wiki.php.net/rfc/same-site-cookie これによりクロスサイト・リクエスト・フォージェリ攻撃(CSRFやXSS)などを緩和できます。 仕様 setcookie, setrawcookie, session_set_cookie_paramsの第4引数/第2引数に配列としてpath, domain, secure, httponly, samesiteが設定できる。 今までの属性は個別の引数として設定できましたが、SameSiteは配列としてのみ設定できます。 同じサイトからのリクエストの場合のみクッキーを設定する:samesite = Strict $cookie_opt = [ 'secure'

    php-session-cookie-samesite-support
    gayou
    gayou 2018/07/19
  • PHP:タイプヒントを使うと遅くなる

    (Last Updated On: 2018年8月13日)PHPにはタイプヒントと呼ばれる引数/戻り値データ型指定機能があります。これは便利な機能ですが性能に影響を与えます。 データ型チェックのオーバーヘッド 性能への影響は簡単なベンチマークで確認できます。単純な加算を行う関数fを定義して確認しました。PHPのバージョンは7.0.19です。 タイプヒントを指定しない場合 $ php -r 'function f($a, $b) { return $a + $b; } $s=microtime(true); for($i=0;$i<100000000;$i++) { f(2,3); } echo microtime(true) - $s, "\n";' 2.4526360034943 intタイプヒントを指定した場合 $ php -r 'function f(int $a, int $b)

    PHP:タイプヒントを使うと遅くなる
    gayou
    gayou 2017/06/14
  • セッションデータインジェクション

    (Last Updated On: 2018年8月13日)PHP 5.6.25/7.010以降で修正されたセッションデータインジェクション Fixed bug #72681 (PHP Session Data Injection Vulnerability). (CVE-2016-7125) の解説です。 この脆弱性を利用するとオブジェクトインジェクションが簡単に行えます。結構深刻な問題ですが、あまり話題にはなっていないように思います。 最初にこのエントリを書いた時にはレガシーコードの残骸を読み間違えて、幅広い影響があると勘違いしていました。現在のPHPでは値が設定されていないセッション変数は定義できないので、影響するケースは”セッション変数を制御できる状態”に限られます。このレガシーコードの残骸は必要ないので以下の修正をPHPのmasterブランチにコミットする予定です。 https:/

    セッションデータインジェクション
  • プライベートサイトを作るならPHPのURL Rewriterを使う

    この関数は、URL リライト機構に新しい名前/値の組を追加します。 名前および値は、URL (GET パラメータとして) およびフォーム (hidden フィールドとして) で追加されます。これは、session.use_trans_sid で透過的 URL リライティングが有効になっている場合に セッション ID が渡される方法と同じです。 この関数の挙動は、php.ini パラメータ url_rewriter.tags および url_rewriter.hosts によって制御されます。 注意: もし出力バッファリングが有効になっていない場合、この関数を コールすると出力バッファリングが暗黙的に開始されます。 このマニュアルページはPHP 7.1の説明になっています。私がURL Rewriterのバグを修正し、仕様を拡張(url_rewriter.hosts設定、専用の出力バッファを追

    プライベートサイトを作るならPHPのURL Rewriterを使う
    gayou
    gayou 2016/10/28
  • PHPスクリプトの分析ツール

    (Last Updated On: 2018年8月13日)PHPスクリプトを分析するツールをまとめたページの紹介です。 PHPのコードを分析して脆弱性を見つける為のツールから、PHPソースコードを整形するツール、PHPスクリプトの内容の分析をするツールなど色々あり、よくまとまっています。 https://github.com/exakat/php-static-analysis-tools ここに載っていない物でいつも利用している物に3v4l.orgがあります。PHPソースコード/スクリプトの解析ツールといっても良い物で、ちょっとしたコードをチェックするにはオススメです。簡単に機能を紹介します。 現在のリリース版からサポートが終了したPHP4まで含めた複数のPHP実行環境でPHPスクリプトを実行し結果を比較 複数のPHP実行環境でのスクリプト実行時間の比較 OPコードの表示(PHPバイトコ

    PHPスクリプトの分析ツール
    gayou
    gayou 2016/10/20
  • PHPへのメールヘッダーインジェクション

    (Last Updated On: 2018年8月13日)メールヘッダーインジェクションによる攻撃は一昔前に流行った攻撃です。最近ではあまり聞きませんが、PHPのmail/mb_send_mail関数はメールヘッダーインジェクションに対して十分に安全でしょうか? 実は十分に安全と言える対策は最近になって追加しました。1つは随分前に、もう1つは最近修正しています。それらの修正を紹介します。 メールヘッダーインジェクションのおさらい メールヘッダーインジェクションとはメールヘッダーが改行文字(\r\n)によって構成されることを利用した改行インジェクション攻撃の一種です。例えば、メールヘッダーインジェクション対策がないメール送信APIの宛先(To)ヘッダーに yohgaki@ohgaki.net\r\nBcc: user@example.com という文字列を設定するとメールヘッダーが To:

    PHPへのメールヘッダーインジェクション
  • PHPの制限一覧

    (Last Updated On: 2018年9月21日)PHPには他の言語と同様に様々な制限があります。まとまった資料が見つからなかったのでまとめておきます。PHPの制限と言っても実行時間の制限のようにマニュアルに記載されているINI設定などは記載していません。 PHPのデータ型制限 整数型 PHPの整数型のレンジはOSにより異なります。 32ビットOS – 符号付き32ビット整数。最大2^31-1、最小-2^31 64ビットOS – 符号付き64ビット整数。最大2^63-1、最小-2^63。ただし、PHP 7.0未満のWindows OSでは64ビットOSでも最大2^31-1、最小-2^31。 ネイティブの整数型を超える範囲の整数には任意精度整数(実質無制限)をサポートするGMPまたはBCmathが利用可能です。モジュールはデフォルトで組み込まれないですがGMPの利用を推奨。PHP 5

    PHPの制限一覧
    gayou
    gayou 2016/03/28
  • Memcachedのプロトコル仕様とセキュリティ – Memcachedでもインジェクションが可能

    (Last Updated On: 2018年8月13日)Memcachedはテキストプロトコルとバイナリプロトコルの二種類を持っています。デフォルトはテキストプロトコルです。テキストプロトコルを利用している場合、テキストインターフェース処理の基を理解した上で利用しないとセキュリティ問題が発生します。こういった処理のセキュリティ対策を行う、確認するには実は標準の方が簡単で明解 – セキュリティ対策の評価方法も参考になります。 Memcachedはキーバリュー型なのでSQLインジェクションのような脆弱性とは無縁、と思っていた方は是非読んでみてください。 Memcachedのテキストプロトコル Memcachedのホームページに書いてあるように、memcachedではテキストでコマンドを送り、その結果が返ってきます。 Play with telnet $ telnet localhost 1

    Memcachedのプロトコル仕様とセキュリティ – Memcachedでもインジェクションが可能
    gayou
    gayou 2015/03/08
    ふだん何気なく使ってるmemcachedにもインジェクションする方法があるとな。
  • PHP7の現状

    (Last Updated On: 2018年8月13日)PHP7が今年の秋リリースされる予定です。まだまだ多くの変更が行われる予定ですが、現状を簡単にまとめてみたいと思います。代表的な物のみ取り上げています。 ご存知ない方の為に書いておきます。現在リリースされているPHPPHP5です。次のPHPPHP7になり、PHP6はリリースされません。PHP6をUnicodeをネイティブ文字列としてサポートするバージョンとして開発されましたが、文字エンコーディングチェックを内部で自動的に行おうとするなど、無駄が多く遅いため破棄されました。(文字エンコーディングのバリデーションは来アプリでするものです)このため、PHP6はスキップされ次のPHPPHP7になります。 追記:PHP7.0は既にリリースされています。概要はPHP 7.0の概要・新機能・互換性、詳しくはマイグレーションドキュメントをご

    PHP7の現状
    gayou
    gayou 2015/01/30
  • Phalcon PHPのRPMパッケージを作る

    (Last Updated On: 2018年8月13日)PHP最速フレームワークのPhalconですが、RPMパッケージを使ったシステムへのインストールは最速ではありません。Ubuntuの場合、パッケージがあってapt-getで一発インストールできるのですが、デフォルト/EPELリポジトリにはRHEL/CentOS/Fedora用のRPMパッケージはありません。そこでPhalconのRPMパッケージを自分で作る手順を紹介します。 このエントリはPhalcon PHP Advent Calendar 2014 2日目のエントリです。 追記:SRPMファイルのダウンロードリンクを忘れていました。次のURLでダウンロードできます。 http://blog.ohgaki.net/files/php-phalcon-1.3.4-1.fc20.src.rpm 私が普段使っている環境はビルドツールが全

    Phalcon PHPのRPMパッケージを作る
  • Phalcon 1.3 と 2.0のベンチマーク

    (Last Updated On: 2018年8月13日)Phalcon Adventカレンダー15日目のエントリです。Phalcon 1.3と2.0でどの程度性能差があるか簡単なベンチマークを取ってみました。 ベンチマーク環境 ローカルホストからabコマンドを実行し取得しました。システムは以下の通りです。 OS : Fedora20 x86_64 PHP/httpd : Fedora20 package CPU : Intel(R) Core(TM) i7-4770S CPU @ 3.10GHz MEM : 16GB HDD : INTEL SSDSC2BW240A4 利用したフレームワーク Laravel (比較用にcomposerでインストール) Phalcon 2.0 RPM Phalcon 1.3 RPM PhalconのWebアプリはmicroとsimpleを利用しました。Ph

    Phalcon 1.3 と 2.0のベンチマーク
  • SQLiteデータ型の仕様とセキュリティ問題

    (Last Updated On: 2018年10月8日)SQLiteはファイルベースのオープンソースRDBMSです。オープンソースとしては珍しいパブリックドメインライセンスを採用しています。SQLiteはファイルベースなのでデータベースサーバーが必要なく手軽に利用できます。SQLiteは組み込みデバイスで広く利用され、Android/iOSなどでは標準的なデータベースとして利用されています。モバイルデバイス以外での利用も広がっており例えば、Drupal8はSQLite3に対応しています。 普通のRDBMSのようにSQLクエリが利用できるのでとても便利ですが、SQLiteの仕様は他のRDBMSと異なるので注意が必要です。 追記:論理的・体系的セキュリティを構築していれば、ここに書かれているようなセキュリティ上問題となる事を自身で分析/対応できるようになります。 SQLiteの仕様 最も特徴

    SQLiteデータ型の仕様とセキュリティ問題
    gayou
    gayou 2014/12/23
  • PostgreSQLのJSONB型を利用してタグ検索を行う

    (Last Updated On: 2018年8月13日)遅れてしまいましたが、PostgreSQL Adventカレンダー2014の9日目です。昨年はタグ検索するならPostgreSQLで決まり!でPostgreSQLの特徴でもある配列型を使ったタグ検索を紹介しました。今年はJSONを使ってみたいと思います。 つい先程、PostgreSQL GitリポジトリからPostgreSQL 9.4のソースを取得&ビルドして記事を書いています。(記事を書くことを忘れていたので大急ぎで書きました) お店や記事にタグ機能を付けたいことはくあります。PostgreSQLのJSONBなら簡単かつ高速なタグ検索機能を追加できます。Webシステムの強い味方になるはずです。 JSONB型を含むテーブルを作成 昨年書いた通りRDBMSはタグ検索が苦手です。しかし、PostgreSQLRDBMSですが得意です!G

    PostgreSQLのJSONB型を利用してタグ検索を行う
    gayou
    gayou 2014/12/23
    jsonb型
  • 知って得するPostgreSQLのRETURNING句

    (Last Updated On: 2018年8月13日)速いアプリケーションの作り方でPostgreSQLのRETURNING句に軽く触れましたが、この機能はデータベースチューニングで強力なツールになる場合があります。知って得する、知らなければ損をする、そんな機能がRETURNING句です。 RETRUNING句とは? RETURNING句とはPostgreSQLの独自拡張でINSERT/UPDATE/DELETE文で結果を返す機能です。PostgreSQL 8.2から利用できます。文の最後に”RETURNING カラム名, …”の形式で返すカラムを指定します。ワイルドカード(*)も指定可能です。 INSERT (column) VALUES (1234) RETURNING column1, column2, ... 初めて見る方は更新系のSQLクエリで結果を返す?なんだそれは?と思う

    知って得するPostgreSQLのRETURNING句
  • 速いアプリケーションの作り方

    (Last Updated On: 2018年8月13日)Phalcon Adventカレンダー18日目として書いています。 一台のアプリケーションサーバーで10リクエスト/秒で十分というサービスであれば、どんなプラットフォームを選んでも問題ありません。一台のサーバーが10リクエスト/秒しか処理できなくても、ページがキャッシュできるならリバースプロキシで簡単に数千リクエスト/秒以上でサービスできます。このようなサービスであればPhalconのようなフレーワムワークを使わなくても大丈夫です。 しかし、メッセージング系などリアルタイム性の高いサービス、つまりHTTPキャッシュがあまり有効に利用できないシステムでは速度が非常に重要です。 ある程度の規模(Webサーバーが複数)のサービスの場合、速いシステムはコスト削減に役立ちます。リアルタイム性がそれほど重要でないサービスであっても、速くレスポン

    速いアプリケーションの作り方
  • Heartbleed脆弱性と漏洩する情報のまとめ

    (Last Updated On: 2018年8月8日)Hearbleed脆弱性はSSL接続を処理するサーバーのメモリ内容を盗める脆弱性です。メモリ内には様々な機密情報が含まれています。Webサーバープロセスのメモリ内に保存されている内容は全て盗まれる可能性があります。セッションIDやユーザーのパスワードが盗める場合もあります。Heartbleed脆弱性は任意アドレスのメモリ内容をリモートから自由に読み出す脆弱性なので、サーバーのメモリ内に保存された秘密情報は、SSL秘密鍵に限らず、メモリ内容から盗めます。 影響範囲はシステム構成により異なるので、どのような条件で盗まれるのかまとめました。 大前提は 脆弱性があるOpenSSLライブラリを利用している ことが条件になります。前のブログにも書きましたがシステム構成により影響範囲が変わります。 SSL接続がリバースプロキシで処理されている構成の

    Heartbleed脆弱性と漏洩する情報のまとめ
  • Heartbleed攻撃と対策

    (Last Updated On: 2018年8月4日)OpenSSLにメモリを自由に参照できるhearbleedと呼ばれるバグ(CVE-2014-0160)がありました。概要はTechCruchで解説されています。昨日は対応に追われたエンジニアも多いのではないでしょうか?OpenSSLを利用したシステムの場合、影響がある可能性があります。詳しくは http://heartbleed.com/(英語サイト) で解説されています。 脆弱性の概要 Heartbleed脆弱性とはリモートから接続先のシステム(HTTPSのWebサーバーなど)のメモリ内容を盗みとられるセキュリティ問題です。SSLを利用したシステムはプログラム中(メモリ中)にSSLの秘密鍵を保存しています。メモリ内容を盗み取る事によりSSL秘密鍵を盗み、HTTPSなどの暗号を解読できるようになります。 接続先のシステムがWebアプリ

    Heartbleed攻撃と対策
  • SSL暗号を無効化する仕組み – BREACH, CRIME, etc

    (Last Updated On: 2018年8月4日)CRIMEやBREACHといったSSL暗号を無効化する攻撃を知っている方は多いと思います。しかし、その仕組みや攻撃方法は広くは理解されていないようです。Webシステムに関わる方であれば、BREACH攻撃の原理と対策を理解しておいて損はありません。BREACHや類似の攻撃は全く難しくありません。直ぐに理解できると思います。原理は簡単です! CRIMEとBREACH攻撃 CRIMEもBREACHも暗号を解読せずに暗号コンテンツを解読する攻撃です。暗号を直接解読するのではなく、圧縮後のサイズ変化を利用したサイドチャネル攻撃を行います。サイドチャネル攻撃とは攻撃対象のセキュリティ対策(CRIME、BREACHの場合は暗号)などを直接攻撃するのではなく、動作を観察して攻撃する手法です。前回のエントリで紹介したタイミング攻撃では、コンピューターの

    SSL暗号を無効化する仕組み – BREACH, CRIME, etc