この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレスでショッピングカートを作ろう その9 精算前にユーザー情報を確認する

前回はショッピングカートの中身を変更したり、削除したりしました。
今回はカートの精算前にユーザー情報を確認する画面を作ります。

ここまでショッピングカートを作ってきたわけですが、いよいよ精算前の処理を作ります。
ここまでで問題になることがいくつかあります。

1.商品元データがないため商品価格を改竄できてしまう
2.ユーザーの入力をサニタイズしていない
3.外部サイトからも商品をカートに入れることができてしまう
4.nonceをチェックしていない

「1.商品元データがないため商品価格を改竄できてしまう」についてですが、今回はテスト用に適当に作った商品ページから商品を登録しています。商品の情報は全てフォームに埋め込まれています。また外部サイトからの商品をカートに追加できてしまうため、偽の商品情報であっても無条件にカートに追加できてしまいます。
具体的には価格を不正に書き換えて安くすることができてしまいます。

ではどうすればいいかというと、本来であれば商品元データを内部で作っておき、カートに追加された際に元データから情報を取得すればいいわけです。これなら改竄できませんよね。
実際には商品管理画面を作っておき、その時に商品IDと商品情報を入力します。
今回はそこまでは作りこみません。要望があれば第二期に取り上げます。

それから「2.ユーザーの入力をサニタイズしていない」ですが、ユーザーがHTMLタグやJava Scriptを入力できてしまうと色々と厄介な問題が発生します。そこでサニタイズ(無害化)する処理が必要になります。
具体的にはHTMLタグなどはエスケープしておきます。エスケープというのは例えば「<」括弧であれば「&lt;」に置き換えるとブラウザ側で自動的に「<」に変換してくれます。
こうすることでHTMLタグを入力されても無害な文字列として取り込むことができるというわけです。

「3.外部サイトからも商品をカートに入れることができてしまう」ですが、こちらはリファラーをチェックして同一ドメイン以外からのフォーム送信であれば受け付けないようにします。

最後は「4.nonceをチェックしていない」ですが、CSRF攻撃対策としてフォームに「nonce値」を埋め込んでおき、ワードプレス内部でチェックをすることで乗っ取りを防ぐことができます。

この辺を最後に実装します。とりあえず今はコーディングがややこしくなるだけなので実装しないことにします。

さて、精算前にユーザー情報を確認する方法ですが、ユーザー情報についてはワードプレスから取得します。
取得したデータはショッピングカートのように表示します。
具体的にはユーザーアカウント、氏名、メールアドレス、電話番号、住所といった情報です。

しかし、ワードプレスから取得できるユーザー情報というのは最低限しかありません。
ユーザーアカウント、氏名、メールアドレスぐらいです。
氏名については入力は強制ではない場合もあるので、取得できないこともあります。
そこで、足りないユーザー情報についてはユーザー自らが入力できるようにします。
また、ワードプレスにユーザー登録をしてないゲストユーザーは、空白の項目を全て入力してもらう必要がありますね。

因みに前述した商品管理画面のように本格的に作るのなら会員管理画面も作る必要があります。
ワードプレスの「user_meta」テーブルには独自のユーザー情報を保存できるので、管理画面を使ってそこに保存しておくと、精算時にログインしていればどんな情報も呼び出すことができます。

会員管理画面についても今回は作りません。機会があれば次回に取り上げます。
では作ってみましょう。
前回同様、テーマフォルダの「functions.php」に記述します。

関連記事