SlideShare uma empresa Scribd logo
1 de 12
Baixar para ler offline
ヌルイネタ二つ。



              坂本昌彦
          id:msakamoto-sf
             2008-03-15
      第2回PHP懇親会発表資料
sakamoto-gsyc-3s@glamenv-septzen.net
誰?

                       81世代。
                 PHP, Javaプログラマー
               株式会社エヌ・エス・ディ所属
              事務所は立川だけど新宿中心に
                ぐるぐる出向したりしてます。
              お仕事:Javaでソケット通信とか。
               (何か4月からはRubyやりそう)
           PHP:趣味。会社としては殆どやってない。


IPAで、「安全なウェブサイトの作り方 改訂第3版」が公開されましたね。読んでて気になったのですが・・・。
誰?その2

       隠れPerl信者(修行中)です。
       オレオレフレームワーク派。
          Xhwlay, Pseudo_Block
         最近はsymfonyに白旗。
       CakePHPにも手を出したけど
     肌に合わなくてAkelosに逃げて、
結局ActiveRecordを理解してないだけじゃないか
               と反省中。
 っつーかAkelosはADODBそのまま使えるので
          AR全然つかってねぇ。
       食わず嫌いを直したいです。
本題に入る前に



      LINDさん、
    ファン・デリさん、
   主催および会場提供
ありがとうございますです~~。
      ヽ(´ー`)ノ
ヌルイネタ:1点目



                                var_export()
           http://jp.php.net/manual/ja/function.var-export.php




SQLインジェクションの例で、PostgreSQLの場合、pg_query_paramsのプレースホルダー文字列が quot;$1quot;, quot;$2quot;, quot;$3quot;, ... となってるじゃないですか。(p51)
var_dump()に隠れて見えない可哀想
                 な子です。



                                                                    文字通り桁が違う。
                                                                    (2008/03/15 10:30時点)




ADODBではDBMSに依らず quot;?quot; で統一されてる(oci8を除く?)のですが、これってどういうこと?と。ADODBのPrepare()って、本当は何してるの?
変数のダンプをログに出したい時


                  「こんなコード、書いてませんか?」

                                   ob_start();
                               var_dump($vars);
                             $data = ob_get_clean();

                              your_log_func($data);


調べてみたら、プリペアクエリのquot;?quot;で分割して、それぞれのバインド値をADOConnection#qstr()というのでエスケープして、最後に連結してました。
var_export()はデキル子デス。

                                         「これでok。」

                        $data = var_export($vars, true);

                                  your_log_func($data);



                        誰ですか?「serialize()使えば良いじゃん」という仰るイケナイ子は・・・。




で、このqstr()っていうのはPostgreSQL用ADODBドライバの場合、内部的にちゃんとpg_escape_string()を使ってます。
ヌルイネタ:2点目


                         explode()関数の
                            第3引数
                           quot;int $limitquot;
               http://jp.php.net/manual/ja/function.explode.php


また、PostgreSQL用ADODBドライバは、{Set|Get}CharSet()で、pg_(set_)client_encoding()にアクセスできます。
目立たなくて忘れ去られてる感。




           そう感じてるのは自分だけ?

           一応、マニュアルページにもExample2として$limitの使用例があるのだけれど・・・。




結論として、PHP4.2.0以上 && PostgreSQL 7.2 以上であれば、ADODBの場合、pg_escape_string および pg_set_glient_encoding()を用いて適切に処理できます。
あんまり上手い例が見つからない。

      区切り文字でバラした時に、要素数が足りない場
      合はデフォルト値nullで済ませて良い場合とか、区
      切り文字が想定より多く含まれていても、想定通り
       の数までにバラす要素数を制限したい場合。

     CSVファイル処理、というよりは一般的な文字列→
        配列変換の時に使えるシーンがあるかも。

     ばらした後のcount()で補正する手間が省ける時に
                   便利。

皆さんお遣いのDBドライバライブラリはどうでしょうか?ちなみに、まだPostgreSQL 7.1 などで動かしているレンタルサーバもあるのでご注意を!
以上。

         質疑応答?:
「こんな『忘れられてるけどデキル子』いるよ!」
        という方、挙手!
          ( ・ω・)∩

var_dump <> var_export : 出力形式が違う!
    Objectが扱えない?←いや、これは
           さすがに扱えます。

Mais conteúdo relacionado

Mais procurados

TracWysiwygPlugin
TracWysiwygPluginTracWysiwygPlugin
TracWysiwygPlugin
Jun Omae
 
FOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript ProgrammingFOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript Programming
gyuque
 
331 Ch
331 Ch331 Ch
331 Ch
anjaan
 
モバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCモバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRC
Shin Ise
 
碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸会 图片列表讨论
碳酸会 图片列表讨论
碳酸饮料会
 
Howtousenetboss
HowtousenetbossHowtousenetboss
Howtousenetboss
kumee
 
Microsoft power point โครงงงานคอมพิวเตอร์พิชิตความเครียด
Microsoft power point   โครงงงานคอมพิวเตอร์พิชิตความเครียดMicrosoft power point   โครงงงานคอมพิวเตอร์พิชิตความเครียด
Microsoft power point โครงงงานคอมพิวเตอร์พิชิตความเครียด
Ploy Purr
 
黑客江湖 阿里十周年分享
黑客江湖 阿里十周年分享黑客江湖 阿里十周年分享
黑客江湖 阿里十周年分享
ph4nt0m
 
クロスレビュー
クロスレビュークロスレビュー
クロスレビュー
武 河野
 
WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介
Yuki Kimoto
 

Mais procurados (20)

大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
大规模SOA系统中的分布事务处理 (DTP By Alipay Cheng Li)
 
TracWysiwygPlugin
TracWysiwygPluginTracWysiwygPlugin
TracWysiwygPlugin
 
FOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript ProgrammingFOSS4G LT - Invitation to ActionScript Programming
FOSS4G LT - Invitation to ActionScript Programming
 
可扩展的 MySQL 数据库设计
可扩展的 MySQL 数据库设计可扩展的 MySQL 数据库设计
可扩展的 MySQL 数据库设计
 
331 Ch
331 Ch331 Ch
331 Ch
 
モバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCモバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRC
 
碳酸会 图片列表讨论
碳酸会 图片列表讨论碳酸会 图片列表讨论
碳酸会 图片列表讨论
 
CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇CSS 排版 - 基礎觀念篇
CSS 排版 - 基礎觀念篇
 
PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇PHP 防駭 - 基礎觀念篇
PHP 防駭 - 基礎觀念篇
 
Web Refactoring
Web RefactoringWeb Refactoring
Web Refactoring
 
イケテルRuby開発環境
イケテルRuby開発環境イケテルRuby開発環境
イケテルRuby開発環境
 
Profile
ProfileProfile
Profile
 
Howtousenetboss
HowtousenetbossHowtousenetboss
Howtousenetboss
 
Microsoft power point โครงงงานคอมพิวเตอร์พิชิตความเครียด
Microsoft power point   โครงงงานคอมพิวเตอร์พิชิตความเครียดMicrosoft power point   โครงงงานคอมพิวเตอร์พิชิตความเครียด
Microsoft power point โครงงงานคอมพิวเตอร์พิชิตความเครียด
 
S28
S28S28
S28
 
PHP 物件導向 - 基礎觀念篇
PHP 物件導向 - 基礎觀念篇PHP 物件導向 - 基礎觀念篇
PHP 物件導向 - 基礎觀念篇
 
黑客江湖 阿里十周年分享
黑客江湖 阿里十周年分享黑客江湖 阿里十周年分享
黑客江湖 阿里十周年分享
 
数年後のWEB標準標準
数年後のWEB標準標準数年後のWEB標準標準
数年後のWEB標準標準
 
クロスレビュー
クロスレビュークロスレビュー
クロスレビュー
 
WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介WebアプリケーションフレームワークMojoの紹介
WebアプリケーションフレームワークMojoの紹介
 

第2回PHP懇親会発表資料

  • 1. ヌルイネタ二つ。 坂本昌彦 id:msakamoto-sf 2008-03-15 第2回PHP懇親会発表資料 sakamoto-gsyc-3s@glamenv-septzen.net
  • 2. 誰? 81世代。 PHP, Javaプログラマー 株式会社エヌ・エス・ディ所属 事務所は立川だけど新宿中心に ぐるぐる出向したりしてます。 お仕事:Javaでソケット通信とか。 (何か4月からはRubyやりそう) PHP:趣味。会社としては殆どやってない。 IPAで、「安全なウェブサイトの作り方 改訂第3版」が公開されましたね。読んでて気になったのですが・・・。
  • 3. 誰?その2 隠れPerl信者(修行中)です。 オレオレフレームワーク派。 Xhwlay, Pseudo_Block 最近はsymfonyに白旗。 CakePHPにも手を出したけど 肌に合わなくてAkelosに逃げて、 結局ActiveRecordを理解してないだけじゃないか と反省中。 っつーかAkelosはADODBそのまま使えるので AR全然つかってねぇ。 食わず嫌いを直したいです。
  • 4. 本題に入る前に LINDさん、 ファン・デリさん、 主催および会場提供 ありがとうございますです~~。 ヽ(´ー`)ノ
  • 5. ヌルイネタ:1点目 var_export() http://jp.php.net/manual/ja/function.var-export.php SQLインジェクションの例で、PostgreSQLの場合、pg_query_paramsのプレースホルダー文字列が quot;$1quot;, quot;$2quot;, quot;$3quot;, ... となってるじゃないですか。(p51)
  • 6. var_dump()に隠れて見えない可哀想 な子です。 文字通り桁が違う。 (2008/03/15 10:30時点) ADODBではDBMSに依らず quot;?quot; で統一されてる(oci8を除く?)のですが、これってどういうこと?と。ADODBのPrepare()って、本当は何してるの?
  • 7. 変数のダンプをログに出したい時 「こんなコード、書いてませんか?」 ob_start(); var_dump($vars); $data = ob_get_clean(); your_log_func($data); 調べてみたら、プリペアクエリのquot;?quot;で分割して、それぞれのバインド値をADOConnection#qstr()というのでエスケープして、最後に連結してました。
  • 8. var_export()はデキル子デス。 「これでok。」 $data = var_export($vars, true); your_log_func($data); 誰ですか?「serialize()使えば良いじゃん」という仰るイケナイ子は・・・。 で、このqstr()っていうのはPostgreSQL用ADODBドライバの場合、内部的にちゃんとpg_escape_string()を使ってます。
  • 9. ヌルイネタ:2点目 explode()関数の 第3引数 quot;int $limitquot; http://jp.php.net/manual/ja/function.explode.php また、PostgreSQL用ADODBドライバは、{Set|Get}CharSet()で、pg_(set_)client_encoding()にアクセスできます。
  • 10. 目立たなくて忘れ去られてる感。 そう感じてるのは自分だけ? 一応、マニュアルページにもExample2として$limitの使用例があるのだけれど・・・。 結論として、PHP4.2.0以上 && PostgreSQL 7.2 以上であれば、ADODBの場合、pg_escape_string および pg_set_glient_encoding()を用いて適切に処理できます。
  • 11. あんまり上手い例が見つからない。 区切り文字でバラした時に、要素数が足りない場 合はデフォルト値nullで済ませて良い場合とか、区 切り文字が想定より多く含まれていても、想定通り の数までにバラす要素数を制限したい場合。 CSVファイル処理、というよりは一般的な文字列→ 配列変換の時に使えるシーンがあるかも。 ばらした後のcount()で補正する手間が省ける時に 便利。 皆さんお遣いのDBドライバライブラリはどうでしょうか?ちなみに、まだPostgreSQL 7.1 などで動かしているレンタルサーバもあるのでご注意を!
  • 12. 以上。 質疑応答?: 「こんな『忘れられてるけどデキル子』いるよ!」 という方、挙手! ( ・ω・)∩ var_dump <> var_export : 出力形式が違う! Objectが扱えない?←いや、これは さすがに扱えます。