フォロー

早朝のメンテで、rubyのバージョン変更を行いました。現在3.2.6になっています。

合わせて、キーワード購読の正規表現マッチングにタイムアウトを設定しました。

これまで、キーワード購読の処理に非常に時間のかかる場合があり、ジョブが詰まる他、そのジョブがずっと計算しているのでCPU負荷をかけ続けるという問題が発生していました。

効果はマイルドでしたが、いわゆるReDoSという脆弱性にあたるものです。

※ ものすごく計算負荷の高い正規表現を処理させることで正常なサーバ機能を妨害するサービス拒否攻撃の一種

また、Ruby 3.2系以降は時間のかかる正規表現の一部が解消されていて処理自体も早くなっているので、全体にパフォーマンスが向上しているものと思います。

あけおめには間に合わなかったというか、リスクが高いので後回しにしていたんですが、先に投入できていればもっとスムースだったかもしれませんねー。

なお、期せずしてタイムアウトするような正規表現を設定していた人は、今回の変更以降、取りこぼしが発生している可能性があります。正直わからないと思いますが、急に流量が減った人は、正規表現を見直してみてください。

ReDoS対策、ユーザーに正規表現を書かせないっていうのが最善手なんですが、まあ使いたいじゃないですか。

なので、システム的に影響を緩和しつつ、まずは自由に使って貰って、具合が悪いものがみつかったら個別対応する方向で運用しています。

他の機能もだいたいそういう方向です。

キーワード購読は、単語を並べる方式と、自分で正規表現を記述する方式の両方が使えます。

よくわからない場合は単語を並べる方式を活用してください。内部的には単純マッチではなく、ヘンなところにひっかからないように工夫されているので、ヘタな正規表現を自分で書くより結果が良好ということもあります。

ログインして会話に参加
Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。