カテゴリー: WordPress

  • 【WordPress】コメントスパム防止プラグイン

    WordPressを使っていると次第にコメントスパムが増加してきます。

    その対策としては、Akismetプラグインを入れることなどが挙げられますが、Akismetだとスパムの判別は出来ても、スパム投稿そのものは防ぐことはできません。その結果、データベースのオーバーヘッドが増加し、サイトのパフォーマンスも低下してきます。

    そこで、PHPを使い、コメントが、スパムの特徴であるURL入力している場合、投稿そのものを中止する簡易スクリプトを組んでみました。

    wp-content/pluginsディレクトリ内に、stopping_spamsディレクトリを作成します。そして、その中に、次のstopping_spams.phpファイルを新規に作成します。

    ※お約束ですが、ご利用は自己責任でお願いします。

    <?php
    
    /*
    Plugin Name: Stopping Spams
    Plugin URI: http://webmaster.chielog.com/
    Description: For Stopping Spams before Insert to DB
    Author: webmaster.chielog.com
    Version: 1.0.0
    Author URI: http://webmaster.chielog.com/
    License: GPLv2 or later
    */
    
    //pre_comment_content(コメント本文)
    //コメント本文がデータベースに保存される前に適用されるフィルター。 
    
    add_filter('pre_comment_content', 'stopping_spams');
    
    function stopping_spams($comment_content){
    
        $spam_flag = false; //初期値はfalse
    
        //URL欄判定(入力されていればスパムと判定)
        if (!empty($_POST['url'])) {
            $spam_flag = true;
        }
    
        //スパム時の処理
        if ($spam_flag) {
    
            wp_die('comment error.'); //終了
    
        } else {
    
            //スパムでなければそのまま返す
            return $comment_content;
        }
    }

    コメントが投稿されDBに保存される直前にフィルターフック(pre_comment_content)により、$_POST[‘url’]の入力をチェックし、URLの入力を判定しています。

    たった30行程のコードですが、このプラグインを設置することによりスパムが随分と減りました。

    以上です。

  • WordPress3.5.2未満にXSSの脆弱性

    先日、さくらインターネットのホームページを見ていると、お知らせ欄に、「【重要】WordPressにおけるクロスサイトスクリプティングの脆弱性について」(2013/8/1)なる標題が。

    見てみると、WordPress3.5.2未満にXSSの脆弱性が見つかったとのことです。

    そこで、慌てて、最新のWordPress 3.6に、バージョンアップしました。

    とくに問題なく、バージョンアップでき、管理画面等の使い勝手もそれほど変更はないようなので一安心です。

    それにしても、WordPressのような有名CMSについて、XSSの脆弱性が見つかるとは少し驚きです。

    WordPressを放置してバージョンアップをされていない方は、早めに、3.6を導入した方が良いですよ。

    ちなみに、Yahooのニュースでも取り上げられていたみたいです。

    http://headlines.yahoo.co.jp/hl?a=20130726-00000088-mycomj-sci

    いつも見ているのですが、気づかなかったですね。

  • WordPressが表示されなくなった場合の対処法

    先日、いつもどおり、メールを確認しているとgoogleからメールが。。

    http://webmaster.chielog.com/: Googlebot can't access your site
    Over the last 24 hours, Googlebot encountered 15 errors 
    while attempting to connect to your site. 
    Your site's overall connection failure rate is 88.2%.
    You can see more details about these errors in Webmaster Tools.

    意訳すると、「グーグルの検索用ボットが、あなたのサイトにアクセスできません」という内容です。

    早速、当該ブログにアクセスしてみると、たしかに、表示されない。現象としては、サーバーが落ちている感じにみ見える。

    そこで、サーバーの障害情報を確認してみると、サーバー自体は落ちていない。
    http://mainte.coreserver.jp/

    となると、WordPressのファイルに不具合が生じたのかも。そこで、ファイルマネージャーにて、当該ファイル群を確認するも問題なさそう。

    以前、WordPressが表示されなくなったときは、ファイルを全部入れ替えたら表示されたことがあったのですが、最近は、ファイルを弄っていないし、WordPressの更新処理もしていない。

    そこで、ネットで調べてみると、データベースに不具合が生じている可能性があることが判明。

    CORESERVERでは、MySQLが使えるのですが、そのMySQLに不具合が生じているとのことです。

    具体的には、データベースにオーバーヘッドなるものが発生していて、パフォーマンスが低下しているらしい。なお、オーバーヘッドとは、データベース領域内のゴミのようなものの意。

    そこで、早速、phpMyAdminにて、MySQLにログインして確認してみると、たしかに、いくつかのテーブルにオーバーヘッドが生じています。

    コメント用のテーブルに、オーバーヘッドが多いので、どうやら、コメントスパムが、大量に投稿されるようになったのが原因の一つと推定できます。

    これを解消することにより、ブログが表示されるようになるとのこと。

    オーバーヘッドの解消の方法は、

    テーブル一覧画面の下部にある「オーバーヘッドのあるテーブルを確認してください」リンクをクリックして、テーブルを選択。
    次に、「チェックしたものを:」のセレクトボックスから、「テーブルを最適化する」をクリック。

    これで、オーバーヘッドが解消されます。

    改めて、ブログを確認してみると、きちんと表示されるようになりました。

    以上です。

  • 【XREA】WordPressをSSHでインストールする方法【CORESERVER】

    XREA/CORESERVERにWordPressをSSHでインストールする方法の覚え書きです。

    【1.準備】

    今回は、SSHを使うため、何はともあれ、サーバー管理画面の「ホスト情報登録」から、「SSH登録」をしておきます。

    サーバー管理画面にいるついでに、「データベース」も作成しておきます。アカウントに続く任意の名称をつけ、「作成」をクリック。なお、今回は、文字コードはUNICODEを選択しておきます。

    なお、既に作成しているデータベースを利用するなら、新規データベースの作成は不要です。

    とりあえず、ここまでで、

    1.ホスト情報登録
    2.データベース作成

    の2つを済ませておきます。

    現在、管理画面を開いているので、ファイルマネージャーも開いておくと便利かもしれません。

    【2.WordPressファイルの取得】

    ここまで、終了したら、WordPressの日本語版のサイトに行き、ダウンロードするzipファイルを確認します。

    http://ja.wordpress.org/

    WordPressダウンロード

    今回のファイルはこれです。 http://ja.wordpress.org/wordpress-3.5-ja.zip

    ここまでの作業で、SSHに対して、ホスト情報が反映される頃なので、SSHクライアントを立ち上げます。ここでは、「TeraTerm」を使用します。

    「TeraTerm」にユーザーアカウントとFTPパスワードを入力してログインします。なお、この際、パスワードをCTR+Vで貼り付けしても反映されないので、マウス操作で貼り付けをします。

    さて、ログインできたら、WordPressをインストールするディレクトリまで移動(および、ディレクトリ作成)をします。

    cd public_html 
    mkdir example.com 
    cd example.com

    ここでは、example.com をWordPressをインストールするディレクトリとしています。

    さて、このexample.com 内に先ほど確認したWordPressのzipファイルをwgetコマンドにより取得します。

    wget http://ja.wordpress.org/wordpress-3.5-ja.zip

    上記コマンドで、zipファイルを取得できます。

    次に当該zipファイルを解凍します。

    unzip wordpress-3.5-ja.zip

    上記コマンドで、瞬時に必要なファイル・ディレクトリが揃います。FTPクライアントでアップロードする手間が省けるのが最大の魅力です。

    ドメイン直下にwordpressディレクトができているので、ここに移動し、ファイルを一覧表示します。

    cd wordpress 
    la

    すると20程のファイル・ディレクトリが存在するのがわかります。

    【3.設定ファイルの編集】

    インストールに必要なファイルは、wp-config-sample.php です。 ただ、このまま使うのではなく、名前をリネーム(変更)して利用します。変更名は、wp-config.php です。

    cp wp-config-sample.php wp-config.php

    上記コマンドにより、wp-config.php ファイルを作成します。

    次に、必要な設定をwp-config.phpに書きこみます。

    ここでは、vi により、ファイルを編集します。なお、ファイルマネージャーを利用したり、PHP用のエディタで編集することもできます。

    vi wp-config.php

    viでファイルを開くと、編集する部分が丁寧に説明されているので、それに従って書き込んでいきます。

    設定する箇所は、MySQL情報、テーブル接頭辞、秘密鍵、などです。

    まず、自分の情報に書き換えるため、不要な箇所を「x」または、「dd」で削除します。

    次に、「i」で入力モードにし、必要な情報を書き込んでいきます。

    最後に、エスケープで編集モードに戻り、「:w」で上書き、「 :q」 で終了します。

    設定ファイルの編集はここまでです。

    【4.インストール】

    以上まで完了したら、次に、作成したドメインのインストールページにアクセスして、インストールを完了させます。

    http://example.com/wordpress/wp-admin/install.php

    ここまで上手くできているなら、「ようこそ」ページが表示されます。

    WordPressようこそ

    ここで、ブログタイトルやパスワード、メールアドレスなど必要な情報を入力して、下段の「インストール」をクリックします。

    これで、インストールが完了します。おそらく、WordPressの管理画面である「ダッシュボード」に遷移しているはずです。

    【5.トップページURLの変更】

    ただ、このままだと、ブログのトップページのURLが、

    http://example.com/wordpress/

    となっているので、これを

    http://example.com/

    がトップページになるように変更します。

    まず、WordPressの「設定」→「一般」と進み一般設定画面において、

    「サイトアドレス(URL)」を、http://example.com に変更します。この際、最後のスラッシュは不要です。

    変更したら、「変更を保存」をクリック

    なお、「WordPress アドレス (URL)」は、そのままでOKです。

    次に、サーバーにある、wordpressのディレクトリ内のファイルをコピー、編集します。

    まず、wordpressディレクトリ内に移動し、index.phpを一段上のドメイン直下にコピーします。

    cp index.php ../index.php

    index.php をコピーできたのを確認して、ドメイン直下の当該ファイルを変更します。

    vi index.php

    require(‘./wp-blog-header.php’);

    の行を次のように変更します。

    require('./wordpress/wp-blog-header.php');

    以上で基本的な設定は終了です。

    【6.パーマリンクの設定】

    ついでに、パーマリンクの設定もしておきましょう。

    ここでは、

    /%category%/%postname%

    として、カテゴリーに、記事名を足したものにします。

    もし、最後を、.htmlにしたければ、下のようにします。

    /%category%/%postname%.html

    ここで、XREA/CORESERVERでは、.htaccessの書きこみ権限はないので、作成するように促されます。

    そこで、

    vi .htaccess

    として、表示されたmod_rewrite ルールを書き込み保存します。

    これでパーマリンクの設定も終了です。

    以上、お疲れ様でした。

  • WordPressサイトが開かなくなった時の対処法

    本日、当ブログにアクセスしたところ、なぜか、表示されない障害に遭遇。

    3~4時間ほど、あれこれ思案して、最終的には、ブログの手動バージョンアップ(アップグレード)で障害を解消しました。

    以下、その時の状況を覚書しておきます。

    まず、障害に気づいたのは、IEでアクセスした際、表示に時間がかかり、「このページは開くことができません。」とかいうエラーメッセージが表示され時点です。

    最初は、サーバーの障害、または、DNS障害かと思ったのですが、同一サーバーにある他サイトやブログは表示されるので、このブログ自体の障害と推測しました。

    しかし、ブログの障害の原因は特定できず。

    設定ファイルの異常かとも考えましたが、最近は、特に弄ってはいないので、設定ファイルの線は薄そう。 

    表示されない以上、どこかに不具合があるのは確かなので、思いきって、バージョンアップすることに。

    ただ、ブログが表示できないため、ログインしての自動バージョンアップではなく、FFFTPを使用して、手動でバージョンアップを実行しました。

    手動バージョンアップの手順

    1. WordPress日本語本家から、最新版のWordPressをダウンロード
    2. サーバーからwp-contentディレクトリをダウンロード(バックアップ)
    3. wp-config.phpファイル(設定ファイル)をダウンロード (バックアップ)
    4. .htaccessファイルをダウンロード (バックアップ)
    5. データベースをバックアップ
    6. wordpress直下のファイルを削除
    7. wp-adminディレクトリを削除
    8. wp-includeディレクトリを削除
    9. wp-contentディレクトリ内のlanguagesディレクトリを削除
    10. 削除したディレクトリ・ファイルの場所に、新ディレクトリ・ファイルをアップロード
    11. wp-config.phpファイルをアップロード
    12. .htaccessファイルをアップロード
    13. wp-admin/upgrade.phpにアクセスしてアップグレードを開始

    ディレクトリ・ファイルの削除、アップロードは、FFFTPを使用しました。まとめてアップロードするとフリーズするので、小さなディレクトリ単位で少しずつアップロードするのが良いと思います。

    また、最初にバックアップを取って置くと安心できます。データベースのバックアップも取っておいた方が良いでしょう。

    基本的な作業は、削除したところに、新バージョンのディレクトリ・ファイルをアップロードするだけです。wp-contentディレクトリは、language以外はそのまま残しました。

    今回はこれで上手くいきましたが、そうでない場合にはプラグインも削除・更新した方が良いかもしれません。

    結局、小一時間で作業は終了しました。

    表示されなかった不具合が解消され、ついでにバージョンアップもできたので良しとします。