ikepyonのだめ人間日記

セキュリティに関することを書いていく予定。

SQL文のエスケープ方法

SQLで問題となるのは「'」であると思う。「'」は文字列の区切りを示しているので、これをエスケープする必要がある。
そのとき、Cやperlなどでは「\'」とエスケープするが、SQLでは「''」とエスケープするように決められているはず。(はずというのは手元に規約がないので^^;)
ところが、一部RDBMSではCなどと同じように「\'」も許可しているため「\'」でもOKという誤解があるみたい。
http://jp2.php.net/manual/ja/function.addslashes.php

addslashes() の使用例は、 データベースにデータを登録するときです。例えば、 O'reilly という名前をデータベースに挿入するには、 エスケープする必要があります。ほとんどのデータベースでは O\'reilly という具合に \ を使用します。これはデータベースにデータを格納する場合のみ必要です。 追加される \ は挿入されません。 PHP のディレクティブ magic_quotes_sybase を \ にすると、' はもうひとつの ' でエスケープされます。

「\'」でもエスケープできないDBの場合、addslashesを使っても意味がないんだけどorz

参照:http://www.tokumaru.org/d/20080601.html#p01