BotにはCloudflare

前回の謎のbotの大量アクセス問題からなんやかんやPHPやサーバー設定でできる範囲で対策してましたが減りはしたものの油断するとまたやってくるとういう状態がつづいてたので Cloudflareを召還することにしました。


Cloudflareは過去に何度か落ちてるし以前別サイトでCloudflareのCDNを使ってて見れない状態になった事もあり個人的にはCloudflareはあまり入れたくは無かったのですが背に腹は替えらません。
(導入して数日後に案の定落ちたりしましたが今回はキャッシュに使ってる訳ではないので影響は無かったようにみえます。)
導入してからログを見ると怪しいbotはみるみる減ってめでたしめでたしと思ったのもつかの間。
実はIPアドレスがCloudflareのものに置き換わってる問題が発生して、マイリリースではセキュリティ的にIPが変わったらログアウトする仕組みにしていたのでログインの維持すらできない状態になっていました。
ご迷惑をおかけして申し訳ございませんでした。
こういったIPを書き換えられるサービスにもサーバー側は対策(remoteip モジュール)が用意されていて、このモジュールを使うことでIPアドレスを戻せました。

ちなみにIPの書き換え問題で怪しいBotがいなくなったと勘違いしたわけでは無く本当に怪しいBotを排除してくれたようです。ただこのIPを置き換えられる現象があるとレンタルサーバーとかでは使いづらい気がする。(もちろん、Cloudflareに対応してるレンタルサーバーとかでは勝手に戻す作業も組み込まれてる場合もあります)

犯人はアリババにいる?

最近amazonapiの帯域制限が厳しかったのですが「セールの余波かな」ぐらいに思ってたのですがセールが終わってしばらくしても一向に改善されないのでログを調べて見たらbotが大量に沸いていてそのせいでamazon様から制限がかかってたようだ。

ログをざっと見てるとHTTPの方にBLEXBotが検索し続けてる状態だったのでココへのアクセスをブロックした。ただ検索するだけだとamazon様に負荷はかからないので関係は無い。

そもそもマイリリースの商品情報ページはASINを指定すると無限に生成されるので基本的にクロールされないようにしてるしブロックなどの対応は厳しめにしている。
robots.txtを守ってくれればブロックする必要は無いのですが・・・)
ひとまず網を張って(プログラム的にブロックを通過してるログを収集するスクリプトを書いて調査して)みたら30分ぐらいで7500件ほどのアクセスがあった。
UserAgentは下記のように一般的にブラウザを模してるが
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.43
そしてその多くがIPアドレスが「47.79.」または「47.82.」で始まるものだったので調べて見たら
「Alibaba (US) Technology Co., Ltd. 」でシンガポールISPという事だった。
読み解くと「中国企業のアリババがアメリカ法人でシンガポールのプロバイダーを経営してる所のユーザーがbot攻撃をしてる」という感じ?

プロバイダーという事で普通のユーザーもいるかもしれないのでどうしようかと思い、
IPアドレスの一覧をChatGPTに投げたら下記の様にごっそりブロックするように賜ったのでブロックしました。

Require not ip 47.79.0.0/16
Require not ip 47.82.0.0/16

先のUserAgentもChatGPTに確認したところMicrosoft EdgeChromiumベース)バージョン 114で2023年6月2日製のもので
「一般ユーザーのブラウザがこのバージョンのままである可能性は低く、
自動アップデートを無効にしているか、ボット・クローラーの偽装の可能性も考えられます。」
との事だったのでブロックする事にしました。

ブロックすると数時間後にはVPS(なぜVPNでなくVPS?)を使って分散してきたのでVPSを排除した。

さらに数時間後にはネットワーク会社が特定できないIPアドレスにを分散化させてアクセスして来たのでそれらを排除して今のところ落ち着いてきた。

数十個のIPアドレスを使って、あくまで一つのIPアドレスあたりは10秒に1回の頻度とかなのでDDOSとかの対策をくぐり抜けてくるのがいやらしい。

とりあえずゲスト(非会員)のアクセスではamazonから最新の情報を取得する仕組みを抑止する事にしamazon様に迷惑をかけないようにしました。

ヒソカにいいねの機能を追加しました。

コメントやランキングがあまりまわってないのでこのあたりをサイレント改善しました。

まずコミックや漫画家やランキングにコメントを追加する機能があるのですがこれらにいいね機能を追加しました。

元々、いいねがあるよりも2ちゃんのようにコメントでレスを付ける方が盛り上がるのかなと思っていいねボタンを躊躇してたのですが、大阪弁変換でいいねボタンを付けたらお問い合わせの100倍以上のリアクションがあったのでマイリリースのコメントにも採用しました。


それといいねボタンの追加に伴ってAJAX化する必要があったのでコメントの追加・削除もAJAX化しました。それによってページの遷移なしにスムーズなコメントの追加削除できるようになってます。

 

コメントだけで無くランキング自体にもいいねを付けました。

こっちはランキングにコメントは付けづらいのかあまり機能してなかったのでコメントするまでもないけどリアクションしたい人が多そう(私を含め)なので付けておきました。

メールアドレスとパスワード変更

おそらく1~2ヶ月前からメールアドレスの変更ができず、パスワードの変更もリアクションが無い変な感じになるというバグが発生していました。

 

このバグはソースの整理中だったファイルを別件で本アップしてしまったのが原因なのですが退会のコメントで指摘があって気づき修正いたしました。

ご不便おかけして申し訳ございませんでした。

 

メールアドレスとパスワードの変更には「メールの認証が必要」という特殊な項目なのですが、今までは他の設定と同じ画面に変更の為の入力欄があり、メールアドレスやパスワードに入力があったらメールを送るという、見た目にはシンプルだけど他ではあまり見ない形にしてました。
今回のバグ修正のついでに世間に合わせた方が分かりやすいかと「メールアドレス変更」と「パスワード変更」を別ページに分けました。

 

そのまま追加するとメニューがごちゃつくので「設定変更」を押した後に設定変更関連のナビゲーションを用意しこちらに「メールアドレス変更」と「パスワード変更」へのリンクを用意しました。

 

LINEログイン対応

LINEログインに対応しました。

「今更OPENID?パスキーじゃなくて?」

って言われそうですが・・・

OPENID早い段階で調査やテストはしたけど

OPENIDをそもそもみんな使ってるの?」

「どのサービス使えばいいのか」

「個人が作ったサービスに情報送るって気持ち悪いのでは?」

とか思うと手が出ずガラケーの簡単ログインは付けてるしパソコンやスマホはブラウザが記憶してくれるからいいかなと思って先延ばしにしてました。

(パスキーも同じくぐだぐだ考えてテストどまりで実装できないでいます)

 

今回実装したのはクッキーの保存期間がほぼセッション並になる未来があるので「次回から入力を省略」を削除の前段階と、GoogleやYahooやfacebookと比べスマホ持ってればLINEアカウントは持ってるといっても差し支えないほどの圧倒的なシェアがあるのでLINEログインを調べたら日本語な事もあり簡単にテストできたので実装にいたりました。

 

LINE Bot・LINE Notifyに続きLINE関連のサービスとの連動が多くなってしまってるけど、Twitterが実質APIを使った開発が困難だしinstagramAPIfacebookをからめないといけないので面倒だし、facebookは客層的にマイリリースには合ってないのでGoogleかYahooかLINEしか選択肢が無くシェア的な事やAPI解説のわかりやすさを考えるとLINEに傾倒しがちです。

スマホ版の機能拡充

本業が暇なのでマイリリースを色々いじった

サーバーではPHPのバージョン上げたりHTTP/2に対応してみたりとした
見た目の改善点は微調整レベルです。
スマホのコミュニティ(全巻セット)を直したのですが
商品詳細(単巻)と似てきてしまったので
コミュニティの方にはブックバンドを付けました。

機能的には背景色の変更やアイコンのアップをスマホにも対応させました。
iPhoneが「.jpeg」だったのでPCも「.jpeg」対応にしました。
設定画面とプロフィール変更は時流に合わせて確認画面を廃しました

今回電子書籍へのリンクも追加しました。
元々「学校(仕事)帰りに本屋に寄るかの判断をする」ためのサイトなので対応しない予定でしたが時流には逆らえませんでした。
電子書籍に対応したことで「どのサイトで買ってるかメモしたいかな」と思い
「あとでリスト」に付けてたメモ機能を他でも使えるように拡大しました。

あと、ベータ版ととりあえず付けてたスマホ版のバーコードリーダー機能を
正式に採用しました。

 

twitterからLINEへ

2023年4月末にtwitterAPIが有料化される事になりました。

イーロンマスクさんが買収して以降噂はあったが2月に即有料化でなく4月末に延期にはなったので対策する猶予は与えられた。

 

マイリリースでtwitterAPIを使っていたのは下記の2つ

  • プロフィールの設定でWEBサイトにtwitterを指定するとツイート内容が数件表示される引用機能
  • TwitterBotのAPIを使って発売日にツイートしてくれる通知機能

 

有料化に耐えれるほどの資金が無いし、v1.1で作成してるのでv2に対応させる時間的な問題もあり3月末にtwitterを使った機能は停止する事としました。

 

引用機能の方はどうしようもないのでツイートを表示しないものとします。
通知の機能は「迷惑メール扱いされそうでイヤだけどメールで通知するしかないかな」と思ってたのですが先日作ったメモのWEBアプリで過去のメモを整理してると「LINE Notifyを試す」というのを見つけて調べてみるとちょうど代わりに使えそうなのでこれで代用する事にしました。

マイリリースでLINEはこっそり公開してるコミック発売日BOTでLINE Messaging APIを既に採用しているので2つめだけどLINE Notifyは他のLINEのAPIと分離されてるのでLINE Devlopersの管理画面には出て来ないです。いづれにせよLINEのAPIは日本語のリファレンスが充実してるので実装の難易度は低かったです。

twitterの時は私がtwitterの通知を切ってる事もあり深夜に通知してたのですが、LINEは通知がオンの人も多いかと思うのでおおまかな時間指定を可能にしました。

前回のBOTも制限(1,000件)がですがLINE Notifyも制限があり100人までのようです。
Botは2023年6月1日から無料枠は200件の制限になるようです。