*

ペンション・民宿・プチホテル用 宿泊予約 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 プラグインを作る(11)空室管理画面 B

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

記事を読む

ワードプレス用宿泊予約プラグイン開発「空室情報の表示」とか

久しぶりのワードプレスネタ。全然完成しませんわ。今回は最初にブラウザのキャッシュを切る作業をしました

記事を読む

WordPress用プラグインで使う宿泊予約用カレンダーをPHPで書くぜ

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作るシリーズで使う、空き部

記事を読む

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

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

記事を読む

WordPressのプラグインで独自のページを作る方法がわからない

Wordpressのプラグインを開発していて疑問がでてきました。プラグイン独自のページはどうすればい

記事を読む

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

Message

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

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

気になる情報・新製品発見メモ

日頃ネットをウロウロしていて記事にするほどでもない情報、記事にするほど

Macで MikuMikuDanceができる〜 nanoemというフリーソフト

blenderが難しすぎて挫折しかかっていたときに知った xismo

wacom Intuos ペンモデルの small (ミントブルー)がかわいい

誰がなんと言おうと美少女です! すっかり xismoが気に入って

無料3D作成ソフト xismo がすごくわかりやすい感じ

こんばんは 心は美少女です。 Blenderを使いこなす、という

【電子たばこ】glo なら脱タバコできるのか?

こんばんは 美少女です。 IQOSを試したけど味になじめず、Pl

今頃 SONY α6300にタイムラプスアプリケーションを購入

急に思い出して SONY a6300でのタイムラプス(低速度撮影・微速

→もっと見る




  •  

PAGE TOP ↑