*

ペンション・民宿・プチホテル用 宿泊予約 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 プラグインを作る(4)データベース基礎

今回はWordPressのプラグイン開発で必要になるデータベースに関する知識ついて調べました。この辺

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(2)

前回の物を若干変更しながら、どんどん進んでいきたいと思います。今回は管理画面の表示内容について行って

記事を読む

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

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

記事を読む

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

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

記事を読む

ペンション・民宿・プチホテル用 宿泊予約 WordPress プラグインを作る(1)

初心者が、あらためて 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 ↑