このエントリはMagento Advent Calendar 2018の5日目です。

今回はMagento2.3で標準搭載されるようになった、reCAPTCHAと二要素認証について解説したいと思います。

そもそもreCAPTCHAと二要素認証とは?

reCAPTCHAと二要素認証と言われてもピンと来ない方も多いと思いますので、最初に解説しておきましょう。

割と前からあるCAPTCHA

Magento1の時代から、MagentoにはCAPTCHA機能が搭載されてきました。
CAPTCHAというのは、ログインのIDとパスワードの認証に何回か失敗すると表示される、ぐにゃっとした読みにくい文字の内容を答えさせられる仕組みです。

文字がぐにゃっと読みにくいため、ひと昔前の画像認識技術では文字を正しく認識できなかったこともあり、人間とプログラムを判別するために利用されてきました。
現在ほど画像認識技術が高度化していなかった時代のアイデアと言えるでしょう。

最近では画像認識技術が進歩したこともあり、CAPTCHAが破られるケースが報告されるようになり、CAPTCHAそのものが単なる画像の上の文字を読み取らせて入力させるものから、JavaScriptなどを使用したより高度なものに進化しています。

GoogleのreCAPTCHA

  reCAPTCHA

Googleは以前からCAPTCHAサービスを提供してきました。
Googleアカウントのログインパスワードを忘れてしまい、CAPTCHAが表示されたことがある方も多いのではないでしょうか。

最近では「Invisible reCAPTCHA」という、人間とプログラムを自動判定する仕組みが導入されており、文字の入力どころか、以前はreCAPTCHAに存在したチェックボックスすら省略されています。

二要素認証とは?

二要素認証というのは、IDとパスワード以外の要素を用いてログインや本人確認を行う仕組みです。

GitHubやGoogleではすでにこのような仕組みが導入されており、典型例としてはスマートフォンなどに認証用の数字をSMSで送信し、それを入力させるというものがあります。

要は「IDとパスワード」という1要素に加えて、

  • 本人しかもっていないもの
  • 本人しか知りえないもの    
  • 本人自身の特性

のどれかを用いて認証を行うものです。

IDとパスワードの組み合わせは推測が可能であるだけでなく、総当たりによる強引な突破も可能であることから様々なサービスで二要素認証の導入が進んでいます。

Magento2.3で導入されたreCAPTCHAと二要素認証の概要

さて、Magento2.3ではreCAPTCHAと二要素認証が標準搭載されるようになりました。これはどういうメリットをもたらすのでしょうか?
大きく分けて以下の2つのメリットが得られると考えられます。

  • 管理者ログインに対するセキュリティ
  • 会員ログインなどに対するセキュリティ

管理者ログインに対するセキュリティ

もともとMagentoには管理画面のURLを

  • ドメインレベルで公開画面とは別にする
  • 標準の「admin」ではない別のパスに変える

という機能があります。Webサーバーの設定で管理画面に対してアクセス制限を掛ける方法は他のWebアプリケーションでもよく行われる方法ではないかと思いますが、Magentoの場合は管理画面のドメイン名まで別にすることができます。
(大規模サイトの場合は管理画面のサーバー自体が別になっていることがあります)

Magento2になって、インストール時に管理画面のパスに乱数を付加して推測しにくい仕組みが追加されてはいますが、管理者アカウント自体に対するセキュリティは従来と変わらないままでした。
Magento2.3では、管理者アカウントに対してreCAPTCHAと二要素認証が利用できるようになっています。

パスワード間違い時の本人確認としてのreCAPTCHA

以前からあるCAPTCHA機能を置き換える形で、管理者アカウントに対するパスワードを規定回数間違えた際の本人確認としてreCAPTCHAが利用できます。

管理者アカウントの本人確認としての二要素認証

二要素認証機能を有効にすると、初回はQRコードが表示されます。

  二要素認証のQRコード

このQRコードをスマートフォンなどで読み取り、「Google認証システム」アプリで開くと認証コードが発行されます。
スマートフォンの画面上に表示された認証コードを入力すると、ログインできるようになります。
2回目以降はGoogle認証システムアプリに表示された認証コードを入力します。
認証コードは一定時間立つと変わってしまうので、すばやく入力する必要があります。

認証コードの入力

なお、認証コード入力は端末を信頼するものとして扱わない限り、毎回入力を求められます。
もし入力が煩わしいようであれば、認証コード入力の下にあるチェックボックスにチェックをつけることで、端末を信頼するものとして扱い、以後の認証コード入力を省略できます。

ただし、信頼した端末は絶対に紛失したり、他の人に触らせたりしないように気をつけましょう。

会員ログインなどに対するセキュリティ

会員ログインなどの公開画面に対しては、reCAPTCHAのみが利用可能です。機能的は管理者アカウント向けと全く同じです。
所定回数以上パスワードを間違えるとログイン画面にreCAPTCHAが表示されるほか、後述する箇所では最初から表示されます。

reCAPTCHAと二要素認証の設定

reCAPTCHAと二要素認証の設定は、Magentoの管理画面から行います。
「店舗」メニューの中にある、「設定」を選択し、システム設定画面を開きます。

左タブに「セキュリティ」という項目があるので、ここをクリックします。
2FA(二要素認証のことです)とGoogle reCAPTCHAの2つのサブメニューがでてきます。 

二要素認証の設定

  二要素認証の設定

Magento2.3の二要素認証は4つのサービスが利用できます。
さきほどご紹介した画面イメージはGoogle AuthenticatorつまりGoogle認証システムの例ですが、他に3つのサービスが利用できます。
好みに合わせて有効無効を切り替えていただければと思います。

管理者アカウントごとに有効化

二要素認証を有効にしたら、管理者アカウントの設定で二要素認証を有効にします。

管理者アカウントでの二要素認証有効化

あとは該当のアカウントでログインし直すと、二要素認証による確認を求められるようになります。

reCAPTCHAの設定

reCAPTCHAを利用する場合、GoogleからAPIキーを取得する必要があります。
まず、reCAPTCHAのサイトにアクセスします。

次に利用したいreCAPTCHAのサービスを選びます。Magento2.3ではチェックボックスのあるreCAPTCHA v2とチェックボックスのばいreCAPTCHA v2のInvisibleが利用できます。好みに合わせて選択してください。
あとはreCAPTCHA設定の名称を入力し、規約や通知の可否を選択します。

reCAPTCHAの登録 

登録が完了すると、APIキーが発行されるので、この値をコピーしてMagentoの管理画面にセットします。

reCAPTCHA APIキー

あとはMagento側でテーマやサイズの設定を必要に応じて行います。

公開画面の場合は、以下の4箇所でreCAPTCHAをオン・オフできます。

  • ログイン
  • パスワード再設定
  • お問い合わせ
  • 会員登録

最近ではMagentoを狙った会員登録スパムが横行しているので、Invisible reCAPTCHAを有効にすると効果があるかもしれません。

まとめ

Magento2.3ではreCAPTCHAと二要素認証が利用できるようになりました。
reCAPTCHAの場合だけAPIキーの取得が必要ではありますが、難しい実装は必要なく、ブラウザからの設定だけで全て完了します。

特に管理者向けのセキュリティを向上したい場合には、二要素認証は有効ではないでしょうか。
上手に利用して安全にサイト運営を行うようにしましょう。