[前][次][番号順一覧][スレッド一覧]

mysql:10328

From: "TOYOSHIMA,Masayuki" <"TOYOSHIMA,Masayuki" <mtoyo@xxxxxxxxxx>>
Date: Tue, 19 Oct 2004 09:54:07 +0900
Subject: [mysql 10328] place holder と SQL injection

豊島(東京外国語大学アジア・アフリカ言語文化研究所)と申します。

(mysql だけの問題ではないのですが) 次の考え方は正しいでしょうか。

「place holder を使えば、SQL injection は防ぐことができる」

-----------

perl DBI を使って、$user_input にユーザ入力を貰うとして、

my($sql)="SELECT a_field FROM a_db WHERE (some_field LIKE \'$user_input\')";
eval {
    my($p)= $DB->prepare($sql);
    $p->execute() if ($p);
};

とした場合は、ユーザに

    「STRING' OR 'A' = 'A」
    
とか入れられると、 some_field LIKE 'STRING' OR 'A' = 'A' となって(常に 
where 句が真になり)全データを取られる SQL injection の脆弱性が生じますが、

my($sql)="SELECT a_field FROM a_db WHERE (some_field LIKE ?)";
eval {
    my($p)= $DB->prepare($sql);
    $p->execute($user_input) if ($p);
};

と place holder を使えば、適切な quote 処理が行われるので、それが生じな
い、という主張です。

もっと手の込んだ SQL injection (複文を羅列して勝手に drop table とかする
様なもの)でどうなのか、ちょっと考えが及ばないのですが…。

豊島正之(とよしま まさゆき) mtoyo@xxxxxxxxxx
http://jcs.aa.tufs.ac.jp/mtoyo/
東京外国語大学アジア・アフリカ言語文化研究所 
〒183-8534 東京都府中市朝日町3-11-1 代表Fax 042-330-5610



[前][次][番号順一覧][スレッド一覧]

->   10328 2004-10-19 09:54 ["TOYOSHIMA,Masayuki"] place holder と SQL injection           
     10329 2004-10-19 22:19 ┣["KAWAI,Takanori" <GC]                                       
     10330 2004-10-20 07:51 ┃┗["TOYOSHIMA,Masayuki"]                                     
     10334 2004-10-21 04:12 ┗[ayumi <ayumi@xxxxxxx]