Wakotech Blog

ポエム

update_name実装したらすごく攻撃されるので怖い

リマインダーbotのついでにTwitterのupdate_nameを実装してみたのですが(古い)、攻撃しようとしてくる人が多いので少し困ったところ、というか心配です。
"#{}"で対処できているはずだとは思うんですが、怖いので、この書き方はまずいというのがありましたら指摘して頂きたいです。
@clientはstreaming用、@rest_clientはrest用で認証して接続してあり、@user_screen_nameは自身のスクリーンネームを取得済みとします。

require 'twitter'

def stream
  regexp_name = /^@#{@user_screen_name}\supdate_name\s(.+)$/
  @client.user do |status|
    if status.is_a?(Twitter::Tweet)
      if status.in_reply_to_screen_name == @user_screen_name
        if status.text.match(regexp_name)
          update_name($1, status.user)
        end
      end
    end
  end
end

def update_name(updated_name, user)
  ng_regexp = /NGワード集/
  before_name = @rest_client.user.name
  begin
    if updated_name.match(ng_regexp)
      @rest_client.update("@#{user.screen_name} NGワードが含まれています")
    else
      @rest_client.update_profile(name: updated_name)
      notice = "#{user.name}(@#{user.screen_name})により改名されました: #{before_name} => #{updated_name}"
      puts notice
      @rest_client.update(notice)
    end
  rescue
    puts 'update_name denied.'
    notice = "@#{user.screen_name} 失敗しました: #{updated_name}"
    if notice.length < 140
      @rest_client.update("@#{user.screen_name} 失敗しました: #{updated_name}")
    else
      @rest_client.update("@#{user.screen_name} 失敗しました")
    end
  end
end

stream

Streamingで拾った中で該当するものがあればupdate_name処理をする、という形です。現状だと絵文字やダブルクォートがツイートはされるがスクリーンネームには反映されなかったり、同一人物からの連続した投稿が許されていたり、単純にツイート数が多くてうるさくなるという問題もあるのでそれらはこれからなおしていきます……。
ので、とりあえずはセキュリティ的に危険があればそれは早く対処したいという感じです(今は停止していますが)。皆様よろしくお願い致します。