Googleスプレッドシートのスクレイピングでサーバー負荷をかけてはいけない
最近、サーバーログを監視しているとUAが「”Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)”」になっている不審なリクエストを見つけました。
72.14.199.132 - - [19/Aug/2018:05:21:39 +0900] "GET /hogehoge/1558/ HTTP/1.0" 200 18049 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:39 +0900] "GET /hogehoge/1558/ HTTP/1.0" 200 18049 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:39 +0900] "GET /hogehoge/1558/ HTTP/1.0" 200 18049 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:39 +0900] "GET /hogehoge/1252/ HTTP/1.0" 200 18396 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:39 +0900] "GET /hogehoge/1060/ HTTP/1.0" 200 18277 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:39 +0900] "GET /hogehoge/1866/ HTTP/1.0" 200 18562 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:40 +0900] "GET /hogehoge/1252/ HTTP/1.0" 200 18396 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:40 +0900] "GET /hogehoge/1416/ HTTP/1.0" 200 21643 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:40 +0900] "GET /hogehoge/1573/ HTTP/1.0" 200 18446 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:40 +0900] "GET /hogehoge/535/ HTTP/1.0" 200 18826 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 72.14.199.132 - - [19/Aug/2018:05:21:40 +0900] "GET /hogehoge/1678/ HTTP/1.0" 200 17798 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)"
こういったDoS攻撃のようなマナーもへったくれもないようなリクエストはfail2banを使ってIPごと排除するようにしているのですが、驚いたことにこのIPのwhoisを見るとGoogleからのものであり、さらに同じIPで「”Mediapartners-Google”(Adsense用のクローラー)」からのリクエストもありました。
Googleスプレッドシートを利用したスクレイピングだった
このリクエストについていろいろ調べていると、とあるサイトにGoogleスプレッドシートを利用したサイトデータの抽出(WEBスクレイピング)の手法が載っていました。
Googleスプレッドシートを作成してURLを入力し「IMPORTXML関数」を利用してクロールする方法です。
そこに記載されている通りにやってみると、確かにUAが「”Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)”」になって、IPアドレスもGoogleサーバーからのリクエストになりました。
66.102.8.185 - - [21/Aug/2018:14:09:57 +0900] "GET /hogehoge/1000/ HTTP/1.0" 200 229 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)" 66.102.8.181 - - [21/Aug/2018:14:10:22 +0900] "GET /hogehoge/1001/ HTTP/1.0" 200 229 "-" "Mozilla/5.0 (compatible; GoogleDocs; apps-spreadsheets; +http://docs.google.com)"
ほー、こういう方法もあるのね…って感心してはいられません。
業務妨害はいけない(最低限のマナー)
やってる方の都合もあるだろうし(やらないと会社クビになるとか、アフィリエイト収入が途絶えると生活できないとか)、WEBスクレイピングを全面的にやめろとは言いませんよ、言いませんけどマナーは守りませんか?
こういった負荷をかけまくるWEBスクレイピングは、相手先のサーバーに正常にアクセスして情報を得たい正当なユーザーを排除することになるし、最悪サーバーをダウンさせて業務を妨害する行為です。
しかも、AWSのようにデータ転送量で課金されるようなサーバーの場合は、相手先の個人や企業に多額の費用を発生させてしまいます。
データ提供もタダではないんです。このあたり、知らない人も多そうですよね。
Google側にも責任はある
今回の不正なリクエストが一番問題なのは、Google社の公式WEBクローラーと匿名一般ユーザーのWEBスクレイピングを同じIPでやっちゃってるってことかなと思います。
これをやられちゃうとIPベースで拒否できないんですよね。
まあ、やってる人はそれを知って意図してやってるのかもしれませんが。
大量のアクセスが来てるわけなので一旦拒否はしないと行けないんですが、拒否したあとでWEBクローラーは許可しないといけないので、慌てて解除する必要があるわけです。
.htaccessなどでUA判定して拒否
Googleスプレッドシート・スクレイピングでお困りのサーバー運営者向けに、とりあえずの対策としては、UAで判定して拒否する方法をおすすめします。
#attack ua SetEnvIf User-Agent "GoogleDocs" zako RewriteEngine On RewriteCond %{ENV:zako} 1 RewriteRule ^.*$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]
これを読んでもよく分からない、被害を被っているのでなんとかしたいという企業様がいらっしゃいましたら、サーバー運営のコンサルティングも行っていますので、お気軽にお問い合わせからご相談くださいませ。
2018-08-22