学び

WordPressで勝手にリダイレクトするScriptコードに感染。

WordPress リダイレクト

追記2018/09/27

前回記事を書いた後も色々調べてみると、取りきれていないScriptコードがあったりとわかって来ました。前回の記事を残しつつも、なるべくわかりやすく再編集します。

—————-

もう、最悪でした。勝手に海外のサイトに飛ばされる症状が出るので、同じサーバで管理している他のサイトも調べてみたら案の定やられてました。症状としては、障害が出ているサイトのリンクに行くと、他のサイトにリダイレクトされ、3つか4つのリダイレクトが連続した後に広告のあるサイトにたどり着きます。

不思議なことに、感染しているファイルが違ったり、症状が一定ではないのもあり、探すのに苦労しました。ダッシュボードから確認できる異常は下記の通りです。

・投稿ページの投稿の最後にScriptコードが挿入されている。
・固定ページの最後にScriptコードが挿入されている。
・メディアの説明などのどこかにScriptコードが挿入されている。

投稿、固定ページはこんな感じのコードが最後に挿入される。

これで、「cdn.examhome.net」と言うサイトにリダイレクトされることになってしまう。

メディアの「説明」部分は見つけにくいです。こんな感じ。↓

問題はこれだけではなかったので、Search Regexによる投稿ページなどの文字列の消去だけでは対応できません。

サーバ内の<head>〜</head>の最初と最後に下記のコードが挿入されます。

*対応とは関係ないですが、これはユニコードをデコードすると文字列になります。

まず、やるべきことは、データベースサーバ内のWordPressファイルに問題と解決を分けて考えることです。

データベース内の対応について

 

1、レンタルサーバのPHPのところからphpMyAdminにアクセスし、該当のデータベースを選択します。
2、wp_postsを選ぶとデータベースにどんな情報が入っているのかを確認できます。
3、下記の画像のように特定のリンクに飛ぶようなScriptの文字列が確認できます。

Wordpress 急にリダイレクト

5、これを全てこの画面から消すのは現実的ではないので、wp_postsだけをダウンロードして、Atomなどテキストエディタで全て検索して一気に消します。*新しいphpMyAdminの場合はSQL上で消去することができますが、バックアップの意味もありダウンロードファイルから修復します。

やり方は、wp_postsをダウンロードしたら、複製して感染ファイルと改善ファイルの2つに分けます。

Atomの場合は、wp_postsを下記のようにOpenで開いたら

Wordpress 急にリダイレクト

Findのメニューから、Find in Projectを選択します。

Wordpress 急にリダイレクト

すると、下記のように検索するフィールドと置換(Replace)するフィールドが画面右下に現れます。

Wordpress 急にリダイレクト

検索するフィールドに上記のように、投稿ページや固定ページ、メディアに挿入されてしまったScriptコードを消去できます。挿入されたコードをここにコピペしてFind Allし、発見されたかを確認してReplace Allすれば、全て入れ替えられます。

改善したファイルを再度上書きでアップロードすればデータベースは完了です。

*念のため、全てのファイルをダウンロードして検索をかけておくといいとも思います。このファイルだけでも、<script>のみ検索して他にコードが埋め込まれていないか、色々調べてみてください。

もし、wp_posts以外にも不審な書き込みが見つかったら、この記事に書き込みをお願いします。また、一点注意ですが、phpMyAdminのアップロードに容量制限がかかっている場合、重たいファイルだと「ダウンロードして直してアップロード」ができません。容量を確認してからこの作業を行なってください。

サーバ内のWordPressファイルについて

1、まず、下記のファイルか、拡張子の無い怪しいファイルはないかルートフォルダを探してください。もし、あればすぐにローカルにコピーしてサーバにあるものは消去してください。
*ローカルにコピーするのは、この中の文字列をあとで検索にかけて消去するためです。

中身はこんな感じで、重要なファイルのヘッダー(<head></head>で囲まれた最初と最後の2箇所)にユニコードの文字列を埋め込んで来ます。不具合のあるサイトの中でも、これがあるものとないものがあります。

Wordpress 急にリダイレクト*クリックで拡大します。

2、次に同じ階層の下記の2つのファイルを確認してください。

・wp-config.php
・wp-login.php

wp-config.phpの中身をみると、以下の部分は、’put your unique phrase here’が明らかにおかしいコードに書き換えられています。*これは正常なもの。

「wp-login.php」内には、中にscriptが挿入されて

から始まる数列がびっしり追加されていました。他にもいろんなフォルダ内のファイルにおかしな文字列が追加されていました。

もし、上記のような文字列がある場合は、他の階層のファイルにも書き込まれている場合が考えられるので、FTPソフトで一旦全てダウンロードして、データベースの修復と同じように対応します。

3、WordPressファイル内の修復

ルートフォルダに入っているファイルとフォルダを全てダウンロードして、一つのフォルダにまとめます。これを複製して感染バージョンと改善バージョンに分けます。

改善バージョンをこれまでと同じく、Atomで修復します。1ファイルではなく、フォルダを一気に選択したいので、Atomのメニューから下記を選択します。そのまま、改善バージョンのフォルダごと選択します。

そうすると、指定フォルダないのファイルをすべて検索できます。Find Allのフィールドに、<head></head>内にある不具合を起こしているコードをFind Allで検索して見つかれば、そのうちの一つの詳細を調べます。その中の<script>〜</script>までをコピーして、Find Allの中に改めてペーストしReplace Allで消去していきます。

Wordpress 急にリダイレクト

また、同じように文字列の一部をFind Allで検索して、検索に引っかかったものの詳細を表示して、<script>〜</script>の部分を消去していきます。

なぜ、このようにするかというと、

(118, 97, 114, 32, 115, 111, 109, 101, 115, 116, 114, 105, 110, 103, 32, 61, 32, 100, 111, 99, 117, 109, 101, 110, 116, 46, 99,

から始まる文字列にいくつかパターンがあり、一回のReplaceでは消去しきれないためという理由と、

eval(String...

から始まる文字列もあり、何回かにわけて確実に不審なコードを消すためです。

4、改善バージョンの入れ替え

このように、改善バージョンが出来上がったら、その中でローカル上で更新できるフォルダを最新のものに入れ替えます。例として下記のようなものです。

・プラグイン
・テーマ

これらは元のフォルダを一度消去してから新しい最新のフォルダを入れ替えます。

これで、改善バージョンのサイトが一つのフォルダにまとまりました。FTPソフトでサーバにアップロードして、一旦修復は完了です。

今後の対応として

この次に、今後の対応として、

・サーバへのアクセスを国内のみに限定する(レンタルサーバのコントロールパネルから設定)
・Wordfenceプラグインの導入(エラー原因を特定して知らせてくれる)
・miniOrange 2-Factorプラグインの導入(2段階認証の導入)

まずは、アクセスを国内に限定すれば大抵の攻撃は収まるでしょう。ただ、国外からのアクセスが必要な場合も多々あるので、その場合は、WP-Banのような特定の国からのアクセスを防げるプラグインの導入を考えるか、他の特定のIPアドレスからのアクセスを防ぐ手段を講じる必要があります。

Wordfenceは、データベースとサーバ内の対策をする前に導入すると、プラグインごと感染するので綺麗にしてから入れましょう。

https://ja.wordpress.org/plugins/wordfence/出典:https://ja.wordpress.org/plugins/wordfence/

綺麗になるまで、Scanを繰り返し怪しいファイルを見つけましょう。無料機能で検知できます。

miniOrange 2-Factorは、スマホのアプリと連携して、いつものパスワードの他に、ログインパスワードを生成できるようになるため、ブラウザを介したログインをより強固にできます。

————————————–

調べてみると、まだほとんど情報がなく、ホスティングサービスのサポートに連絡しても、そもそも「外部からの攻撃への対応は全部消して、データベースも綺麗にしてから再構築してください。」とのこと。

最終手段を最初に言うのね。。。

 

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Tensorboardが動かない。(動かすには)

Tensorboard 動かない

Tensorboardがうまく表示されなかったり、そもそもどのタイミングで表示されるのかよくわからないこともあると思います。
そんな時のメモです。

まず、タイミングはTensorFlowを使った学習を行なった後になります。
学習時に

か、その他の方法で、学習用のファイルが置かれているフォルダ(ディレクトリ)を指定していると思います。

TensorFlowで学習(トレーニング)するときは、

などで、学習を行い、その際にファイルを書き出すと思います。
それを、学習後に下記で指定してTensorboardを起動します。

[データの入っているディレクトリ]は、

で指定したディレクトリから数えてどこにあるかの相対的な位置になります。前後に/(スラッシュ)は不要です。

次に、ターミナル上に、下記の表示が出ます。

これをそのままブラウザに貼り付けるのではなく、↓こっちを貼り付けることでTensorboardによるグラフィカルな表示を確認できます。


こんな風な表示も見ることができます。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

【エラー】NameError: name ‘xrange’ is not defined

NameError: name 'xrange' is not defined

Pythonのバージョン違いのエラーのようです。

Python3からは、

のような、xrange関数が廃止されrangeになったため、古いプログラムを現在のPythonのバージョンで動かすとこのようなエラーが出るようです。

1、プログラム中のxrange関数を全てrangeに入れ替える、
2、Python3環境をPython2環境にして実行する。

のどちらかでエラーが解決します。

1の場合は、
プログラム中の関数の中の、

を、エディタ上でコマンド+fで検索し、全て

にリプレイスすれば良いです。

2の場合は、
今のPython3環境のパッケージのバージョンを色々変えるのは大変なので、
新しい環境を作ったほうが早いでしょう。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

ターミナルの背景と文字色の変え方。

ターミナル 環境設定 プロファイル

ターミナルを開くと白背景がデフォルトで、目が疲れるし変えたいなと思ったことはないでしょうか。

ターミナルの背景や文字色は、
1、ターミナル→環境設定→インスペクタから変える
2、シェル→インスペクタを表示→インスペクタから選択

の2通りの変え方があります。どちらも簡単ですが、1の方法は、次に開いたときも設定が変わりません。2の方法は、次に開いたときは設定が戻ります。

それでは、解説します。

1、ターミナル→環境設定→インスペクタから変える

まずメニューバーのターミナルから環境設定を選択します。
ターミナル環境設定

次に、プロファイルを開き、好きな設定を選び、左下のデフォルトを選択すると、次に開くときも同じ設定でひらけます。自分で自由に色を変えることもできます。
ターミナル 環境設定 プロファイル

2、シェル→インスペクタを表示→インスペクタから選択

こちらは、メニューバーのシェルからインスペクタを表示を選択します。
ターミナル インスペクタ

次に、プロファイルから好きな設定を選ぶだけです。すぐに反映されますが、次回ファイルを開いたときは、この選択は引き継がれません。

ターミナル インスペクタ

以上、ターミナルの背景と文字色の変え方でした。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

【エラー】TypeError: (‘Keyword argument not understood:’, ‘data_format’)

TypeError: ('Keyword argument not understood:', 'data_format')

以前作成した画像分類機を起動したところ下記のエラーが出てしまった。

この対処法を探してみると、
stackoverflowのサイトに同じエラーの投稿があった。
https://stackoverflow.com/questions/50830736/typeerror-keyword-argument-not-understood-data-format

Kerasのバージョン不一致によるエラーとのこと。解決策として、作成済みファイルを作った時のKerasと、このファイルを実行しようとしている時のKerasのバージョンを合わせることでエラーが解決するらしい。

リンク先のサイトでは、

こちらの実行で、Kerasを最新版にアップグレードすることで解決するとのこと。
で、私の環境では、以前の実行しようとしているファイルを作成した時のKerasのバージョンが調べられず、作った日時はわかっていたので、その時の最新のKerasのバージョンを予測して、Kerasをインストールしなおしたがエラーは変わらず。

一応、Kerasのバージョンを遡って実行した方法を書きます。

Kerasのバージョン確認

Kerasをアンインストール

Kerasのバージョン指定してインストール

で、拒否される場合は、

と、

をつけて実行する。

他のライブラリのバージョン確認やインストールについては、
Python、TensorFlow周辺の環境設定まとめを参照。

結局、Pythonの環境を現在の最新のバージョンで作り直し、KerasやTensorflowなどをインストールして、以前のKerasを用いて作ったファイルを作り直した。その後、同じ実行環境で、画像分類機を実行したところ成功した。

このような、バージョン管理については、成功した環境を、

これで書き出したあとに、.txtファイルに保存しておき、再現したいときに

これを実行して一括インストールすることでうまくいくと思う。
このrequirements.txtの書き方は、

このように羅列する。

他にも似たようなエラーの投稿を見つけた。
こっちは、末尾の文字列が、data formatではなく、nb depthになっている。
https://stackoverflow.com/questions/44135232/keras-typeerror-keyword-argument-not-understood-nb-depth

この場合は、カーネルサイズを指定する必要があるとのこと。

「フィルタの数の直後にカーネルサイズを指定する必要があります。たとえば、次のようになります。」

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Python、TensorFlow周辺の環境設定まとめ

tensorflow

Environmentを有効化

例、$ source activate tf140

Pythonのバージョン確認

TensorFlowのバージョン確認

Kerasのバージョン確認

Kerasのバージョン指定してインストール

で、拒否される場合は、

と、

をつけて実行する。

最新版のKerasをインストール

Kerasをアンインストール

現在どの環境で作業しているか調べる

現在のpipバージョンを調べる

現在のPythonのバージョンを調べる

現在のパッケージのバージョンを調べる

パッケージのインストール

*バージョン指定したいときは、パッケージの名前の後に==バージョン

例、

パッケージのアンイントール

pipで一括インストール

*requirements.txtの書き方。
numpy==1.11.0
six==1.10.0
(成功したテスト時のバージョンを記録しておくと再現性が高まる。上記のパッケージのバージョンを調べる

で書き出して残しておけばOK)

ディレクトリの指定

ディレクトリの中身の確認

Tensorflowのインストール

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Flaskで OSError: [Errno 48] Address already in use が表示された時の対処法。

The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

Flaskで

を実行したら、下記のようなエラーが出てしまいました。

 

解決策は、該当のprocessIDをオフにすれば良いらしいです。
まず、processIDを下記のコマンドで調べます。

*5000の部分は、http://127.0.0.1:5000/の5000を開きたい場合は、5000を記述します。他の数列の場合は、それに置き換えてコマンドを実行してください。

このコマンドを入力すると、

OSError: [Errno 48] Address already in use

このように、processIDを調べることができます。調べた数列を、下記のコマンドのprocessIDの部分と置き換えて入力するとオフにすることができます。

例、

 

killコマンドがちょっと怖いですが、思い切ってやってみたら解決しました。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Deep Learning(深層学習)で画像分類機を作成 その3

前回の「Deep Learning(深層学習)で画像分類機を作成 その3」でAnacondaを準備し、EnvironmentsにTensorFlowをインストールしました。

PythonやAnacondaをすでにインストールしている場合は、余程メモをつけたり記憶力がよくないと、色々やっているうちにどの環境に何をインストールしたかわからなくなることもあります。

そんなときは、ターミナルから

を打ってみましょう。Anacondaの他にも過去に設定したことのあるディストリビューションも一覧できます。
ここで現在の環境は、環境名とディレクトリの間に「*」が表示されています。

 

で、この表示の中から、前回使用した環境を選んでアクティベートします。

xxxは前回の「tf140」を選択したい場合は、

とコマンド入力を行えば、その環境に切り替わります。

*Windowsの場合は、

と、

は不要です。

 

また、AnacondaやPythonのバージョンをアップデートしたい場合は、

など、それぞれ必要に応じて行います。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Deep Learning(深層学習)で画像分類機を作成 その2

Anaconda

今回は、AnacondaでTensorFlowを開発するための環境設定を行います。

Anacondaのインストールが完了して開くと、Anaconda Navigatorのホーム画面が表示されます。

Anaconda Environments

次に、Environmentsを開き、環境を設定します。下方にあるCreateのアイコンをクリックしてください。

Environments Create

環境を作るため、Nameにわかりやすい名前(今回はTensorFlowのバージョン1.4.0を使用するためtf140と入力します)、PackagesはPythonにチェックを入れて、バージョンを選択します。今回は、3.6にします。(*Pythonは2系と3系で互換性がないため、書籍やウェブを参考に開発を進めるときは、このバージョンが何で開発されているかに注意が必要です。)

設定が終わったら、Createをクリックすると新しいEnvironmentsが1つ追加されます。少し時間がかかるので待ちましょう。

Anaconda Environments

Environmentsが追加されたら、▶︎のアイコンをクリックします。

Open Terminal

そうすると、上記のポップアップが開くので、Open Terminalをクリックします。

 

Terminal

ターミナルが開き、最後の行を確認すると先ほどEnvironmentsの設定でNameに入力した文字列が丸括弧の中に表示されています。(tf140)

もし、pipが最新版じゃない場合は、

でアップグレードできます。ここで、TensorFlowがインストールできたかどうかを確認するため、

とコマンドを打ち、Enterを押します。
すると、Pythonの対話的な実行環境に入ることができます。

とコマンドラインが出るので

と入力します。

しばらくして、このようにコマンドラインが表示され入力待ちの状態になれば、tensorflowのインストールは完了です。

と入力して Pythonを終了し、次に

と入力しコマンドプロンプトを終了します。

以上で、開発の準備が完了です。

 

再開するときは、AnacondaのEnvironmentsから、該当のEnvironmentを開きOpen Terminalを選択し、Terminal上で

とコマンドすることで再開できます。

LINEで送る
[`evernote` not found]
LinkedIn にシェア

Deep Learning(深層学習)で画像分類機を作成 その1

https://www.anaconda.com

Deep Learningで、画像分類機を作ります。
そのために、Python、TensorFlowやKerasライブラリを用いて機械学習の方法を導入します。

まず、準備編としてAnacondaを導入します。Anacondaの導入は、anaconda.prgサイトからダウンロードして行います。MacもWindowsも他のOSのバージョンもあります。

AnacondaとはPythonのディストリビューションで、簡単に言えばPythonとその周辺の付随機能を使いやすくまとめたアプリと考えるとわかりやすいと思います。ややこしくて理解が難しい場合は、上記でPythonを用いての部分をAnacondaを用いてに替えて理解しても大丈夫です。

AI(人工知能、機械学習)を使用し開発・分析などをするにあたって、OSS(オープンソースソフトウェア)のライブラリであるTensorFlowを使用したいと行き着いたら、自然とまずはPythonを使ってみようかというのが私の場合でした。

Pythonをそのまま単独で使うと、バージョン管理やOS環境の管理に苦労してなかなか開発が進まなかったりするということが起こります。(*しょっぱなから苦労しました)

そこで、様々なライブラリやバージョンを管理しながら、Mac、LinuxやWindowsも使用できるAnacondaを利用するという選択肢が出てくるのです。

Anacondaのダウンロード、インストールはとても簡単なので、まずは自分のOSに合うAnacondaを準備してください。

次回は、画像分類をするための解説を記事にします。

 

 

LINEで送る
[`evernote` not found]
LinkedIn にシェア