【WordPress】このサイトで重大なエラーが発生しました。への対処方法(リカバリーモード)

まとめ

プラグインが自動更新された後、「このサイトで重大なエラーが発生しました」と表示され、すべてのページにアクセスできなくなる問題が発生した。
管理者にリカバリーモードでログインできるページのURLが来たので、そちらからサイトにアクセスし、該当プラグインを無効化することで、ページが表示されるようになった。

 

問題が発生したことの認識

「サイトで技術的な問題が発生しています」というメールが届いた。
初めて見るメールだったので、サイトにアクセスしてみると、「重大なエラーが発生しました」という、同じく初めて見るメッセージのみになってしまっていた。

どのページも上記と同じになってしまい、ログインページにもアクセスできなくなった。

メールの受信順から、プラグインが更新されたことにより問題が発生してしてしまったのだろうということまでは分かった。

リカバリーモードでログイン

「サイトで技術的な問題が発生しています」というメールの本文を確認してみた。

こんにちは。

WordPress 5.2から、サイトでプラグインやテーマが致命的なエラーを発生させた場合にそれを検知してこの自動メールでお知らせする機能が追加されました。

今回の場合、WordPress がプラグイン SiteGuard WP Plugin でエラーを捉えました。

まずはじめに、ご自分のサイト (https://juraku-software.net/) を開き、目に見える問題がないか確認してください。次に、エラーが発生したページ (https://juraku-software.net/xxxxxxxx) を開き、同様に問題がないか確認してください。

この問題をさらに調査するにはサーバーホストに連絡してみてください。

もしサイトが壊れていてダッシュボードに正常に接続できない場合、WordPress には特別な「リカバリーモード」があります。これによりダッシュボードに安全にログインし、さらに調査をすることができます。

https://juraku-software.net/wp-login.php?action=enter_recovery_mode&rm_token=xxxxxxxxxx&rm_key=xxxxxxxxxx

サイトを安全に保つため、このリンクは 1日 で有効期限が切れます。ですが、心配なく。有効期限後にこのエラーが再度発生すれば新しいリンクをお送りします。

この問題を解決しようとする際、以下の情報を聞かれるかもしれません。
WordPress バーション5.7.1
現在のテーマ: Twenty Fifteen Child (バージョン 1.0.0)
現在のプラグイン: SiteGuard WP Plugin (バージョン 1.6.0)
PHP バージョン7.4.12



エラー詳細
===============
エラータイプ E_COMPILE_ERROR が /home/xxxxxxx/wp-content/plugins/siteguard/siteguard.php ファイルの 60 行目で発生しました。 エラーメッセージ: require_once(): Failed opening required 'classes/siteguard-disable-author-query.php' (include_path='.:/usr/local/php/7.4/lib/php')

本文のリカバリーモードのリンクをクリックすると、ダッシュボードが表示された。

ここで直近で更新されたプラグインを無効化することで、無事復旧できた。

直接の原因

SiteGuard WP Pluginのバージョンアップの不備のようだ。
現在は解消され、このサイトも以下の画像に書いてある通りの対処を行い、再びSiteGuardを利用している(設定がすべて消えてしまったが…)。

今後の対策

難しい…

プラグインは常に自動更新にしておきたいので、こまめにメールチェックをするしかないかな。

あとは、問題が発生したときにダッシュボードにも行けなくなることが分かったので、FTPでアクセスできることを定期的に確認しておくくらいかな(普段は使わないので)。

【WordPress】Google Analytics Dashboard for WPからSite Kitへの移行

以前から「Google Analytics Dashboard for WP」プラグインを利用していたのですが、あるときから大半の機能が有料化し、さらに謎の通知が多くなったため使いにくくなってしまいました。

Googleが提供している「Site Kit」というプラグインを使うと、Google AnalyticsとAdSense、PageSpeed Insightsをまとめて表示することができるのでおすすめです。

移行したときの手順ですが、先にSite Kitをインストールして、ウィザードに従って設定。その後、Google Analytics Dashboard for WPを無効化するだけで簡単です。(しばらく使って問題がなければ完全にアンインストールします)

▼ページごとにアクセス数が表示されるようになります

 

【C#】【EntityFramework】「列 ‘InvariantName’ は一意であるように制約されています。」エラーが発生する

エラー内容

System.Configuration.ConfigurationErrorsException: system.data のための構成セクション ハンドラーを作成中にエラーが発生しました。: 列 ‘InvariantName’ は一意であるように制約されています。値 ‘System.Data.SQLite.EF6’ は既に存在します。 (C:\xxxxxxxx\xxxxxxxxxx.exe.Config line 11) —> System.Data.ConstraintException: 列 ‘InvariantName’ は一意であるように制約されています。値 ‘System.Data.SQLite.EF6’ は既に存在します。

原因

App.configの<system.data>にinvariant=”System.Data.SQLite.EF6″が複数記載されている場合に発生

【C#】DataRowの各項目をまとめてConsole出力する

foreach (DataRow dataRow in dataTable.Rows)
{
Console.WriteLine(
string.Join(",",
Array.ConvertAll(dataRow.ItemArray, x => x.ToString()))
);
}
  1. DataRowのItemArrayがobject[]型で返ってくるためArray.ConvertAll()でstring[]型に変換する。
  2. string.Join()で、string[]型の値を「,」区切りで文字列結合する

【C#】【Selenium】session not created~エラーが発生する

エラーメッセージ

System.InvalidOperationException: ‘session not created: This version of ChromeDriver only supports Chrome version 85 (SessionNotCreated)’

「new ChromeDriver()」を実行すると発生した

対処方法

NuGetで、Selenium.WebDriver.ChromeDriverを最新版(インストールされているChromeと同じバージョン)に上げる。

上げた後、ソリューションのクリーンを実行した後に、ビルドすればOK

 

【Androidアプリ】電光ニュース(LED News)


Ver 1.0.8(2021/04/29公開)

YahooやNHKの最新ニュースを電光掲示板風に表示します。
机の横においてぼーっと眺めるのに最適です。
ダブルタップすれば、そのニュースがお使いのブラウザで表示されます。

タップすると設定画面が表示され、表示速度と文字色を変更できます。

ダウンロードはこちらからどうぞ。
Google Play で手に入れよう

 

 

 

Windowsアプリ版はこちらから

 

更新履歴(GooglePlayへの反映は数日遅れます)

  • Ver 1.0.8  2021/04/29
    文字色で黄色を選択できるようになりました(緑、オレンジ、黄の3種類)
  • Ver 1.0.7  2021/04/28
    文字サイズの設定追加(大、中、小の3種類)
  • Ver 1.0.6  2021/04/24
    アプリのアイコンデザインを変更しました(電光ニュースのみから、英語版のアプリタイトルであるLED NEWS+電光ニュースの併記に変更)
  • Ver 1.0.5  2021/02/23
    設定画面を追加しました。タップすると速度と文字色を変更できます。
  • Ver 1.0.4  2021/02/05
    タップして変えた色を、次回起動時に復元する機能を追加しました。
  • Ver 1.0.3  2021/01/28
    タップするとオレンジ色、緑色に順番に変わる機能を追加しました。
  • Ver 1.0.2  2021/01/28
    アメリカ対応(The New York TimesのU.S.版を表示)
    イギリス対応(BBCを表示)
    中国(簡体字)対応(人民网を表示)
    ※Androidの地域と言語の設定にて自動で切り換えます。
  • Ver 1.0.1  2021/01/27
    英語対応(英語版のアプリタイトルはLED News)
    英語の場合は、The New York TimesのWorld版を表示します。
  • Ver 1.0.0  2021/01/18
    ダブルタップすると、ニュース内容がブラウザで表示される機能を追加しました。
    普段お使いのブラウザで表示されます。
  • Ver 0.0.1  2021/01/11
    新規公開を開始しました。

 

【Web】OpenBugBountyからメールが来たときの対応

「juraku-software.net Security Vulnerability Notification | OBB-1717685 | Important」という件名のメールが突然届きました。(このページを記載している時点で問題は解消済みです)

メール本文はこんな感じです。

どうもセキュリティの問題があったらしく、それを知らせてくれたとのこと。
詳細を知るには、担当者にメールする必要があります。
送られてきたメールのレポートURLをクリックすると「Discovered and Reported by:」という項目のリンクをクリックすると担当者のメールアドレスが分かるので、英語で質問する(レポートURLと、Please bug descriptionみたいな英語だけ書けば大丈夫でした)。

対応しないまま放置すると、問題内容が公開されてしまうようなので早めに対応した方がよさそうです。

対応完了後、寄付を求められたのでせっかく調べてくれたので寄付しました(今回の問題はphpinfo.phpを残したままだったと何ともお粗末な内容でした・・・)

ちゃんと対応すればセキュリティの問題も解消され、外国の方ともメールできるいい機会なのでこのメールが来たら対応した方がよいでしょう。メールの返信も30分以内には返ってきました。

【C#】列挙体で複数の値を選択する

動作確認

Visual Studio 2017 C#

列挙体の定義

[Flags]
private enum EnumSample
{
    //項目が混じらないように、それぞれ立てるビットの位置を変える
    a = 0b0001,     //「0b」から始めると2進数で書ける
    b = 0b0010,
    c = 0b0100,
    d = 0b1000
}

使い方

//aとcを選択する
var sample = EnumSample.a | EnumSample.c;

//選択されているかはHasFlagを利用して確認する
if (sample.HasFlag(EnumSample.a))
{
    //こっちに来る
    Console.WriteLine("aは存在");
}
else
{
    //こっちには来ない
    Console.WriteLine("aは未存在");
}

//どの項目が選択されているかを確認したい場合は、列挙体の全項目を回してチェックできる
foreach (EnumSample enumValue in Enum.GetValues(typeof(EnumSample)))
{
    Console.WriteLine($"{enumValue} = " + sample.HasFlag(enumValue));
    /*
     * 実行結果
     * a = True
     * b = False
     * c = True
     * d = False
     */
}

【C#】コンソール出力の文字色を変更する

C#のコンソールアプリにて、表示する文字色を変更するにはForegroundColorを変更する。

Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("*****黄*****");

Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("*****緑*****");

Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("*****赤*****");

Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine("****元の色****");

元の色はGray。 多用すると逆に見にくいので、エラー発生時などの出力の際には黄色を使うとよいかも。

【Visual Studio2017】コマンドラインからビルドすると「80131577」エラーが発生する

現象

devenv.exeをコマンドラインから実行し、ソースをビルドすると、
ERROR: An error occurred while validating. HRESULT = ‘80131577’
が発生してビルドに失敗する。

環境

Visual Studio 2017 Community

対処方法

必要なNuGetパッケージが存在していないのが原因。Visual Studioを起動し、NuGet パッケージの復元を行えばOK