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]