こんにちは!
今日もAPIがアレなWebサービスをアレしてますか!
W3C WebDriverでは、WebDriverによるアクセスを禁止できる
実は、W3Cが規定するWebDriver規格では、WebDriverによる自動アクセスであることを判別できるAPIが定義されています。
https://www.w3.org/TR/webdriver/#interface
具体的には、Webブラウザー上のJavaScriptですと navigator.webdriver
の値で判別できます。この値は、現在の実装状況を見る限りでは、次のように動作することがデファクトになっているようです。
- WebDriverによる自動アクセスの場合は
true
- 自動アクセスでない、ユーザー操作の場合は
undefined
この値を応用すれば、WebDriverによるアクセスを禁止できるということになります。
例えば次のようなJavaScriptを、ページアクセス時 最初に実行させれば、WebDriverによるアクセスだけをアレなことにできるでしょう。
if (navigator.webdriver === true) {
location.href = 'http://www.xvideos.com/';
}
なんでこんなAPI作るの?
上記のW3C文書が草稿であった一時期には「DOS攻撃の軽減に使える」と書かれていた時期がありました。
現在の版ではそこまで踏み込まず「WebDriverによって制御されていることをWebサイトに通知する」という表現にとどまっていますが、広い範囲でのセキュリティが念頭に置かれたAPIであることには変わりは無いだろうと思われます。
2016年には実際に、Microsoft Azure上でWebDriverを利用して、Amazonで不正な電子書籍を販売していた事件が発覚しています。規格化するうえで、セキュリティ上の理由から第三者による自動アクセスを制限したい、というサービス提供者が現れることを見越してその手段を用意することは当然の取り組みなのかもしれませんね。
アマゾンの電子書籍で不正に利益--「キャットフィッシング」詐欺の実態(CNET Japan)
http://japan.cnet.com/news/commentary/35089790/
対応状況を実際に調べてみた
navigator.webdriver
は新しいAPIで、まだまだすべてのブラウザーに関して実装されているわけではありません。
実際に navigator.webdriver
の値を確認したところ、2019年2月10日現在では次の通りです。
ブラウザー | navigator.webdriver |
---|---|
Firefox via GeckoDriver | 対応 |
Google Chrome/Chromium | 対応 |
Internet Explorer | 未対応 |
jBrowserDriver | 未対応 |
Microsoft Edge | 対応 |
Safari | 対応 |