水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 2009年のえび日記 > 2009年3月 > 2009年3月3日(火曜日)

2009年3月3日(火曜日)

DBIx::Class::ResultSetのsearch_literalをSQLインジェクションで突破

公開: 2009年3月5日0時25分頃

DBIx::Class::ResultSetでsearch()を使うとき、第二引数に{rows=>10}などを渡すと簡単にLIMITが指定できます。が、同じ事をsearch_literal()でやろうとすると、可変個のバインド変数を受け取るためかうまく行かず……。DBIx::Class::ResultSetの説明 (search.cpan.org)を読むと、search()の引数が「$cond, \%attrs?」なのに対してsearch_literal()の引数は「$sql_fragment, @bind_values」となっていて、そもそも\%attrsを渡せるようにはなっていないようですね。

……で、いろいろ調べていたら、こんな書き込みを発見しました。

$rs->search_literal('id = ?) FOR UPDATE; --', $id);

search_literalは与えた文字列のまわりを括弧でくるんでくれるので、 FOR UPDATEの部分を外に出すために途中で括弧を閉じ、そのままだと お尻の括弧が余るのでコメントにして無視させるというかなり強引なトリックです。

以上、Perl::DBI より

これはすごい。search_literalの引数はWHEREの後ろに括弧で括られて出力されるので、引数に「)」を混ぜることによってその括弧を閉じてしまい、さらに後ろにいろいろ指定できるようにするという「強引な」技です。要はSQLインジェクションでやりたいことを実現するという……。

関連する話題: セキュリティ / Perl

森の生活 103日目: ひなまつり

公開: 2009年3月5日0時25分頃

街へいこうよ どうぶつの森 (www.amazon.co.jp)、103日目。

ひなまつりということで。

菱餅がもらえたりしましたが。

関連する話題: ゲーム / Wii / 任天堂 / どうぶつの森 / 街へいこうよ どうぶつの森

最近の日記

関わった本など