iakioの日記 RSSフィード

2008-06-03

hstoreを何に使おう

| 01:55 |  hstoreを何に使おう - iakioの日記 を含むブックマーク はてなブックマーク -  hstoreを何に使おう - iakioの日記

例えば、関数の引数に使ってみる。

SELECT hello('msg=>hogehoge');

まるでPythonのキーワード引数みたいじゃないか。(せっかくginとか使えるのにそんなことに使うのかよ、というのもありますが)。

デフォルト値も設定してみます。

=# CREATE OR REPLACE FUNCTION hello(hstore) RETURNS text AS $$
BEGIN
  RETURN 'Hello,' || (COALESCE(($1)->'msg', 'World'));
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION
=# SELECT hello('msg'=>'aaaaa');
    hello
-------------
 Hello,aaaaa
(1 row)

=# SELECT hello('');
    hello
-------------
 Hello,World
(1 row)

うん。これでHTTPのGETとかPOSTとかをそのまま渡す妙なWebフレームワークが作れるかもしれない。

SQLインジェクションとDBD::PgPP

| 13:04 | SQLインジェクションとDBD::PgPP - iakioの日記 を含むブックマーク はてなブックマーク - SQLインジェクションとDBD::PgPP - iakioの日記

PostgreSQL8.1.4のリリースが2006年で、DBD::PgPPの0.05が2004年なので、standard_conforming_stringに対応していないのは当然といえば当然かもしれませんが。

こんどはPerlでの例。PerlからPostgreSQLを利用する場合には、DBIとDBD::Pgの組み合わせが利用される・・・と思うのだが、筆者の環境では中々DBD::Pgがインストールできなかったので、代わりにDBD::PgPPを使って検証してみた。PgPPはピュアPerlで記述されたPostgreSQL用インターフェースである。DBD::PgPP中のquote()のソースを見ると、文字の変換部は以下のようになっていた(バージョン0.05)。

徳丸浩の日記 - SQLインジェクション対策 - SQLエスケープにおける「\」の取り扱い

DBD::PgPPはもう使ってはいけないモジュールと言ってしまっていいかもしれなません。

「DBD::PgPP」の事例は脆弱性として取り扱われてもよいと思う。

はてなブックマーク - HiromitsuTakagiのブックマーク / 2008年06月03日

DBD::PgPPを使っている人はそう多くないのではないかと思いますが、Rubyのpostgres-prはかなり使われているのではないかと思います。これも同様の問題が発生すると思います(やっぱ2004年から更新されてないし)が、何をどうしろと言えるほど私はRubyを知りません。

  def self.escape(str)
    # TODO: correct?
    str.gsub(/\\/){ '\\\\' }.gsub(/'/){ '\\\'' }
  end

RaniRani2012/12/26 09:11This is way more hluepfl than anything else I've looked at.

trjoqntrjoqn2012/12/29 08:09tt57QG , [url=http://qkwgeephrern.com/]qkwgeephrern[/url], [link=http://xrhdurjpgorv.com/]xrhdurjpgorv[/link], http://snridnvpoaex.com/

トラックバック - http://postgresql.g.hatena.ne.jp/iakio/20080603