Closed4

WASM を使って安全に Discord から Ruby を実行する

funwarioisiifunwarioisii

bot 自体は discordrb を使っていて、

require 'discordrb'
require 'shellwords'

def parser(message)
  split_message = Shellwords.shellsplit(message)
  command = split_message.first
  args = split_message[1..]

  [command, args]
end

bot.message do |event|
  message = event.message.content
  command, args = parser(message)
  result = eval(args.first)
  event.respond(result)
end

こんな感じで良さそう。
rm -rf / が渡ってきたら bot の実行環境が吹き飛びますが

funwarioisiifunwarioisii

実行環境が吹き飛ぶのはだるいので、なんらかの仮想環境を用意すると良さそう。
たとえば、 Docker なり。
今回は wasm でやってみる。(実際に実行する環境は wasmer だけど)

wasmer のセットアップは cargo が入っていれば、 $ curl https://get.wasmer.io -sSfL | sh で済む。

wasmer が入っていれば、 Ruby の実行は wasmer katei/ruby -- -e "p 1" で済む。

なので、これを bot から実行できるようにする。
こんな感じ

bot.message do |event|
  message = event.message.content
  command, args = parser(message)
  code = args.first
  result = `wasmer katei/ruby -- -e "p (#{code})"`
  event.respond(result)
end
このスクラップは2023/07/19にクローズされました