*

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(8)セキュリティ対策

公開日: : 最終更新日:2013/06/28 WordPress ,

前回紹介したホームページを参考にソースを書き換えてみました。特に標準の option テーブルにレコードたくさん作るのはマナー違反になるらしいのでさっそく修正しました。

option テーブルの読み書き

最初にクラスファイルを修正します。

wp-contents/plugins/drtehotel/class/initialization.php

function update_options() {
  if ( is_admin() ) {
    $this->mail = $_POST['DrTE_mail'];
    $this->mail2 = $_POST['DrTE_mail2'];
    $op_data = array(
      'DrTE_mail' => $this->mail,
      'DrTE_mail2' => $this->mail2
    );
    update_option( 'DrTE_option', $op_data );

option テーブルへのデータ更新を1レコードにしました。データは連想配列で持たせて更新します。実際には受け取るデータ($_POST)の検証作業が必要になってくるでしょう。このメールアドレスの検証がまた色々あるので別に詳しく考えます。

function load_options() {
  $op_data = get_option( 'DrTE_option' );
  $this->mail = $op_data['DrTE_mail'];
  $this->mail2 = $op_data['DrTE_mail2'];

レコードを読み込んでデータを分解し、プロパティに代入する作業です。

nonce のセキュリティを高める

次は「wp_nonce_field」の引数を二つにしてみました。

function show_init() {
  echo '<div class="wrap">';
  echo '<div id="icon-options-general" class="icon32">
        <br /></div><h2>初期設定</h2>';
  echo '<form action="" method="post">';
  echo "<input type='hidden' name='option_page' value='media' />";
  echo '<input type="hidden" name="action" value="update" />';
  echo wp_nonce_field('op_update', 'show_init');

当然ですが受け取る側でも変更しておく必要があります。

wp-contents/plugins/drtehotel/drtehotel.php

function show_init_page() {
  $io = new INIT();
  //アップデートの確認
  if ($_POST['action']=='update') {
	if (check_admin_referer('op_update', 'show_init')) {
	  $io->update_options();
	  $io->comments = '<div id="message" class="updated">
     <p>更新しました。</p></div>';

ところがここで問題が。

スクリーンショット 2013-06-22 1.13.11

「本当に実行していいですか ?」とだけ表示されて更新されません。どうやら「check_admin_referer」で引っかかっているようです。

原因を検索しましたが見つかりません。しかたがないので「check_admin_referer(‘op_update’)」でしばらく進むことにしました。もちろん「wp_nonce_field(‘op_update’)」も変更しておきます。

プラグインを削除した時の処理

そういえばプラグインを削除した時に、オリジナルテーブルの削除は書いたけど、オプションのレコード削除は書いていませんでした。コレはシンプルに delete_option( ‘DrTE_option’ ); を uninstall.php に加えれば大丈夫だと思います。

wp-contents/plugins/drtehotel/uninstall.php

if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') )
    exit();

global $wpdb;
$table_name = $wpdb->prefix . 'rooms';
$sql = "DROP TABLE " . $table_name;
$results = $wpdb->query( $sql );
delete_option( 'DrTE_option' );

奥が深いメールアドレスの検証

一般的には正規表現を使ってメールアドレスの検証をします。しかしこれが簡単ではありません。ちょっと検索すると色々な話題が出てきて興味深くもありますが、正規表現が苦手な私にはハードルが高くてついていけません。

管理画面なので簡単なチェックでも問題ないような気もしました。しかし今後も出てくるであろうメールアドレスの検証なので、ここは次のページの内容をマルパクリさせていただくということにしました。

http://wada811.blogspot.com/2013/03/best-email-format-check-regex-in-php.html

function isValidEmailFormat を採用させて頂きました。感謝感激です。

wp-contents/plugins/drtehotel/class/initialization.php

function update_options() {
  if ( is_admin() ) {
	if($this->isValidEmailFormat($_POST['DrTE_mail'])) {
		$this->mail = $_POST['DrTE_mail'];
	}

これで初期設定画面は完成です。form action=”” とか気になるけどいいのだろうか?


Sponsored Link


 
 

関連記事

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(6)初期設定画面

ここまでで、ひと通りの仕組みというか流れは理解できたような気がします。まずは初期設定画面から制作して

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(10)空室管理画面 A

さっそく空室管理画面を作っていきます。今回は画面設計中心です。部屋タイプの選択と、空き情報を更新する

記事を読む

新バーチャル歌姫デビュー CeVIO Creative Studio は期待して良さそう

既にサンプル曲がガンガンアップされています。噂の歌声合成ソフト CeVIO Creative Stu

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(9)空室管理画面を考える

前回までで基本的なプラグインの制作方法を簡単に学びました。今回からは空室管理の画面を作ってみます。柔

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(11)空室管理画面 B

空室管理画面の2回目。今回は空室状況の入力欄と月が変わった時の処理を加えてみます。今回は一覧表示なの

記事を読む

ご質問は掲示板へお願いいたします。

Message

メールアドレスが公開されることはありません。

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

GoPro HERO7 Black 〜 インフルの熱で異常行動か?

何故か記憶に無いのですが GoPro HERO7 Blackが届きまし

軽量レバーロック式三脚を物色する美少女

旅行用三脚として活躍しているのは GITZO GT1542T と KT

激安中華な Bluetooth 5.0 イヤホンを買ってみたけど便利ね

前から気になっていた Bluetooth 5.0 イヤホン。 耳

2018年に購入したもので最も良かったものはミニスライダー

あけまして おめでとうございます 2019年 第一発目にご紹介す

Final Cut Pro X 用の無料 Calloutsプラグイン13種&12種がいい感じ

すっかり Final Cut ネタが続きますが皆様いかがお過ごしでしょ

→もっと見る




  •  

PAGE TOP ↑