改造時に注意するべきセキュリティチェックポイントがありますか?

  • その他
投稿日:2009/01/19
EC-CUBEに限らず、WEBプログラミングをする人はこれだけは気をつけましょうという、2つのポイントがありまして、それはSQLインジェクションとクロスサイトスクリプティングというものです。EC-CUBEを改造するときにも、この2点には注意しておく必要があります。SQLインジェクション脆弱性(ぜいじゃくせい)

その名のとおり、SQLを挿入(インジェクション)できるというセキュリティホールです。このセキュリティホールがあると、勝手にSQL文が実行出来てしまいます。例えばデータの全消去とかも出来てしまいますので、相当に危ないです。

たとえば、ログインで以下のように直接文字列を連結してSQL文を組み立てて実行するコードを書いたとします。


$sql = "SELECT * FROM dtb_customer WHERE email = '" + $eMail + "'";
pg_query($conn, $sql);


$eMailに「someone@somewhere.jp」といった値がセットされていれば、


SELECT * FROM dtb_customer WHERE email = 'someone@somewhere.jp'


というSQLが普通に実行されますね。

ですが、もしイジワルな人が「a'; DELETE FROM dtb_customer 」と入力するとどうなるでしょうか。その場合、


SELECT * FROM dtb_customer WHERE email = 'a'; DELETE FROM dtb_customer


というSQLが実行されてしまうのです。;(セミコロン)で区切って、全く違うSQLを挿入しています。つまり、email='a'の顧客をSELECTするSQLと、顧客を全部DELETEするSQLの2つが実行されます。これは危険ですよね!!

もちろん、EC-CUBEはそんな作り方にはなっていません。さきほどのプログラムのように、SQLを文字列連結で組み立てるのではなくて、PARE::DBというライブラリを使って操作しています。実際にはSC_DbConnといったクラスを経由してPARE::DBを使っていますので、その作法を真似してコードを書きましょう。


スクリプト混入(クロスサイトスクリプティング脆弱性)

お客さんが入力したデータを表示するようなアプリケーションで、お客さんがJavaScriptを入力することができると、悪意のあるコードを埋め込むことができるという脆弱性です。クロスサイトスクリプティングというのは、そのスクリプトを仕込むことによって、クッキーなどをサイトを超えて別のサイトへ漏洩させたりすることができる可能性があるということです。


他のお客様に迷惑をかける踏み台になる危険性がある、という意味では、お店の信頼性を傷つける可能性のある危険な問題なのですが、EC-CUBEの場合、お客さんが入力したデータを、お客さん以外が見ることの出来る箇所はほとんどありません。


関係のある機能と言えば「お客様の声」のところくらいです。もちろんEC-CUBEではちゃんと「お客様の声」の入力からJava Scriptを取り除く処理が入っていますので安全ですよ。それに、この「お客様の声」は管理者画面のレビュー管理で「表示」を指定しないかぎり表示されません。





以上の2点が、よく言われる注意点です。ポイントをよく理解して、改造時には注意しましょう。
独立行政法人 情報処理推進機構 セキュリティセンターの「安全なウェブサイトの作り方」に分かりやすくポイントがまとめられています。ECサイト構築担当者にとっては必須の知識だと思いますので、ぜひご覧ください。
http://www.ipa.go.jp/security/vuln/websecurity.html
http://www.ipa.go.jp/security/vuln/documents/website_security.pdf
関連カテゴリ