タグ

2016年6月28日のブックマーク (3件)

  • PHP: TypeError - Manual

    Introduction A TypeError may be thrown when: The value being set for a class property does not match the property's corresponding declared type. The argument type being passed to a function does not match its corresponding declared parameter type. A value being returned from a function does not match the declared function return type.

    WhatAmILookingFor
    WhatAmILookingFor 2016/06/28
    TypeErroの発生3パターン
  • その文字列はセーフ? 本当は奥深いデコード処理

    ジュン 特に最近話題になってるのは、バイナリセーフな関数とかバイナリセーフじゃない関数とかを交ぜこぜで使うと困ったことになる、ってとこかなぁ。 クウ バイナリセーフ……ですか? 言葉は聞いたことあるけど……。 ジュン んっと。バイナリをちゃんとバイナリとして扱えるってのが、バイナリセーフかな? クウ ふむ……。 ジュン 制御文字とかが交ざってるときに、文字列として扱わないと困るときがあるからねー。 クウ むむむ…… 制御文字の中でも特に「%00」などで表すことができるNULL文字を、Webアプリケーションに渡される文字列の中に混入することで、意図しない動作を引き起こす可能性がある。バイナリセーフの場合、NULL文字も文字として扱われるが、非バイナリセーフの場合、NULL文字を「文字列の終了」と見なしてしまうため、以降の文字を扱えず、この挙動の差から問題が発生する。 入力と処理、それぞれの「

    その文字列はセーフ? 本当は奥深いデコード処理
  • 23. 関数とバイナリセーフ

    関数の中にはバイナリデータを正しく扱うことが出来る関数(バイナリセーフ)とそうではない関数があります。これを把握しておかないと、思わぬところでバグを発生させかねません。今回はその中でも正規表現によるマッチングに焦点を当てます。 正規表現によるマッチング関数にpreg_matchとeregがあります。前者はPerl互換 性、後者はPHPのPOSIX互換性正規表現関数です。これらは入力値をフィルターす るときにしばしば用いられます。しかし、eregには落とし穴が存在します。 その落とし穴とは「ereg関数はバイナリセーフではない」ということです。例え ば、ユーザ入力をフィルタリングするスクリプトを考えてみましょう。 if (ereg('^[0-9A-Za-z_]+$', $_POST['login_id'])) { // 正しい入力に対する処理 } ここでの目的はポストされたlogin_idが

    23. 関数とバイナリセーフ