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