*

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

空室情報のデータベース処理を一気に終えました。ごちゃごちゃしてきたので、もっとスッキリ書く方法が無い

記事を読む

ワードプレス用宿泊予約プラグイン開発「空室カレンダー表示」

前回ネットで検索して見つけた calendar($year = "", $month = "") 関

記事を読む

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

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

記事を読む

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

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

記事を読む

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 ↑