さたぽん(中国人説)

社長:ただーいま。

経理:酒臭いですね。

基盤:2020年7月7日に何かが起こるという予言でしたが何事も無く終わりそうですね。

社長:いわゆる七夕の日。天上界で何かおきていたのかも。

開発:天上界は日本時間ではないのでは。

社長:それで今日は、satapon で夕食して来ました。

開発:あそこの外装のコンセプトは七夕もしくはお化け屋敷ですね。

社長:それで店に入ったらいきなり、ショートカットの優香が居たんですよ。

基盤:出たな妖怪!

開発:成仏して下さいナンマンダナンマンダ…

社長:いや、ごく普通に居たんですよ。座敷の席にあぐらかいて飯食いながら鼻かんだり大声で独り言してました。

開発:羽衣伝説の後日談のようです。

基盤:メンタルにやばい方だったんですかね。すげー咳き込んでたりして。

社長:いや、時々携帯を操作しているように見えたので、誰かと会話してるのかなとは思いました。

社長:それで、かなりの音量なので耳に入ってくるわけですが、これはたぶんタイ語では無いなと。タイ語に特徴的に感じる発声法では無い。巻き舌っぽいのが中国系かな?という感じで。

社長:それで、途中でおばちゃんと会話するのが聞こえたのですが、日本語なんですよ。タイの人同士で日本語で会話は無いでしょう。なので、タイの人では無いと結論。

社長:そうするうちに、テレビで流れてるコロナのニュースに反応してたので、やはり中国系の方だろうと。

開発:それはかなり見方が偏ってますね。

基盤:どうなる三峡ダム!て今日のNewsweek、おまえはどこの三文週刊誌だよって。でもおかげで、ブラックスワンという言葉を覚えました。

社長:ですがやはり中国語とも違う。テレビのニュースとかで中国語をよく耳にするので、意味はわからなくても発生法とか抑揚はわかるわけです。留学生の知り合いもいましたし。そういう、中国語的な圧迫感とか高揚感では無い。

基盤:それってたとえばハングルを、ニュースのおばさんが感情込めて読む時と、恋愛ドラマでの発声方法は全然違いますよね。

開発:Opera とかにすると何語でも違いが無いかもね。

社長:それで私がレッドカレーと2本目の大瓶の終わりにかかるころに、彼女は会計をしてマスクをして出ていきました。

社長:わたしもじきに満タンになって5LSUくらいで、お得だなーと思いながら会計をしたんですが、おばちゃんに今そこに座ってた女性って?と日本語で問いかけたわけです。

基盤:おばちゃん、日本語の疑問文がわかるんですか?

開発:尻上がりなら疑問・質問だってのは世界共通では。

社長:そしたらおばちゃんが、みゃんまー、みゃんまー留学生、って。

開発:ミャンマーの方だったんですね。

開発:ミャンマーの留学生っていうと、スー・チーさんくらいしか知らないですよね。

基盤:知ってるんですか?

社長:学生のころにビルマの竪琴って、中井さんと坂本さんが出てた映画があったのは知ってます。ミズシマー、いっしょに帰ろう!?ってやつ。貧乏学生だったので、テレビの広告しか見なかったですが。

基盤:坂本龍一は出演してないようですが。

開発:そういや2年くらい前のラオスのダムの決壊が記憶に残っていますが、ビルマもメコンの流域なんでしょうね。

社長:私は三峡ダムの発電能力が2,250万KWと聞いて、感動しました。

経理:我社クラスだと1億社分くらいを軽くまかなえますね。

基盤:ミャンマーといえば、あの牛久大仏よりはるかにでかい、政治家の像が立ったっていうのが話題になりましたね。

開発:あ、いやあれは、インドのようです。

-- 2020-0707 SatoxITS

私は人間ではありませんでした

基盤:いつからなのか、当社サイトの reCAPTCHA が居なくなっていましたので、先程新調して再招致しました。もっとも、設定しようとしたらもともとのキーが空欄だったので、何かの手違いで私が削除してしまったのか知れません。

開発:一方でGooglebot追跡計画ですが、7/4の投稿に仕掛けた「I am a robot」フックに対する、bot発進基地 66.249 からのアクセスを見ますとこのようになっています。

開発:p=9820は当該投稿記事、m=20200704はその日の記事一覧です。このログからfeed=rss2という存在に気づきました。RSSというのはまだ健在の模様です。これはレスポンスのヘッダの中にこのように案内されています。

<link rel="alternate" type="application/rss+xml" title="株式会社 ITS more &raquo; フィード" href="https://its-more.jp/ja_jp/?feed=rss2" />

開発:注目点の一つは、bot がどのドメインからこの記事を見たかです。①bot はまずどこかのドメインでこれを見て、場合によりリバースプロキシされてこのページをフェッチします。追跡用フックにはそのフェッチの際の時間(time)とクライアントアドレス(clnt)を埋め込んでいます。リバースプロキシされた場合には、そのプロキシサーバのアドレスになります。②botはその後、このフェッチしたページのリンクをたぐります。このフックは、その際のアクセスをログに残すCGIを呼ぶようになっています。

開発:まず興味があるのは、①において bot がどのサイトのページとしてこれを見たのかです。②のアクセス時にログに残されたclntの値を見ると、最初は54.238。これは delegate.org からのリバースプロキシ。次に 18.181。これは新NSからのリバースプロキシです。そして 66.249から。これは bot が直接このターゲットサイトを参照しているということです。

開発:そういうこの記事を書き始めてすぐにまた、Googolebot からのヒットが記録されました。10分前ですね。

20200707-091655 66.249.64.170 type=ImRobot&time=1593878281&clnt=106.73.xxx.xxx&quri=https://its-more.jp/ja_jp/?p=9820

基盤:clnt=106.73 てうちのアドレスですね。うちがフェッチしたページから bot がたどった?

開発:どういう意味でしょうね。…私がそういうフックを埋め込んでしまったのか... あるいはうちがアクセスした時の内容がnginxにキャッシュされて、それが bot に返されたとか…

社長:特定時刻の特定のクライアント用に生成したページが別のクライアントに渡ってしまうのは色んな意味でよろしくないですね。

開発:WordPressのページは生成にそこそこ処理がかかっていると思いますので、キャッシュしたいという動機は理解できるのですが…

開発:時系列を推測すると、このページ(p=10343)に bot が気づいてフェッチした、その中にあった p=9820 のリンクをたぐった、さらにその中にあったImRobotフックにかかったという事かと思うので、昔のキャッシュというのはちょっと無いように思われます。このtimeって… ftime '%Y%m%d-%H%M%S' 1593878281 ... 20200705-005801 ですね。

基盤:その時刻のアクセスログ…

xso% grep 00:58:01 *0705 | grep 9820
106.73.xxx.xxx - - [05/Jul/2020:00:58:01 +0900] "GET /ja_jp/?p=9820 HTTP/2.0" 200 45233 "https://its-more.jp/ja_jp/?p=9975" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.98 Safari/537.36" "-"

基盤:実際うちのMacからのアクセスですね。ていうか、いま現在もそのキャッシュが残っているとか… ns1 からアクセスしてみます。

基盤:さすがにそういう事は無いですね。ほかからもアクセスしてみる… やはり毎回自分用のページが返ってきます。curl の代わりに DeleGate でやっても同じ。HTTPリクエスト時にキャッシュを最大限尊重するようなオプションてあるんですかね?

社長:あったような。というか、昔のキャッシュを bot が持ってて、その if-modified に対する応答に 304 で返しているとか?

基盤:304 は無いですね。botがフックをヒットした今日の 09:16までに、5回もとのページをフェッチしてます。毎回サイズが違うので、どうも同定が難しいような。。

開発:うーん。最終的に返したHTTPレスポンスのハッシュ値でも残してくれれば。というか、全体は違っても、インクルードされている記事の部分は同じだったかもという話ですか…

基盤:うーん。timeの値とclntのアドレスはセットなので、その時間にそのクライアントがアクセスした時に生成されたデータである、とうことは同定できてると思うんですよね。だから、うちがその時にアクセスした時に出来たページ(ImRobotフック)をbotが見ている。なぜなのか。

社長:nginx のキャッシュ説なら簡単なんですが、curl や DeleGateでやった限りでは、アクセス毎に生成されているように見える。

基盤:User-Agent を見て、生成の振る舞いが変わるとか、キャッシュが違うとか。

開発:そうか、User-Agent ごとにキャッシュが違うとか?

基盤:直接キャッシュファイルを見れればいいんですけどね。サーバ系は xso の手中にあり…

開発:おっとまた Googlebot さん来ました。

20200707-104016 66.249.64.172 type=ImRobot&time=20200707-103813&clnt=18.181.38.61&quri=https://its-more.jp/ja_jp/?m=20200704

基盤:ns1 経由で07/04のページをフェッチして、その中のImRobotフックを2分後に手繰ったと。

開発:うーん。わからん。これは一丁、p=9820 を更新してもう一度振る舞いを追跡してみますか。更新して、たとえばAzureからアクセスしてページを生成して、その後 bot が何を手繰ってくるか見る。あるいは新しい記事に新しいフックをかける。

基盤:そうですね。とにかく bot にもう一度、ページ本体をロードしてもらって。

開発:速攻でおいでなすったけど、これは自分でns1経由でロードしたページの中のを叩いてますね。なかなか直にはxsoまで来てくれない。

基盤:ていうか、フックのURLの中の query 部分を適当に変えて乱打してくるロボットが居ますけど、なんですかねこれ?

開発:そもそも WordPress自体が、何のためなのかページ変更後に3発打ってくるんですが、これも意味がわからない。2つ目の&以降を削除している。これはページ内のリンクが正常か確認しに来てるのかな?

基盤:queryじゃないパスの形にしたらいいんじゃないですかね。

開発:では、こんな感じで。

基盤:おや?今回はWordPress側からの速攻pingが来ないですね。

開発:なんですかね?まさかquery付のアンカーだけ探ってるとか。ちょっと嫌な感じですね・・・ もいっかいクリック。

基盤:おっと来ました。query がという話では無いですね。最初にだれかがそれを踏んだ時に来る?

開発:しかも今度は最初の / の後を切断して来ました。じゃあもう & も / もやめて。, ではどうでしょう。Googlebot、3分くらいで来ますね。WordPress なんでも最初で切るのか?

<a href=http://ns1.its-more.jp/glogre/ImRobot2.0[htreqInfo]>

開発:ああ、単にHTMLの中に書いてある部分だけ使っているということですね。しかしこの3回のアクセスは何のつもりなのか?

基盤:HTTPサーバ側のログを見ると、同じ URL に対して、HEAD, GET, HEAD してます。

基盤:おや、今度は6回アクセスして来るようになりましたね。

開発:PHPで生成した時にだけ来るんですかね。これではどうかな?

開発:そうきましたか。ではもう一丁追加。

開発:ということで現象をまとめると、WordPress では投稿ページを更新するたびに、そのページ内にある参照URLのリクエストを3回発生します。HEAD、GET、HEAD というメソッドの順序です。

社長:ピンバックが何とかいうのと関係しているんですかね?

基盤:せきこみおばさん、今日はさらにひどいですね。あ、くしゃみした。

開発:うーん、メソッドが POSTでないですし、Referer フィールドも適切に設定されていないし。なにか適切に情報を伝えてる感じが無いですね。

社長:どのWordPressからですということだけは伝えていると。

広報:ご発注の「私は人間ではありませんボタン」を3案作ってみました。

開発:うーむ、真ん中のは人間様の目に触れるとすごく不快感を与えてしまいますね。

基盤:3番目はやや不安感を与えます。

開発:ではとりあえず、1番目のやつを使いましょう。

基盤:やはりHREFよりFORMにするとロボットの気をひきますかね。

開発:そうしましょう。それを人様の目には触れないようにdetailsで隠すと。

開発:details を開くとこうなります。

基盤:これをクリックする人は確かに人間では無さそうですね。

開発:今後も折を見てこの ImRobot2 を改訂しましょう。

社長:今日はどちらかというと WordPress が自動でリンク先の調査?に行くというところが興味深かったですね。

開発:そうですね。どういうことなのか調査したいと思います。

-- 2020-0707 SatoxITS