タグ

PHPとphpに関するrryuのブックマーク (188)

  • 却下されたPHP RFCを見てみる その1 - Qiita

    その1 / その2 / その3 Declined RFC 最近のPHPでは、新機能はまずML等にアイデアを出してRFCを作成し、投票において有権者の2/3の賛同を得て初めて導入されるという流れになっています。 その関門を通り抜けたものだけが新機能としてデビューできるわけですが、中には当然却下されたものも存在します。 せっかくだから却下されたRFCを、新しい順に10件見てみます(2016/08/09時点)。 今後通りやすいRFCを提案する際の参考になるかもしれません。 その2に続くかどうかは不明。 New operator for context-dependent escaping 賛成0/反対27で却下。 <?* $str, 'html' ?> <?= htmlspecialchars($str, ENT_QUOTES | ENT_HTML5 | ENT_DISALLOWED | ENT

    却下されたPHP RFCを見てみる その1 - Qiita
    rryu
    rryu 2016/08/12
    エスケープのやつはショートタグでなくて演算子として定義したのが失敗な気がする。「* <expr>, <expr>」なんて演算子は確かにキモイ。
  • 【2016�年版】PHPフレームワーク人気比較 - エンジニアについて知るならCarearte

    記載されている内容は2016年12月07日時点のものです。現在の情報と異なる可能性がありますので、ご了承ください。 また、記事に記載されている情報は自己責任でご活用いただき、記事の内容に関する事項については、専門家等に相談するようにしてください。 CakePHPLaravel、CodeIgniterなど多くの種類があり、「一体どれを使えばいいんだ」と迷われる方が多いでしょう。今回は、PHPフレームワーク、laravel、CakePHP、zendframework、Symfony、codeigniterに絞って、最近の人気度を比較していきます。

    【2016�年版】PHPフレームワーク人気比較 - エンジニアについて知るならCarearte
  • 『例えば、PHPを避ける』以降PHPはどれだけ安全になったか

    2. アジェンダ • 例えば、PHPを避ける • htmlspecialchars 文字エンコーディングチェックの改善 • register_globalsが非推奨に • マジッククォートが非推奨に • 暗号学的に安全な擬似乱数生成器のサポート • セッションID生成の安全性強化 • ヌルバイト攻撃の防御機能の追加 • PDOのDB接続時の文字エンコーディング指定が可能に • header関数のバグ修正 • 安全なパスワード保存が簡単にできるようになった Copyright © 2016 Hiroshi Tokumaru 2 3. 徳丸浩の自己紹介 • 経歴 – 1985年 京セラ株式会社入社 – 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍 – 2008年 KCCS退職、HASHコンサルティング株式会社設立 • 経験したこと – 京セラ入社当時はCAD、計

    『例えば、PHPを避ける』以降PHPはどれだけ安全になったか
    rryu
    rryu 2016/04/17
    そういえば昔のPHPは普通に作ると脆弱になる程度に本体が脆弱だったなあ。
  • まだPHPの配列の仕様をよく理解されていない方へ — A Day in Serenity (Reloaded) — PHP, CodeIgniter, FuelPHP, Linux or something

    PHPを使いもせずDISってる君達へ - Qiita」という記事がありました。 概ね正確な内容ですが、まだ根的にPHPの配列の仕様がわかっていないような記述が一部に見受けられました。端的なものが以下です。 今まで話したようにPHPには配列型と辞書型は曖昧なものです。 およそプログラミング言語の実装において型が曖昧ということはありえません。内部的には型は厳密です。でなければ実装できません。 ただし、自動的に型が変わることがあり、ユーザの理解が曖昧だと、言語の仕様も曖昧に感じるということです。 ということで、PHPの配列についてよく理解していないPHPユーザもまだいるでしょうから、仕様について少し記事を書くことにします。 PHPの配列とは? PHPの配列について知っておくべきことは以下ではないかと思います。 PHPの配列はarray型の1つしかない PHPの配列は順番を保持している 配列の

    rryu
    rryu 2015/12/22
    数字キーと文字列キーを混ぜて使うと死ぬ目にあうというのはJSも同じだが、なんでこんな誰も得しない実装になっているのかが不思議。
  • DIS例2 / PHPは配列型と辞書(HaspMap)型が区別不能な言語! | PHPを使いもせずDISってる君達へ - Qiita

    PHPはよくDISられることがあります。しかし、実際にはほとんどPHPを利用していない人が印象だけでDISってることが多いような気がします。 そこで、PHPがよくDISられている点について、実際どうなのかをPHP未体験者向けに解説していきたいと思います。PHPを触ったことない人でもわかりやすいようにシンプル目な仕様のRubyを例に説明していきたいと思います!( Ruby触ったことなくても、その他のOOP言語を触ったことあれば雰囲気は理解できるように書いています ) DIS例1 / PHPは配列操作がしづらい PHPの配列操作は扱いづらい等とDISる人たちがいます。実際のところどうでしょうか。 以下のような処理を配列への中間変数を用いず行うコードを例に考えてみます。

    DIS例2 / PHPは配列型と辞書(HaspMap)型が区別不能な言語! | PHPを使いもせずDISってる君達へ - Qiita
    rryu
    rryu 2015/12/22
    まあ、PHPはマニュアルを読まないで使うと罠にはまって死ぬ系の言語ではあるよなあ。
  • Joomla!の「ゼロデイコード実行脆弱性」はPHPの既知の脆弱性が原因

    Joomla!にコード実行脆弱性(CVE-2015-8562)があり、パッチ公開前から攻撃が観測されていたと話題になっています。 Joomlaに深刻な脆弱性、パッチ公開2日前から攻撃横行 「Joomla!」に再び深刻な脆弱性、3.4.6への速やかなアップデートを推奨 パッチ公開の前に攻撃が始まる状態を「ゼロデイ脆弱性」と言いますが、それでは、この脆弱性のメカニズムはどんなものだろうかと思い、調べてみました。 結論から言えば、この問題はJoomla!側に重大な脆弱性はなく、PHPの既知の脆弱性(CVE-2015-6835)が原因でしたので報告します。 exploitを調べてみる 既にこの問題のexploitは公開されていますが、悪い子が真似するといけないのでURL等は割愛します。以下のページでは攻撃の原理が説明されています。 Vulnerability Details: Joomla! Re

    rryu
    rryu 2015/12/18
    合わせ技で一本みたいな脆弱性だな……
  • PHPとWebサーバの組み合わせについて – hanhan's blog

    ちょっと遅くなりましたが、この記事は PHPアドベントカレンダー2015 の17日目の記事です。 タイトルの件ですが、2015年12月現在で、PHPとWebサーバの組み合わせって、一体どんな構成にすると良いかな?と ふと疑問に思ったので、自分の環境で、ベンチマークを取って見ることにしました。 ベンチマーク対象のPHP&Webサーバの組み合わせ 以下の4つの組み合わせでベンチを取って見ました。 1. NginxPHP-FPM 近年、PHPでハイパフォーマンスを出すという場合によく取られる構成かと思います。ISUCONに参加しているPHP系チームもこの構成を取るチームが多かったですね。 2. Apache2.4(prefork)とmod_php これぞPHP!!という王道の構成です。何も考えずにDocumentRootにphpファイルを放り込めば動きます。 3. Apache2.4(pre

    rryu
    rryu 2015/12/17
    PHP-FPMよりもmod_phpの方が速いのはpm.max_children辺りの設定の差なのか、それとも本体の性能の差なのか。
  • PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る

    この記事はPHPアドベントカレンダー2015の3日目の記事です 。 MBSD寺田さんの記事「LWSとHTTPヘッダインジェクション」では、PHPのheader関数に関連して、PHP側のHTTPヘッダインジェクション対策を回避する手法と、それに対するPHP側の対応について書かれています。この記事では、寺田さんの記事を受けて、現在でもHTTPヘッダインジェクション攻撃が可能なPHP環境が残っているかを検証します。 HTTPヘッダインジェクションとは 以下の様なスクリプトがあるとします。 <?php header('Location: ' . $_GET['url']); オープンリダイレクタ脆弱性がありますが、それは気にしないとして、PHP5.1.1までのバージョンでは、以下の様な攻撃が可能でした。 http://example.jp/header.php?url=http://example

    PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る
    rryu
    rryu 2015/12/03
    HTTPヘッダの継続行って解釈してくれないブラウザが存在しそう気はしていたが、ある意味期待を裏切らないIE……
  • PHP: session_cache_limiter - Manual

    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

    PHP: session_cache_limiter - Manual
    rryu
    rryu 2015/10/20
    セッション系の機能と思いきやCache-Control系のヘッダフィールドを出力するだけというのがPHPらしい。
  • PHP 7 の無名クラスから考えるクラスの在り方 - Shin x Blog

    いよいよ、PHP の次期メジャーバージョンの PHP 7 がリリースされます。すでに、RC4 が登場しており、来月予定されているリリースが楽しみです。 PHP 7 には幾つかの新機能が盛り込まれているのですが、その中でも気になるのが、無名クラスです。 無名クラスとは 無名クラスは、クラスの定義をすることなく、オンザフライでオブジェクトを生成する機能です。匿名関数(ネイティブクロージャ)のクラス版だと思うとイメージしやすいです。 無名クラスは、new classで、生成します。下記が、そのサンプルです。ここでは、sayメソッドを持つ無名クラスを定義して、$objectに格納しています。$object の say メソッドを実行すると、'Hello'という文字列が出力されます。 <?php $object = new class { public function say() { echo

    PHP 7 の無名クラスから考えるクラスの在り方 - Shin x Blog
    rryu
    rryu 2015/10/15
    traitを即席で組み合わせて使っていくスタイルってそもそも実現可能なんだろうか。
  • file_get_contentsでhttpsから始まる情報を取得できない – helog

    PHPの関数「file_get_contents」でAPIを利用した情報を取得することがあります。 但し、対象が「https」で始まるurlの場合に、情報が取得できません。 何度もこの問題に直面し、その度に頭を悩ませてしまいます。記憶力が。。。 というわけで、ここでしっかりメモを残しておきます。 「file_get_contents」でhttpsから始まる情報にアクセスできない 例えばAPIなどを利用するにあたり、その情報にアクセスするために以下のようなソースを記述します。 if(($res = @file_get_contents($url)) === false){ (略) } ここで、$urlの中身が「https」で始まるurlの場合に、情報の取得に失敗してエラーになってしまいます。 Notice (8): Undefined variable: http_response_head

    file_get_contentsでhttpsから始まる情報を取得できない – helog
    rryu
    rryu 2015/07/06
    opensslモジュールが入っていないとhttps通信はできない。
  • 本当に PHP の DoS 脆弱性 (CVE-2015-4024) キツくない? - はちゅにっき

    hakaikosen.hateblo.jp 上記記事を「あら大変(棒読み)」とか思いながら読んでいたけれど、PHP の BTS の方を読んでみたら確かに原理から再現手順まで細かく記載されていて 「なんかこれまずそう」と思ったので、docker を使って検証してみることに。 PHP 入りの Docker コンテナは、Official のものを利用しました。registry.hub.docker.com 今回の脆弱性、POST しないページには関係ないのかな?と思ってましたが、よくよく見ると PHP さえ動くページであればなんでもいいらしい。 ということで以下のような PHP ファイルを用意し、ここにアクセス (攻撃) をします。 htdocs/index.php <!DOCTYPE html> <html> <head> <title>PHP Bugs #69364</title> </he

    本当に PHP の DoS 脆弱性 (CVE-2015-4024) キツくない? - はちゅにっき
    rryu
    rryu 2015/06/23
    DoSられる規模のサービスであれば粛々とバージョンアップして終わりという気もする。
  • PHP入門書のSQLインジェクションとXSS対策をあらためて調べてみた

    継続的にPHP入門書のセキュリティ問題を確認していますが、今回は「やさしいPHP 第3版」を取り上げ、今どきのPHP入門書のセキュリティ状況を報告したいと思います。 やさしいPHP やさしいシリーズ 単行 – 2008/2/29 やさしいPHP 第2版 (やさしいシリーズ) 単行 – 2010/8/28 やさしいPHP 第3版 (「やさしい」シリーズ) 大型 – 2014/9/26 上記のように、2008年に初版が出版された後2回の改版がありました。 第2版ではクロスサイトスクリプティング(XSS)の説明が追加され、第3版ではXSSに加えSQLインジェクションの説明が追加されました。つまり、初版ではこれらの説明はなかったということです。 第3版におけるSQLインジェクションの対策方法はプレースホルダによるもので、結果として書にSQLインジェクション脆弱性は見当たりません(パチパチパ

    PHP入門書のSQLインジェクションとXSS対策をあらためて調べてみた
    rryu
    rryu 2015/04/22
    PHPのechoが自動でエスケープするようになればXSSもなくなるのになあ。
  • PHP7のタイプヒントベストプラクティス

    (Last Updated On: 2018年9月26日)PHP 7から基的なデータ型(整数型、浮動小数点型、配列型)タイプヒントが追加されます。直感的に書くコードと正しいコードには乖離があります。PHP7でタイプヒントを使う場合のベストプラクティスを紹介します。 タイプヒントとタイプヒントの問題点については前回のブログを参照してください。 PHP7タイプヒントの注意点 PHPはWebシステムで利用され、データベースやJSONなどの外部データとのやり取りが必要になります。PHP7のタイプヒントはデータ型変換を伴うので 入力データの形式/表現範囲 PHPデータ型の表現範囲 タイプヒント/キャストの動作 に注意する必要があります 入力データの形式 データベースの場合、入力データは基的に”文字列”になります。データベースのデータ型をPHPなどの言語のデータ型と完全に一致するとは限りません。こ

    PHP7のタイプヒントベストプラクティス
    rryu
    rryu 2015/04/11
    本来数値であるところに文字列型のタイプヒントを指定するのがベストプラクティスというのなら、そんな意味のないタイプヒントは使わないというのが真のベストプラクティスではないだろうか。
  • htmlspecialchars関数が長いので便利な関数を作った - Qiita

    XSS攻撃を防ぐためにhtmlspecialcharsを使うことが多いと思いますが、関数名が長く、しかも安全に使うにはオプションを指定しなければならない場合が多く、面倒です。

    htmlspecialchars関数が長いので便利な関数を作った - Qiita
    rryu
    rryu 2015/04/03
    関数名が分かりやすいw
  • PHP7で追加される整数型、浮動小数点型タイプヒントの問題点

    (Last Updated On: 2018年8月13日)PHP7では整数型、浮動小数点型、配列型のタイプヒントが追加されます。データ型をより厳格に取り扱うようになるのは良い事ですが、データ型を変換してしまうため問題となる場合もあります。 データ型は指定した型に変換すればよい、という単純な物ではありません。私はデータ型を変換しない方のRFCを支持していました。残念ながらこちらのRFCでなく、問題が多い方のRFCが採用されることになりました。 参考 PHP7のタイプヒントの使い方 タイプヒントとは? そもそもタイプヒントを使ったことが無い方も多いと思います。PHPはオブジェクトのクラスを「タイプヒント」として指定することが従来から可能でした。例えば、 function (MyClass $obj) { // Do something } のようにタイプヒントとして”MyClass”を指定し、

    PHP7で追加される整数型、浮動小数点型タイプヒントの問題点
    rryu
    rryu 2015/03/30
    タイプヒントを使うとPHPのアレな型変換が行われる箇所が増えるので余計に気をつけなければならなくなるという地獄…
  • キャッシュ制御不備の脆弱性にご用心

    古い書籍に掲載されたPHP記述の掲示板ソフトを動かしていると、ログアウト処理がうまく動作していないことに気がつきました。チェックの方法ですが、ログアウト処理の脆弱性検査の簡単なものは、「安全なウェブサイトの作り方」別冊の「ウェブ健康診断仕様」に記載されています。 (J)認証 ログアウト機能はあるか、適切に実装されているか ログアウト機能がない、あるいはログアウト後「戻る」ボタンでセッションを再開できる場合 この仕様書にある通り、『ログアウト後「戻る」ボタンでセッションを再開できる』状態でした。 おそらくセッション破棄がきちんと書かれていないのだろうと思いログアウト部分のソースを見ると、以下の様な処理内容でした(オリジナルからはリライトしています)。 <?php // logout.php require_once('common.php'); // 共通の設定・処理 session_sta

    rryu
    rryu 2015/03/27
    GETメソッドで副作用のあるページがキャッシュされると一見動いているように見えても肝心な副作用が起こらないので駄目な話。
  • 【導入決定!】PHP7で実装されるスカラー型宣言とは? | 東北ギーク

    * NaN でなく PHP_INT_MIN から PHP_INT_MAX までの範囲内の値に限る ** 数値形の文字列のみ。数値形の文字列に他の文字が続く場合も使えるが、 Notice が出る *** __toString メソッドを持つもののみ 弱い型検査モードで行われる暗黙の型変換は、PHP が従来他の構文(算術演算子や条件式、組み込み関数の呼び出しなど)で行ってきたのと同等のものです。 厳密モード 一方、厳密な型検査のモードを使う場合は、関数は宣言されたのと正確に一致する型のみを受け付けるようになります(int → float の拡大変換をのぞく)。 ファイルの先頭に declare(strict_types=1); と書くことで、そのファイル内での関数呼び出しの際に厳密モードでの型検査が行われるようになります*1。 以下のように使います。 <?php declare(strict_

    【導入決定!】PHP7で実装されるスカラー型宣言とは? | 東北ギーク
    rryu
    rryu 2015/03/20
    なんというか、厳密モードが欲しくなるのは暗黙の型変換の仕様がアレだからという気がしないでもない。
  • サービス終了のお知らせ

    平素より「PHPプロ!」をご愛顧いただき、誠にありがとうございます。 2006年より運営してまいりました「PHPプロ!」ですが、サービスの利用状況を鑑みまして、2018年9月25日(火曜日)をもちましてサービスを終了させていただくことになりました。 サービス終了に伴いまして、2018年8月28日(火曜日)を持ちまして、新規会員登録ならびにQ&A掲示板への新たな質問、回答の投稿を停止させていただきます。 なお、ご登録いただいた皆様の個人情報につきましては、サービス終了後、弊社が責任をもって消去いたします。 これまで多くの皆様にご利用をいただきまして、誠にありがとうございました。 サービス終了に伴い、皆様にはご不便をおかけいたしますこと、心よりお詫び申し上げます。 件に関するお問い合わせはこちらよりお願いいたします。

    rryu
    rryu 2015/02/20
    気になっていはいたがinclude_onceなんて使わないので調べなかったが、そういうことだったのか。
  • PHP 5.4 以上でも register_globals を再現するライブラリ MercifulPolluter - Qiita

    あらすじ PHP と呼ばれる言語では、かつて register_globals という機能が猛威を奮っていました。簡単に言うと、リクエストパラメータが自動的にグローバル変数にセットされるというものです。 // http://example.com/?foo=123&bar=baz var_dump($_GET['foo'], $_GET['bar']); // string(3) "123" // string(3) "baz" var_dump($foo, $bar); // string(3) "123" // string(3) "baz" この機能が全盛期だった頃、残念ながら私は PHP を書いていませんでしが、おそらくこの機能が ON になっていることで「うわ、何も考えなくても勝手に変数として使える!便利だ!!」みたいな、 よしなにやってくれる という PHP 特有の機能でもダン

    PHP 5.4 以上でも register_globals を再現するライブラリ MercifulPolluter - Qiita
    rryu
    rryu 2014/12/28
    RailsのStrong Parametersみたいな仕組みがあれば安全に使えそうなきがするが、そんな指定ができるならregister_globalsを使わないように直せる気もする。