タグ

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

  • 【PHP8.4】ついにPHPにプロパティフックが導入される - Qiita

    class HOGE{ public string $tel{ set{ if(!ctype_digit($value)){ throw new ValueError("電話番号は数値のみ"); } if(strlen($value) < 10){ throw new ValueError("電話番号は10文字以上"); } $this->tel = $value; } get{ return '電話番号は' . $this->tel; } } } $hoge = new HOGE(); $hoge->tel = '123456789012'; // OK $hoge->tel = 'abcdefghijkl'; // Uncaught ValueError: 電話番号は数値のみ $hoge->tel = '123'; // Uncaught ValueError: 電話番号は10文字以上

    【PHP8.4】ついにPHPにプロパティフックが導入される - Qiita
    rryu
    rryu 2024/05/22
    アクセッサと自動実装プロパティが同時に実現されている感じで結構ややこしい。
  • 静的解析ツールで生まれたSQLインジェクション | ドクセル

    自己紹介 小川 経歴 ~2009: Webアプリ開発のバイト&業務委託 2009~2019: 三菱重工 イット何も関係ない。野良のパソコンの大先生してた 2019~いま: root ip B2BのSaaS作ってます PHPVue分かる人来て!!1 面白かった脆弱性 - CVE-2023-22727 PHPフレームワーク CakePHP 4 のSQLインジェクション脆弱性 ORM limit(), offset() でSQLi CVSS v3 9.8 2023/01に修正済み CakePHPLaravelの次に使用率高いフレームワーク(多分) 割と使いやすいからお勧め 一般にコード品質が上がる静的解析ツールの使用で逆に発生

    静的解析ツールで生まれたSQLインジェクション | ドクセル
    rryu
    rryu 2023/09/05
    静的解析ツールの自動修正機能がPHPのDocコメントの引数の型を見て冗長とみなしたキャストを削除してくるのはさすがにやりすぎだと思う。
  • PHPの最高機能、配列を捨てよう!! / Throw away all PHP array now!!!

    At: PHPerKaigi 2023 ( https://phperkaigi.jp/2023/ ) Track A DateTime: 2023/3/25 10:20 (40min) Speaker: uzulla

    PHPの最高機能、配列を捨てよう!! / Throw away all PHP array now!!!
    rryu
    rryu 2023/03/26
    要はコード上に明確な定義があればマシなので、stdClassをnewして使うプロパティを全て初期化するというのは良くやる。PHPは未定義プロパティをエラーにしないのでクラスを定義してもさして変わらないという。
  • 【PHP8.2】PHPで選言標準形 (Disjunctive Normal Form) 型が使えるようになる - Qiita

    タイトルの意味はよくわからない。 さてPHPでは、PHP8.0で型のOR、PHP8.1で型のANDが使えるようになりました。 しかし、この両者を組み合わせて使うことはできません。 function f(A | B | C $param){} // OK function f(A & B & C $param){} // OK function f(A | B & C $param){} // NG ← ということで、これを可能にしようというRFCが提出されました。 既に投票は終わっており、賛成多数で可決されました。 PHP8.2からDNF型が使用可能になります。 以下は該当のRFC、Disjunctive Normal Form Typesの日語訳です。 PHP RFC: Disjunctive Normal Form Types Introduction Disjunctive Nor

    【PHP8.2】PHPで選言標準形 (Disjunctive Normal Form) 型が使えるようになる - Qiita
    rryu
    rryu 2022/07/19
    Disjunctive Normal Form Typesは型の性質ではなく記述方法がDNFというだけで、要はANDとORを混ぜて使えますというだけらしい。
  • 【PHP8.2】PHP8.2の新機能 - Qiita

    PHP8.3 / PHP8.2 / PHP8.1 / PHP8.0 2022/07/19、PHP8.2がフィーチャーフリーズしました。 言語機能に関わるような機能の追加・変更が締め切られたということです。 今後はデバッグを繰り返しながら完成度を高めていき、2022/11/24にPHP8.2.0がリリースされる予定です。 というわけでPHP8.2で実装されるRFCを見てみましょう。 RFC Disjunctive Normal Form Types 賛成25、反対1で受理。 選言標準形です。 UNION型と交差型を同時に使えるようになります。 思う存分型パズルで遊べますね。 // A型、もしくはB型かつC型、もしくはint function hoge( A | (B & C) | int $param){}

    【PHP8.2】PHP8.2の新機能 - Qiita
    rryu
    rryu 2022/07/19
    動的プロパティはプロパティの定義の意味が無くなるので邪魔でしかなかったのだが、ようやく対処するということは互換性の対応の目処がついたということなのだろうか。
  • 【PHP9】ついに未定義変数が使えなくなる - Qiita

    PHP9以降、致命的エラーになります。 以下は該当のRFC、Undefined Variable Error Promotionの紹介です。 投票期間は2022/03/14から2022/03/28です。 2022/03/21時点では賛成30反対6の賛成多数であり、ほぼ確実に可決されます。 Undefined Variable Error Promotion Introduction 未定義変数とは、使用する前に値がまだ初期化されていない変数のことです。 未定義変数にアクセスすると、現在はWarning: Undefined variable $varnameの警告E_WARNINGが表示され、その変数値はNULLであるかのように扱われますが、実行が中断されることはありません。 しかし、これは意図しない挙動である可能性が高いでしょう。 この挙動を変更して例外を出すためにカスタムエラーハンドラ

    【PHP9】ついに未定義変数が使えなくなる - Qiita
    rryu
    rryu 2022/03/22
    変数定義の構文が追加されるのかと思ったら、未初期化の変数の参照をエラーにするということらしい。関数冒頭で全変数を初期化する作法ができてしまいそうではあるが。
  • PHPでログファイルへの読み書きを通して任意コード実行をする方法 - knqyf263's blog

    以前少し話題になったLaravelのデバッグモード有効時の脆弱性であるCVE-2021-3129のPoCを読んでいたのですが、思ったより難しくて何でこんなことをしているんだろうと思ったら発見者による解説ブログがありました。読んでみたらバイパスのために思ったより色々していて普通に勉強になったのでメモを残しておきます。CTFerからすると常識な内容かもしれないので、何か間違いや補足があれば指摘をお願いします。 www.ambionics.io 前提知識1 前提知識2 題 問題点 = によるエラー 日付のデコード ログファイル内の他エントリ バイパス方法 consumedの利用 iconvの利用 パディングの利用 UTF-16のための調整 NULLバイトの回避 最終形 まとめ 前提知識1 上の脆弱性を理解するためにはいくつかの前提知識を必要とするため最初にまとめておきます。 まず、PHPでは外

    PHPでログファイルへの読み書きを通して任意コード実行をする方法 - knqyf263's blog
    rryu
    rryu 2021/10/13
    外部から与えられたファイル名でファイルを開いたと思ったらphp://filterラッパーで色々加工されているって怖いな…
  • 【PHP8.1】PHP8.1で削除される機能 - Qiita

    Nikitaをはじめとする一部のstrictぺちぱー達は、PHPのレガシー機能の削除に熱心に取り組んでいます。 まあ実際、初期のPHPには特にですが、いったいなんでこんなものをという思い付きのような機能がたくさんありましたからね。 そのあたりはPHP7からPHP8.0にかけてだいぶ綺麗に片付けられてきたのですが、まだまだおかしなものも残っています。 そんなわけで以下は、それらを削除しようというRFC、Deprecations for PHP 8.1の紹介です。 投票期間は2021/06/30から2021/07/14まで、有権者の2/3の賛成で受理されます。 Deprecations for PHP 8.1 このRFCでは、以下の機能をPHP8.1で非推奨とし、PHP9.0で削除することを提案します。 受理された提案 以下の提案は受理されました。 PHP8.1以降では使用しないようにしましょ

    【PHP8.1】PHP8.1で削除される機能 - Qiita
    rryu
    rryu 2021/10/06
    よく分からないものがまだこんなにあったとは…
  • PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG

    バックエンドエンジニアのクラシマです。 2021/08/25(水)に、番サーバのPHPを7.4.21 -> 7.4.22にバージョンアップしました。 renovateでプルリクエストが作られるので、追っかけるだけです。 tech.torana.co.jp AMIは前日に作ってあり、当日はLaunchTemplateの向き先を変更するためにterraform applyして、AutoScalingGroupからインスタンスの更新をするだけ。 や~便利になったなぁ、なんて作業してたらSlackが大騒ぎに・・・ 大惨事の一コマ 切り戻し! 急いで切り戻し!と判断したのは良いものの、まさかPHPのバージョンアップ起因だとはその時は思いもよらず。 当日deployしたアプリケーションや、Aurora MySQLの設定変更などを順次戻していきますが、一向に回復せず。 stg環境でも動作が同じだったの

    rryu
    rryu 2021/09/30
    修正差分を見たけど結局PHPの何に引っかかっていたのかが分からない…
  • 【PHP8.2】動的プロパティが禁止される - Qiita

    $dt = new DateTime(); $dt->hoge = 1; var_dump($dt->hoge); // 1 PHPでは未定義のプロパティに値を突っ込むと、特に何の抵抗もなくプロパティが生えます。 しかし、他の多くの言語ではこのような動作にならず、未定義プロパティを突っ込もうとするとエラーになります。 ということでこれを禁止しようというRFCが提出されました。 以下はDeprecate dynamic propertiesのRFCの紹介です。 PHP RFC: Deprecate dynamic properties Introduction 宣言されていないプロパティに書き込みを行うと、PHPでは何もエラーが出ずに動的にプロパティが作成されます。 現代のコードにおいて、これが意図的に行われることはほとんどありません。 このRFCでは、動的プロパティを非推奨とし、将来的に削

    【PHP8.2】動的プロパティが禁止される - Qiita
    rryu
    rryu 2021/09/02
    プロパティ名をtypoしててもエラーにならないせいで謎の挙動が発生するというのが地味につらいので何とかして欲しいところだが、完全禁止で互換性が無くなるのもそれはそれでつらい。
  • SJIS-macに変換したはずなのにSJIS-winになる - Qiita

    $utf8Str = "❶❷❸❹❺"; $sjisStr = mb_convert_encoding($utf8Str, 'SJIS-mac'); echo(mb_detect_encoding($sjisStr, ['UTF-8','SJIS-mac', 'SJIS-win', 'SJIS'])); // SJIS-win ← SJIS-macに変換したはずなのに、何故かSJIS-winと判定されてしまいます。 そもそもSJIS-macってなんだよって話ですが、単にMacJapaneseのエイリアスです。 従ってMacJapaneseと書いても同じく、正しく誤判定されます。 そしてコメント欄にThis is a bug in PHP's mbstring extension『mbstringエクステンションのバグじゃよ』という人が現れています。 間違ったコードを書いたときに自分のせいでは

    SJIS-macに変換したはずなのにSJIS-winになる - Qiita
    rryu
    rryu 2020/09/29
    文字列によってはそうなると思ったら、丸付き数字の文字コードはSJIS-winとSJIS-macで異なるのになぜかSJISでもなくSJIS-winと判定されるというバグなのか。
  • 【PHP8.0】PHP8.0の新機能 - Qiita

    PHP8.2 / PHP8.1 / PHP8.0 / PHP7.4 2020/11/26に リリースされました 。 2020/08/04にPHP8.0がフィーチャーフリーズしました。 言語機能に関わるような機能の追加・変更が締め切られたということです。 今後はデバッグを繰り返しながら完成度を高めていき、2020/11/26にPHP8.0がリリースされる予定です。 というわけでPHP8.0で対応することが決まったRFCを見てみましょう。 RFC JIT 賛成50反対2で受理。 PHP8の目玉、JITです。 PHPをネイティブコードにコンパイルし、さらにコンパイルした結果を次のリクエストに使い回すことができます。 速度はOpcacheがオンの状態から平均的に1.3-1.5倍程度、さらにCPUバウンドな処理なら3倍以上という劇的な高速化が見込めます。 Opcache無しからだと、1分かかっていた

    【PHP8.0】PHP8.0の新機能 - Qiita
    rryu
    rryu 2020/08/14
    変更点が結構多い。適切じゃなかったり間違ってるけどどなんとなく動いているみたいなやつを殺しに来ているのでコードの質が問われそう。
  • PHP7から定数配列がOPcacheに乗るので巨大配列が使い放題という話 - hnwの日記

    PHP 7.0のリリースから約5年が経過し、そろそろPHP 8.0のリリースも見えてきました。人によっては使い始めて5年目になるはずのPHP 7.xですが、いまだに新しい発見があったりして面白いですね。 稿ではPHP 7.0から入った定数配列に関する性能改善について紹介します。 PHP 5時代は配列の組み立てコストが大きかった プログラミング上のテクニックとして、辞書データを連想配列としてプログラム中に記述し、これを必要に応じて使うというものがあります。たとえば次のコード例を見てみましょう。このような連想配列を持っておけば、プログラム中で国名コードをを扱う際に実在するかをチェックしたり、国名の日語表記に変換したりといった処理ができるわけです。 <?php $country_name = [ 'jp' => '日', 'us' => 'アメリカ合衆国', 'ru' => 'ロシア連邦'

    PHP7から定数配列がOPcacheに乗るので巨大配列が使い放題という話 - hnwの日記
    rryu
    rryu 2020/08/13
    CMSなどからデータ入りのPHPファイルを生成して検索するみたいな仕組みでより巨大なデータが扱えるようになるとかはあると思うが、これが効く規模になるとメモリの方が怖い感じがする。
  • 【PHP8.0】PHPに名前付き引数が実装される - Qiita

    function hoge($foo = null, $bar= false, $baz=0, $qux = ''){} こんな関数があったとして、4番目の引数だけ変更したい、他はデフォルトのままでいいという場合、現在のPHPではいちいちデフォルト値を調べて与えないといけません。

    【PHP8.0】PHPに名前付き引数が実装される - Qiita
    rryu
    rryu 2020/07/16
    なんというか、よくもまあ全体的に辻褄の合う仕様をひねり出したという感じ。
  • 【PHP8.0】PHPでunion型が使えるようになる - Qiita

    Union Types 2.0というRFCが投票中です。 提案者はまたまたのNikita。 2019/10/25開始、2019/11/08終了で、受理には2/3+1の賛成が必要です。 2019/11/04時点で賛成55反対5であり、ほぼ導入確定です。 PHPのunion型って何かというと、TypeScriptのunion型とだいたい同じです。 int|string $aと書いたら$aはint型もしくはstring型ですよ、ということです。 ちなみに別途RFCをGitHubで管理しようという実験が進行中で、このRFCの詳細はGitHub上に存在します。 このRFCはまだNikitaの個人GitHub上にしかないのですが、決まりになったらPHP公式に移動になると思います。 まあGitHubのほうが管理とか更新とか楽ですからね。 ただGitHubはURLがすぐ404になるのだけはどうにかしてほ

    【PHP8.0】PHPでunion型が使えるようになる - Qiita
    rryu
    rryu 2019/11/05
    賛成多数なのはこれが無いと内部関数に型宣言が付けられないからだと思うが、この頑張りは報われるのだろうか。
  • クレイジーな JavaScript からおさらば! PHP でダイナミックなフロントエンド書こうぜ!な livewire - Qiita

    クレイジーな JavaScript からおさらば! PHP でダイナミックなフロントエンド書こうぜ!な livewire 最近の JavaScript はクレイジーだ。ただモーダルやロードスピナーを出すためだけにコードと複雑性の山を持ってこないといけない。そうじゃないよな? オーケー、話を伺おう... Livewire に挨拶だ! こんにちは、 Livewire! Livewire はダイナミックなフロントエンドを(文字通り) vanilla PHP と同じくらい簡単に書ける Laravel 用のフルスタックフレームワークだ。 興味が出てきたぞ。 君がいままでに見たことがなくても、コードを見るだけでまるわかりさ。シュノーケルをつけていざ飛び込もう。 ...浮いてる! 言いたいことはわかりますね。モーダルのようなちょっとした動きを付けるためだけに、数十MB、数千ファイルの node_modu

    クレイジーな JavaScript からおさらば! PHP でダイナミックなフロントエンド書こうぜ!な livewire - Qiita
    rryu
    rryu 2019/08/17
    Rails2の頃のAJAX対応機能ぽい。あの頃のRailsは全てをRubyで書くというクレイジーさがあった。
  • P++: 銀河に平和をもたらすための奇策と決着 - Qiita

    PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる というキャッチーな紹介をするP++: 静的型付けをめざすPHPという記事がそれなりに話題になり、このニュースは目覚しく革新的な内容で、多くのひとの目を引き付けました。 これは早まった理解であり、ほとんど誤報と言ってもいい内容でした。2019年8月15日には提案者人も、少くとも「P++」の計画を短期的に実現するととは非現実的であり時期尚早であることを認めています。 この記事では、PHP開発の現状、なぜ野心的なP++計画が提案され、事実上撤回されたかの経緯について紹介します。 [中立性のための表示] この記事の著者@tadsanはPHPの静的解析を強く推進する立場です。 PHPゆるふわCI入門 PHP型検査・夢と理想と現実) 三行で要約 PHPはバージョンを経るごとに「歴史的経緯」による負債が削ぎ落されてきた

    P++: 銀河に平和をもたらすための奇策と決着 - Qiita
    rryu
    rryu 2019/08/14
    コミュニティが互換性重視派と革新派とでつぶし合いになるのをなんとかするアイデアということらしい。
  • P++: 静的型付けをめざすPHP

    PHP: pplusplus:faq PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる。P++はPHPとの下位互換性を削りながら除々にPHPを静的型付け言語にする試みだ。 PHP開発者の中には2つの流派がある。PHPの源流であり現在の形である動的型付け言語としてのPHPを良しとする流派と、PHPをより強い静的型付け言語へと発展させたい流派だ。良い悪いの問題ではない。どちらの流派も正当な理由がある。しかし、ゆるふわな動的型付け言語とガチガチの静的片付け言語は同じ一つの言語として同居できない。 そこで、コードネームP++として、PHPを静的型付け言語に発展させる新しい言語の開発が提案された。P++はforkではなく、PHPと同じコードベースを共有する。PHP 8のバイナリはPHPとP++を同時に実装する。言語の切り替えは何らかの宣言によって指定する。 P++は

    rryu
    rryu 2019/08/13
    静的型付けへの最大の障害は型ガバガバな組み込み関数なんじゃないだろうか。
  • PHPサーバーサイドプログラミングパーフェクトマスターのCSRF対策に脆弱性

    サマリ PHPサーバーサイドプログラミングパーフェクトマスターには、PHP入門書としては珍しくクロスサイト・リクエストフォージェリ(CSRF)対策についての説明があるが、その方法には問題がある。アルゴリズムとして問題があることに加えて、実装上の問題があり、そのままコピペして用いると脆弱性となる。 はじめに 古庄親方の以下のツイートを見て驚きました。 CSRF用のトークンの作成 $token = password_hash(mt_rand(), PASSWORD_DEFAULT); ってのを書籍で見た………もンのすンげぇなぁ(苦笑 書籍名でググって調べる……評判が悪いので、まぁ、納得っちゃぁ納得。 — がる (@gallu) July 17, 2019 CSRFトークンの生成に、password_hash関数を使うですと? 親方に書籍名を教えていただき、購入したのが、この記事で紹介する「PH

    rryu
    rryu 2019/07/29
    password_hashで生成した値自体を比較していればそうまずくはなかったのにpassword_verifyで照合するからトークンは空ではないが元値は空という隙を作りワンタイム化によってトドメを刺したという…
  • 【PHP8.0】PHPでJITが使えるようになる - Qiita

    2020/06/26追記:アルファ版がリリースされたので実際に試してみた JITのRFCが2019/03/21に投票開始されました。 締切は2019/03/28ですが、2019/03/27時点で賛成48反対2でほぼ導入確定です。 JITとは JIT is 何? PHPは現在は、アクセスが来るたびにソースコードを全部読み取って、opcodeに変換して、順番に逐次実行して、実行が終了したら全てのコードを破棄するというインタプリタ型のプログラミング言語で、処理速度は遅いです。 遅いと言っても、やってる内容からすれば異常なまでに早いんですけどね。 opcodeはCPUやOSなどの実行環境によらず同一のコードが生成されます。 逐次実行するときはさらに実行環境ごとのネイティブコードに変換して実行されます。 OPcacheは、この変換後のopcodeをメモリに保存しておいて、次のリクエストでも使い回すと

    【PHP8.0】PHPでJITが使えるようになる - Qiita
    rryu
    rryu 2019/03/29
    ローカル変数のみを使用した数値計算はJITによってレジスタと算術命令を使用したものに変換できるから劇的に速くなるのだが、PHPで数値計算する用途があるのだろうか。