カテゴリー: Develop

  • WordPressのヘッダーから無駄なコードを除去する

    WordPressのヘッダーから無駄なコードを除去する

    お久しぶりです。
    年末の納品ラッシュで、コラム更新が遅れてしまいました。

    さて、今回のコラムでご紹介するTipsは、WordPressでサイトを作ったら、最初に行っておきたい設定です。

    WordPressは、デフォルトで様々なコードが出力されるようになっていますが、中には不要なコードが出力されており、表示速度に影響してしまっている可能性があります。

    Googleは表示速度をランキング変動における基準の1つとしていることを公表しておりますので、ご自分のサイトを確認して、対応していなければ不要なコードを除去することをお勧めいたします。

    設定といっても、functions.phpに少し書き加えるだけで、面倒な事は一切ありませんのでご安心ください!

    1. 絵文字出力用スクリプトの停止

    WordPressは、4.2のバージョンからデフォルトで絵文字が使用できるようになりました。

    このアップデートにより、絵文字を表示する為のスクリプトがwp_headにフックされ出力されているのですが、絵文字を使ったサイトをあまり見たことがありません…。

    サイトの表示速度にも影響をするため、不要なスクリプトは非表示にしてしまいましょう。

    remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
    remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
    remove_action( 'wp_print_styles', 'print_emoji_styles' );
    remove_action( 'admin_print_styles', 'print_emoji_styles' );	
    remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
    remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );	
    remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
    add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
    add_filter( 'emoji_svg_url', '__return_false' );

    2. バージョン情報を非表示

    WordPressのバージョン情報を外部に公開するということは、セキュリティリスクに繋がりかねません。

    SEO上の観点でも特に必要なものではなく、表示しているだけ無駄なので非表示にしてしまいましょう。

    remove_action( 'wp_head', 'wp_generator' );

    3. XML-RPCリンクを非表示

    以前の記事でもご紹介致しましたが、XML-RPCを不正利用した攻撃手法が存在しており、こちらもセキュリティリスクになり得ますので、非表示にしましょう。

    remove_action( 'wp_head', 'rsd_link' );

    4. wlwmanifestリンク非表示

    皆さんは、「Windows Live Writer」というソフトを使用したことがありますか?
    または、一度でも聞いたことがありますか??

    私はありません。

    このソフトからWordPressへ記事を投稿する際に必要なmetaタグとなっておりますが、そもそもこのソフトを使用しないのであれば不要になりますので、こちらも削除しましょう。

    remove_action( 'wp_head', 'wlwmanifest_link' );

    5. shortlinkを非表示

    WordPressは、クライアントからサーバーへ送信されたクエリーを解析し、該当する記事をデータベースから取得したのちクライアントへhtmlを送信しています。

    shortlinkは、その記事の完全にユニークな投稿IDを示しておりますが、これもまたSEO上では不要なタグです。

    remove_action('wp_head','wp_shortlink_wp_head' );

    6. リソースごとのバージョンを非表示

    WordPressでスクリプトを追加したい場合は、wp_enqueue_scriptというフックを利用する事が多いですが、これを利用した場合に出力されるタグには、WordPressのバージョン情報が付与されています。

    上記の説明でもありましたが、WordPressに関わらずCMSなどのバージョンを外部に公表するという事は、セキュリティホールがある場所を教えてしまっているようなものです。

    この情報はセキュリティリスクとなり得ますので、隠してしまいましょう。

    function clear_resource_version( $src ){ 
    	$parts = explode( '?ver', $src ); 
    	return $parts[0]; 
    } 
    add_filter( 'script_loader_src', 'clear_resource_version', 15, 1 ); 
    add_filter( 'style_loader_src', 'clear_resource_version', 15, 1 );

    7. rel=”api.w.org”を非表示

    WordPressのバージョン4.7以降、コアにREST APIが実装されました。

    このタグは、REST APIを使用するためのタグですが、バージョン4.7でセキュリティ事故を起こした原因となる機能です。

    もちろん、すぐアップデートにより改善されましたが、個人でブログを運営している方で、REST APIを活用している方はそう多くないと思います。

    もしご自分のサイトで利用されていない方は、この機能ごと無効化してしまった方がセキュリティリスクを抑える事が出来ますので、無効化する事をお勧め致します。

    remove_action('wp_head', 'rest_output_link_wp_head', 10);
    remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
    remove_action('template_redirect', 'rest_output_link_header', 11, 0);

    まとめ

    最後に、これまでに紹介したコードをまとめたものを記述しておきますので、ご自分のサイトで不要な箇所はコメントアウトするなどでご利用ください。

    function clear_header_source() {
    
    	remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
    	remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
    	remove_action( 'wp_print_styles', 'print_emoji_styles' );
    	remove_action( 'admin_print_styles', 'print_emoji_styles' );
    	remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
    	remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
    	remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
    	add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
    	add_filter( 'emoji_svg_url', '__return_false' );
    	remove_action( 'wp_head', 'wp_generator' );
    	remove_action( 'wp_head', 'rsd_link' );
    	remove_action( 'wp_head', 'wlwmanifest_link' );
    	remove_action('wp_head','wp_shortlink_wp_head' );
    	remove_action('wp_head', 'rest_output_link_wp_head', 10);
    	remove_action('wp_head', 'wp_oembed_add_discovery_links', 10);
    	remove_action('template_redirect', 'rest_output_link_header', 11, 0);
    
    }
    add_action('init', 'clear_header_source', 10, 0);
    
    function clear_resource_version( $src ){
    	$parts = explode( '?ver', $src );
    	return $parts[0];
    }
    add_filter( 'script_loader_src', 'clear_resource_version', 15, 1 );
    add_filter( 'style_loader_src', 'clear_resource_version', 15, 1 );

    不要なコードを削除することで表示速度の改善に繋がり、SEOにも良い影響がありますので、是非とも皆さんお試しください! 

  • WordPressで最低限やっておくべきセキュリティ対策5つ

    WordPressで最低限やっておくべきセキュリティ対策5つ

    WordPressを使用したサイトはセキュリティが弱い。

    なんて話をよく聞くことがありますが、本当にそうでしょうか?

    WordPressは世界で最も利用されているCMSで、インターネット上の39%のサイトがWordPressで出来ています

    相対数が多いのでハッキングの対象になりやすい傾向はあるものの、CMS本体としてのセキュリティに問題があるケースは多くありません。

    また、WordPressはマイナーバージョンアップが頻繁に行われており、アップデートを都度行っておけば、常にセキュリティを高く保つことが出来ます。

    ハッキングされてしまう多くの原因は別のところにあり、以下の項目を対策していなければ、どのCMSを使おうが全く同じ結果になることでしょう。

    1. ユーザー名・パスワードの見直し

    これは、WordPressだけではなくFTP等にも言える事ですが、もしユーザー名が「admin」だとしたら1年以内にサイトがハッキングされるかもしれません。

    ブルートフォースアタック(総当たり攻撃)によって試行されるユーザーリストの最上位のユーザー名が「admin」でしょう。

    最悪なケース「admin」

    そうならないためにも、まずはWordPressのユーザー名、パスワードを変更してください。

    以下のようなサイトでランダムに生成する事が出来ますので、なるべく強固なパスワードを生成する事でハッキングのリスクを最小限に抑えることが出来ます。

    https://www.luft.co.jp/cgi/randam.php

    2. プラグインの精査

    今、あなたのサイトで有効化されているプラグインは何個ありますか?

    プラグインは非常に便利な反面、数が増えれば増えるほどセキュリティのリスクは高くなります。

    本当に必要なプラグインだけ残して、昔からなんとなく有効化されていたプラグインは停止するべきです。

    「停止中」「更新可能」が無い状態が理想です。

    また、プラグインは定期的に更新していく必要がありますので、極力最新版を使うようにしましょう。

    こちらの記事では、脆弱性が発見されたプラグインについて記載しています。
    該当するプラグインをインストールしている場合は、ただちにアップデートしてください。

    3. 常時SSLで通信する

    近頃では、http://~から始まるウェブサイトは少なくなってきましたが、まだまだ存在しているようです。

    http://~での通信は、全ての情報が平文で送られているため、外部から情報を掠め取る事も、覗き見る事も出来てしまいます。

    セキュリティ上良く無いだけでなく、SEOにも悪影響を及ぼしますので、今すぐにでもSSLを導入しましょう。

    SSLには様々な種類がありますが、Let’s Encryptは誰でも無料で利用する事ができます。

    無料で利用できるSSL証明書「Let’s Encrypt」

    ただ1点、他のSSL証明書と違い更新期間が短いので、自動更新の設定をしておいた方が良いですね。

    4. wp-config.phpを移動

    通常であれば、サーバーのドキュメントルート直下にwp-config.phpを置いてある事が多いと思います。

    この状態は実は危険で、過去に一度.htaccessを書き換えられた結果phpファイルを表示できる状態にされてしまい、世界中にデータベース情報が流出していたお客様もいらっしゃいました。

    そこで、Webの公開ディレクトリ以外にwp-config.phpを置く事で、多少なりともセキュリティリスクを抑えるできます。

    Webの公開ディレクトリが「/var/www/public_html/」であれば、「/var/www/wp-config.php」となるように移動させます。

    wp-config.phpは、wp-load.phpにより読み込まれるのですが、ABSPATH(ドキュメントルート)にwp-config.phpが見つからない場合、dirname()によりひとつ上のディレクトリを探しに行くよう書かれています。

    *
     * If wp-config.php exists in the WordPress root, or if it exists in the root and wp-settings.php
     * doesn't, load wp-config.php. The secondary check for wp-settings.php has the added benefit
     * of avoiding cases where the current directory is a nested installation, e.g. / is WordPress(a)
     * and /blog/ is WordPress(b).
     *
     * If neither set of conditions is true, initiate loading the setup process.
     */
    if ( file_exists( ABSPATH . 'wp-config.php' ) ) {
    
    	/** The config file resides in ABSPATH */
    	require_once ABSPATH . 'wp-config.php';
    
    } elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) {
    
    	/** The config file resides one level above ABSPATH but is not part of another installation */
    	require_once dirname( ABSPATH ) . '/wp-config.php';
    
    } else {
    ///

    データベースへの接続情報は主にwp-config.phpに記述されていますので、とにかくこのファイルを閲覧できないようにする工夫が必要となります。

    5. 管理画面からのファイル編集を禁止

    WordPressには管理画面から直接ファイルを編集する機能が備わっています。

    管理画面にログイン後、「外観」→「テーマエディター」で表示される画面です。

    テーマエディター画面

    最初の項目と関連しますが、安易なユーザー名とパスワードによりログイン画面が突破されてしまった場合、悪意をもったコードをここから埋め込まれる可能性があります。

    安全のためにも、この画面からの編集を禁止してセキュリティリスクを減らしましょう。

    お使いのテーマのfunctions.phpをエディタで開き、下記のコードを最終行に追記します。

    define( 'DISALLOW_FILE_EDIT', true );

    管理画面へ戻り、「外観」のサブメニューの中から「テーマエディター」が消えていればOKです。

    まだまだ対策方法はありますが、「最低限」の対策ですので、近日中に続編を投稿致します!

    面倒な設定が多いので、個人でブログをやっている方には少し難しい内容も含まれると思います。

    WordPress制作のgiscoでは、セキュリティの対策代行や、ご相談を承っております!

    是非お気軽にご連絡ください!

  • WordPressサイトが真っ白に!そんな時チェックするべき項目4つ

    WordPressサイトが真っ白に!そんな時チェックするべき項目4つ

    こんにちは!

    giscoの代表をしております、takafumiと申します。
    WordPressサイトを運営している誰もが恐る現象、それが「画面真っ白」です。

    私もWordPress制作会社の新人時代、嫌というほどこの現象に遭遇し、画面だけでなく頭も真っ白になった事をよく覚えています。

    何をした結果、画面が真っ白になってしまったか分かっている場合は、単純に元へ戻せば良いのですが、パニックになってしまい「訳が分からない!」という事もあるかと思います。

    そんな時に行うべき、復旧するためのチェックポイントを見ていきましょう!

    1. wp_debugをtrueに

    WordPressには、あらかじめデバッグの機能が備わっています。
    WordPressをインストールしたディレクトリにあるwp-config.phpをエディターで開き、wp_debugという定数を探します。

    大抵は、70〜75行目あたりにある事が多いです。

     69 /**
     70  * 開発者へ: WordPress デバッグモード
     71  *
     72  * この値を true にすると、開発中に注意 (notice) を表示します。
     73  * テーマおよびプラグインの開発者には、その開発環境においてこの WP_DEBUG を使用することを強く推奨します。
     74  */
     75 define('WP_DEBUG', false);

    この定数がfalseになっている場合は、trueに変更する事でデバッグモードとなり、エラー内容が出力されますので原因が一発で突き止められます。

    define('WP_DEBUG', false);

    ↑これを、これ↓に変更。

    define('WP_DEBUG', true);

    あとは、表示されているエラー内容を読めば、プラグインのエラーなのか、テーマファイルの中に原因があるのか分かりますので、状況により対処するのみです。

    エラー内容を読んでも分からない?対処法がわからない?

    そんな場合は是非お問合せ下さい!

    2. サーバーのエラーログを確認

    上記作業をしても、画面に何も表示されない場合は、サーバーのエラーログを確認してみましょう。

    エラーログの場所は環境により様々ですので、レンタルサーバーであればコントロールパネルにログインして探してみて下さい。

    通常のLUMP環境であれば一般的には、/var/log/配下にあります。

    エラーログが見つかりましたら、エディタでファイルを開き最終行を確認します。

    WordPressはphpとMySQL環境で動作するCMSなので、Fatal errorにより画面が真っ白になっている可能性が高いです。

    最終行付近のFatal errorを探し、原因となっている箇所を修正すれば完了です。

    3. フィルターフックを外す

    フィルターフックとは、WordPressの挙動や、テーマ・プラグイン等が出力する内容を変更する事が出来る機能です。

    便利な反面、使い方を間違えると画面が真っ白になってしまう可能性があります。

    まずは、管理画面にログインし、WordPressのテーマをデフォルトのものに変更してみましょう。

    この作業で解消する場合は、変更前のテーマの中に原因があるという事が分かります。

    テーマを元に戻し、更に原因を探っていきます。

    大抵はfunctions.phpに追記した関数に何らかの記述ミスがある事が多いです。

    エディターでfunctions.phpを開き、add_filter、add_action(以降フィルターフックと記述します)と書かれている行を全てコメントアウトします。

    function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
      if ( $post_type == 'post' ) {
        $slug = $post_ID;
      }
      return $slug;
    }
    add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );

    ↑これを、これに変更↓

    function custom_auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
      if ( $post_type == 'post' ) {
        $slug = $post_ID;
      }
      return $slug;
    }
    //add_filter( 'wp_unique_post_slug', 'custom_auto_post_slug', 10, 4 );
    //↑コメントアウトはスラッシュ2個です。

    上記はあくまでも例ですので、全てのadd_filterやadd_actionをコメントアウトしてください。

    この作業で画面真っ白現象が解消したら、次はコメントアウトをひとつずつ戻していき、「どのフィルターフックのコメントアウトを外した時に画面が真っ白になるか」を突き止めます。

    これにより、フィルターフックの中で行われている処理に問題があるところまでは分かりましたので、あとはvar_dump()などでデバッグしながら対応すれば完了です。

    対応方法が分からない…?
    そんな時は是非giscoにお問合せください!(二度目)

    (さらに…)