JPUG 第22回 しくみ+アプリケーション勉強会
1/21(土)に開催された勉強会の備忘録。
PHPを使ったSQLインジェクション対策(前半)
- 第四企画の坂井さんの発表。
- '\t' などの意味を活かしたい場合は、standard_conforming_string = on のまま E'〜'と書くのがいいのでは。
- リテラルに B'〜' や X'〜' なんて表記があったのか(遅
- エンコーディングに気をつけよう。特にShift-JISは5C問題(「表」や「ソ」など2バイト目が'\'のもの)があるので要注意。
- クライアント〜アプリ〜DBまでを自由に決められるのであれば、現時点ではUTF-8に統一するのがよいのでは。
- 数値もクォートしたほうがよいの?
- PHPで大きい値を比較するときはint->floatなどの型昇格に注意。
- DBアクセスライブラリのMDB2やPDOのquoteメソッドを使うのが便利。
- 質疑
- あるサイトがSQLインジェクション対策がなされているか知る方法はある?→「' OR '1' = '1」とかを実際にインジェクションしてみるとかw
- ストアドプロシージャを使うとSQLインジェクションに強くなる?→SPに渡す値が確認済みならばOKでは。
xml_fdw XMLファイルをPostgreSQLの情報源として扱う外部データラッパの試作
- NTTソフトの原田さんの発表。ブログにエントリあり。
- xml_fdwを作ってみた。
- 外部サーバ:XMLファイル
- 外部テーブル:ノード種別
- カラム:子ノード種別
- 列値:子ノードのテキストデータ
- 列に関する情報は、9.2から追加された列単位FDWオプションですっきりしそう。
- 既存のドキュメントだけでは、API仕様などがわかりづらいとのこと。ドキュメント直すべきか?
- ExplainForeignScanとPlanForeignScanの区別
- スキャン終了でIterateが呼ばれなくなる条件
- プランナとエグゼキュータとの相互作用など、データフローの図がわかりやすい!カンファレンスでの発表に
パクらせて参考にさせてもらおう。 - ハマリどころは、コールバック関数間でのデータ引継ぎと仕事の振り分け、あとはスキャンの終了の仕方(最初は無限ループになっちゃった)。
なんちゃってEarly Lock Release --実装と評価--
- NECの堀川さんの発表。
- Early Lock Release を実装してみたけど、あまり効果はなかったとのこと。
- DBT-1の「pxgc用」は「pgxc用」のこと?
- rdtcsって何だろう?プロファイラ関連らしいので後で調べる。
- 負荷を上げたときにレスポンスがサチるのはなぜ?→ボトルネックがDBT-1のキューに移るから。
- 測定環境はメモリ数GB、DBサイズ4GB
- ロック競合が多いモデルのほうが効果が見えるかも。
- 非同期コミットとELRではリスクは同じ?ELRではクライアント目線ではトランザクションを失うことはないが、別トランザクション目線でも大丈夫?(@fujii_masaoさんのtweetより)確かに。
まとまってないまとめ
- パラメータのサニタイズとかクォート大変そう…プレースホルダ方式だけでは…多分だめなんですよね。Let's Postgresちゃんと読もう。
- FDWのドキュメントがんばる。
- 各発表50分だったけど、スライドは30枚くらいか……二月のPostgreSQL Conferenceの30分枠での発表は20枚くらいにすべき?