*

ペンション・民宿・プチホテル用 宿泊予約 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 プラグインを作る(7)セキュリティ対策

ここでセキュリティ対策についてまとめて復習してみます。ネットを検索すると、さまざまな対策が紹介されて

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(5)メニュー階層化

今回はオリジナルプラグインの管理画面でのメニュー作成について。かなりすんなりと出来てしまったので短め

記事を読む

WordPressのプラグイン開発を効率的にするフレームワークたち

Wordpressでプラグインを作っていて「フレームワーク使えないのかな?」と疑問を持ちました。そこ

記事を読む

ワードプレス用宿泊予約プラグイン開発「空室情報読み込み」

前回までに作ったカレンダーに空室状況を表示させます。最初に表示欄を作って確認してからデータベースの読

記事を読む

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

Message

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

CAPTCHA


Optionally add an image (JPEG only)

Sponsored Link

エレコム GRAPH GEAR NEO カメラバッグDGB-P01BKにジンバルを入れる

やっぱり高いけどEndurance (エンデュランス) カメラバッグの

エレコム GRAPH GEAR NEO カメラバッグDGB-P01BKが北の国から

一年中GWの美少女です。 Lowepro カメラリュック フリッ

MOZA Mini-S スマホ用スタビライザーが届いた!

1万円弱で買えるスマホ用ブラシレスジンバルの新型 MOZA Mini-

GoPro Hero7 Black用 保護ケース アルミ合金保護フレームがいいよって話

別に大した話ではありません。 最近書くことが少ないのでたまには書

期待の新製品 MOZA Mini-S スマホ用スタビライザーが発売されたみたい

教えてもらった新製品のホームページで MOZA Mini-Sが紹介され

→もっと見る




  •  

PAGE TOP ↑