カード番号を入れる前に、そのページの裏側をのぞく SafePeek

カード番号を入れる前に、そのページの裏側をのぞく SafePeek

探していた古いカメラのレンズを、検索で見つけました。

相場より三割ほど安く、在庫ありと書いてあります。写真はきれいで、アドレスバーには鍵のマークがあり、会社概要のページもあります。カートに入れて、住所を入れて、カード番号の画面まで進んだところで手が止まりました。

前にも同じような店を見た気がして検索してみると、よく似た名前の店がいくつか出てきます。どれも同じ写真を使っていて、どれも三割安い。

その日は買わずに閉じて、翌週、少し高い別の店で買いました。あの店が本物だったのかどうかは、今も分かりません。

店先が見えない

街の店なら、入る前にいろいろなものが目に入ります。建物の古さや店員の様子、レジの後ろの棚、そこに何年あるのか。人はそういう手がかりで、ここで財布を出してよいかを決めてきました。

ネットの店には、その店先がありません。見えるのは画面だけで、画面は誰でも同じように作れます。きれいな写真も丁寧な会社概要も、本物の店から写せば一晩で揃います。

鍵のマークも、かつては目印のひとつでした。今は、通信が暗号化されていることを示しているだけです。証明書は無料で取れるようになり、偽の店に付いていることも珍しくありません。

本当に知りたいことは、画面の裏側にあります。入力したカード番号がどこへ行くのか。決済を専門にする会社にまっすぐ渡るのか、店のサーバーにいったん入るのか。店のソフトウェアは手入れされているのか。

材料は、もうブラウザの中にある

画面の裏側は見えないと書きましたが、すべてが見えないわけではありません。ページを開いた時点で、ブラウザはその材料の一部を受け取っています。

たとえばカード番号の入力欄です。決済会社の多くは、入力欄を自分のサーバーから出す小さな枠として提供しています。この枠の中に打った番号は店のページからは読めず、店のページを通らずに決済会社へ送られる作りです。枠を使わず、店のページにそのまま入力欄を置いている店もあります。どちらの形なのかは、ページの作りを見れば分かります。

ほかにも、ページはいろいろなものを抱えています。読み込んでいるプログラムの名前とバージョン、安全のためにサーバーが付けている設定、どこのサービスと通信しているか。サーバーの側で何が動いているかも、URL の形やエラー表示の癖から、ある程度は推し量れます。

足りなかったのは、それを読む手段です。ブラウザの開発者向けの画面を開けば一部は見えますが、買い物の途中にそこまでする人はいません。

読み解くための知識のほうは、揃ってきました。どのプログラムがどんな痕跡を残すか、どのバージョンにすでに見つかっている弱点(脆弱性)があるかといった知識は、公開のデータベースとして共有されています。偽の通販サイトの特徴も、警察や消費生活センター、セキュリティの研究者がまとめて公開しています。

SafePeek

SafePeek は、ブラウザの中にあるこの材料をその場で読んで見せる、Chrome の拡張機能です。無料で、GitHub で公開しています。

調べたいページを開いてツールバーのアイコンを押すと、そのタブだけを読んで、結果を小さな画面に出します。分かるのは次のようなことです。

どれも、ページに残っているものからの推定です。そのかわり、指摘にはどれも根拠が付いています。どのヘッダーを見たのか、どのスクリプトを見たのかが書いてあるので、自分で確かめられます。

結果は、いちばん上に全体の判定が一行で出ます。「重大な懸念があります」「注意点があります」「大きな問題は見つかりませんでした」のどれかで、その下に一つずつの指摘が、重大・注意・軽微・情報・良好の印つきで並びます。

カード決済の欄には、たとえば「カード入力は決済会社の画面内です」と出ます。これは良好の印で、番号は決済会社の枠の中で入力する作りだということです。「カード番号をサイト自身のページで入力させています」と出たら、番号が店のサーバーを通る可能性があります。どちらの場合も、決済会社の名前がわかれば、かっこの中に出ます。

冒頭のレンズの店のようなページで開けば、カード番号を入れる前に確かめられることがあります。特定商取引法に基づく表記へのリンクはあるか、販売業者の欄が仮の値のままになっていないか、カード番号を決済会社の枠の中で入れる作りか、といったことです。偽の通販サイトの特徴は一つだけでは決め手にならないので、弱い手がかりは、いくつか重なったときにだけ示すようにしています。

SafePeek でなくてもできること

ここに挙げたことの多くは、SafePeek でなくても調べられます。

ページで使われている技術を表示する拡張機能は以前からありますし、URL を入れると安全かどうかを判定してくれる Web サービスもあります。開発者向けの画面を開けば、通信先もヘッダーも全部見えます。

違いは二つあります。

一つは、SafePeek が自分から何も外へ送らないことです。URL を判定する Web サービスに頼めば、どのページを見ているかをそのサービスに伝えることになります。拡張機能の中には、閲覧したページの情報を集めているものもあります。SafePeek は、そのどちらも起きないように作っています。

SafePeek が求める権限は、アイコンを押したタブを読むことだけで、解析はすべてブラウザの中で終わります。通信が起きるのは、ヘッダーを読むためにそのページを読み直すときと、ページが読み込み済みのスクリプトをもう一度取得するときだけです。どちらも、そのページ自身が使っているサーバーへのアクセスです。

もう一つは、問いの立て方です。技術の一覧や点数を出すのではなく、買い物の前に知りたいことに答える形にしています。カード番号はどこへ行く作りになっているか、この店に偽物の特徴はあるか、という問いです。

書いてあることと、使っていること

作っている途中で、SafePeek を紹介した自分の記事を SafePeek で開いてみたことがあります。出てきたのは、このサイトのサーバーでは Seasar2 が動いているかもしれない、という警告でした。Seasar2 は Web サイトを作るための Java の仕組みで、2016年にサポートが終わっています。サポートの終わった仕組みは、弱点が見つかっても直らないので、SafePeek は警告として出します。

その記事では、SafePeek が何を手がかりにするかの例として、Seasar2 の画面が残すコードを一行載せていました。SafePeek はそれを、ページが実際に使っている印として読んでいたのです。

ページに書いてあることと、ページが使っていることは違います。ここを取り違えると、仕組みを解説した技術記事は、どれも古いシステムで動いていることになってしまいます。Web ページは、画面に表示される文章と、ページの作りを書いた部分(タグ)でできています。そこで、この二つを Web の仕様どおりに分けて読み、仕組みの痕跡は作りの部分だけで探すように直しました。分け方が正しいかは、たくさんの例を、広く使われている別の読み取りプログラムにも読ませて、同じ結果になるかで確かめています。

同じような取り違えは、作っているあいだ何度も起きました。会員カードでログインする画面を、クレジットカードの入力画面と取り違えたこともあります。どれも実際のページで試して見つかったもので、直すたびに規則として残しています。

使い方

Chrome ウェブストアでは配布していません。GitHub から入手して、自分で Chrome に読み込みます。Edge と Brave でも、同じ手順で使えます。

  1. SafePeek の Releases から、最新版の safepeek-v1.0.0.zip をダウンロードして解凍します。解凍したフォルダは Chrome が使い続けるので、消さない場所に置いてください
  2. Chrome のアドレスバーに chrome://extensions と入力して開き、右上のデベロッパーモードをオンにします
  3. 「パッケージ化されていない拡張機能を読み込む」を押して、解凍したフォルダを選びます
  4. ツールバーのパズルの形のアイコンから、SafePeek をピン留めしておくと便利です

あとは、調べたいページでアイコンを押せば結果が出ます。カード番号の扱いを知りたいときは、カード番号を入力する画面を開いた状態で押してください。番号を入れる必要はありません。

ストアを使わないので、自動では更新されません。知らないうちに中身が変わらないよう、あえてそうしています。新しい版を使うときは、古いものを削除して、同じ手順で入れ直します。GitHub のアカウントがあれば、リポジトリの Watch からリリースだけを通知するように設定しておくと、新しい版が出たことが分かります。

分からないこと

SafePeek が見ているのは、ブラウザから見える範囲だけです。

きちんと運用されているサイトほど、サーバーの情報を隠しています。何も見つからなかったことは、安全の保証ではありません。偽の通販サイトの特徴も手がかりにすぎず、どれにも当てはまらない偽物もあります。決済の画面が、今見ているページとは別にあることもあります。

判定がおかしいと思ったら、指摘の下にある「誤判定を報告」から知らせてください。GitHub の報告フォームが、サイトのアドレスのドメインまでの部分と、指摘の種類や重さ、SafePeek のバージョンといった判定の情報を入れた状態で開きます。ページの本文や、根拠に使ったページ側の値は含まれません。これらはリンクのアドレスに入っているので、リンクを開いた時点で GitHub には届きますが、公開の報告になるのはフォームを送信したときだけです。

まとめ

ネットの店を信用してよいかは、これまで見た目で決めるしかありませんでした。その見た目は、誰でも作れます。

SafePeek が手がかりにするのは、見た目ではなく、ページの作りに残っているものです。何かを保証するものではありませんが、あのレンズの店でアイコンを押していたら、少なくとも、カード番号を入れる欄が決済会社の枠の中にあるかどうかは、番号を入れる前に確かめられました。

ソースコードと、判定の一覧は GitHub にあります。

この記事をシェア

関連記事

記事一覧に戻る