reCAPTCHA v3をWordpressサイトに導入

イメージ
reCAPTCHA v3とは
reCAPTCHAは不正なアクセスをするbotプログラムなどからサイトを防御するために利用されている仕掛けです。
v2などでは、この機能を利用して、画像認識に役立てていました。

v3になって、人間の反応など不要で、AIを利用してサイトの悪用を防止するシステムに変わりました。
PCで閲覧した場合、右下に下のような画像が表示されるようになりました。


しかも、v2まではフォームやログイン画面などへのアクセスだけに設置して防いでいたのですが、全てのページに対して設置できるようです。

reCAPTCHA v3をWordpressのサイトに導入 今回、Wordpressのプラグインを利用して、reCAPTCHA v3をWordpressサイトに導入しました。
手順は超簡単 まず、下記のページからサイトを登録して、キーを取得します。 https://www.google.com/recaptcha/admin/create
適当にラベルを入力して、v3を選択。
ドメインを入力して、利用条件に同意した後に送信ボタンでキーは取得できます。

Wordpressのプラグインは https://ja.wordpress.org/plugins/advanced-nocaptcha-recaptcha/
これを利用しました。

導入して、v3を選んで、上で取得したキーを入力するだけです。

どこで検証するか?という部分に関しては
こんな感じでチェックを入れました。

他はデフォルトのままです。

簡単でした。

導入後は管理画面で状況閲覧が可能です。
問題点 tokenを発行して処理されているんですが、5分程度の時間しか無いようです。 ということは、入力に時間がかかる場合はtimeoutの危険が増します。
管理画面上で、有効時間を延ばす術は無い模様。

Dropbox API を利用してPHPでVPSサーバーのバックアップ手順

VPSのバックアップをどこにとるか?


 VPSサーバーには提供者側からバックアップの仕掛けが用意されていません。そう考えると、バックアップをどこかに取得する必要があります。
 以前は、違うブランドのVPSサーバーを借りて、そことrsyncさせる方法をとっていました。

 ただ、この方法だと弊社のサーバー管理方法では、一括バックアップを取得しようとするとrootアカウントでやり取りすることになってしまい、気持ち悪さを感じていました。

 今回、このブログで初めてコード埋込を実施しました。下記URLを参考にコード埋込をできるようにしました。
https://qiita.com/piro_erdes/items/f133e170a8cf6c10b449

Dropbox API 活用

 Dropbox APIを利用することでVPSサーバー内のプログラムを使って、Dropboxへ転送してます。

 弊社の場合、Dropbox Business Advancedを利用していますので、容量無制限でアップで利用できます。
 Dropboxを利用することで、世代管理も自動でやってくれます。
 また、APIコール数も月間で100万まで大丈夫のようです。

CURLを活用

 基本はCURLの機能で実現していますので、タイトルにPHPと入れていますが、基本的には特別なSDKなどは不要で、応用すれば他の言語でも可能だと思います。

Dropbox APIのAPP作成

手順1

まず、Dropbox APIを利用するためには
へアクセスして、右上にある「App console」ボタンを押します。
ログインしてない場合はログインを促されます。

手順2

Create app のボタンを押します。
すると、下記の様な画面が出てきます。
Businessアカウントなので、右にDropbox Business APIの選択肢も出てきますが、Business APIは「管理機能」での利用なので、今回は左側の普通のDropbox APIを選択します。

手順3

続いて、下記の選択をしますが、今回はバックアップというかuploadの機能だけですので、App folderだけで大丈夫と思います。

手順4

Name your appに名前を入れます。
なんか、他で利用されている名前は利用できないみたいですので、ユニークになるような名前を入れてください。
ここで入力された名前がDropbox内のアプリの下にできます。
最後に、I agree to・・・のチェックボックスに印を入れて「Create app」です。

手順5

ここまで完了するとAppの詳細画面が表示されます。
Setting内のOAuhth2にある「Generated access token」のところにあるGenerateボタンを押すとトークンが生成されますので、コピーしてメモってください。
これが、コード内のAPI KEYにあたります。

ここまでが、Dropbox側の準備です。

VPSサーバー側の準備

 弊社管理のVPSの場合、VPSサーバーに複数のVirtualHostを設定して、Linuxのユーザー単位で管理し、コンテンツはユーザーのホームディレクトリ内に置いて管理するように設定しています。
 ただ、それぞれのホームディレクトリに対してはRead権限はOtherに与えていますので、誰でも読むことはできます。
 ですので、Dropboxバックアップ用ユーザーを設定して、そのユーザーがバックアップを実施するように設定しました。
そうすることで、バックアップ用cronの設定も一括管理できます。

DropboxへアップロードするためのPHPソース

 $api_url = 'https://content.dropboxapi.com/2/files/upload'; //dropbox api url
 $token = '{API KEY}'; // oauth token
 
 $filename = $argv[1];
 $filerev = filemtime($filename);
 $headers = array('Authorization: Bearer '. $token,
  'Content-Type: application/octet-stream',
  'Dropbox-API-Arg: '.
  json_encode(
   array(
    "path"=> '/{Directory}/'. substr($filename,{ファイルまでの文字数}),
    "mode" => "overwrite",
    "autorename" => true,
    "mute" => false
   )
  )
 );
 
 $cu = curl_init($api_url);
 
 curl_setopt($cu, CURLOPT_HTTPHEADER, $headers);
 curl_setopt($cu, CURLOPT_POST, true);
 
 $path = $filename;
 $fp = fopen($path, 'rb');
 $filesize = filesize($path);
 
 curl_setopt($cu, CURLOPT_POSTFIELDS, fread($fp, $filesize));
 curl_setopt($cu, CURLOPT_RETURNTRANSFER, true);
 
 $response = curl_exec($cu);
 $http_code = curl_getinfo($cu, CURLINFO_HTTP_CODE);
 echo($response."\n");
 echo($http_code."\n");
 
 curl_close($cu);

こんな感じのソースになっています。1ファイルずつ処理するプログラムです。
コマンドラインでPHPを動かします。
最初はtarで圧縮して、転送させようかとも考えたのですが、ファイルサイズが大きくなる上に毎日すごい転送量になるので、1ファイルずつ処理するというやり方にしました。

コマンドラインは
> find /home/{hoge}/www/ -type f  | xargs -n 1 php backup.php

こんな感じで、まず一括バックアップを取得。

一度、全部バックアップを取得した後は
> find /home/{hoge}/www/ -type f -mtime -1 | xargs -n 1 php backup.php
として、前日に変更があったファイルだけを抽出しています。

上記をcronに記述して、夜間に動かすことでバックアップの取得を実施してます。

このPHPプログラムを利用して、同様にDBのダンプもバックアップしています。

今後の予定

今後は、このやり方でyumのログと/etc以下もバックアップしておきたいと考えてます。

コメント

このブログの人気の投稿

UTM(統合脅威管理)って邪魔で不要

巡回頻度を上げるぞ

富山大学感染予防医学講座