絶対に eval を使うな!
Discordボットを作ったことが人の中には、evalという関数を使ってコードを実行し結果を返すというものを、作ったことがある人もいるのではないでしょうか。
しかし、このevalという関数は任意のコードを何でも実行できてしまうというかなり危険な関数です。MDNでも絶対に使うなと書かれています。
evalだけでなく、Function コンストラクターや AsyncFunctionコンストラクター、動的な import なども任意のコードを実行できてしまうため、それらもかなり危険であると言えます。
何ができるの?
何でもできます。ファイルを操作することもできるので、第三者にPCのファイルを盗まれたり、消されたりされるでしょう。それだけじゃ済まないこともあります。
Discord.jsを使用している状態なら、トークンを奪うことも可能です。
実行できるの俺だけだし大丈夫っしょ
大丈夫ではありません。
あなたのアカウントが乗っ取られて、知らない間にコードを実行される可能性があります。
もしかすると、処理に抜け穴があるかもしれません。
それでも俺はDiscord.jsを使った簡単なコードを実行したいんだー!!!
そんなあなたには、yuta0801yuta0801.iconが作ったdiscord.js-replをオススメします。
最終更新は 2020 年 4 月です。
だけど、だけど、俺はDiscordからコマンドを打ってコードを実行したいんじゃー!!!
eval の代わりに vm2 を使用してコードを実行すると、危険度を下げることができます。
2024/4/7 vm2はセキュリティの問題を抱えているので、使用しないでください
requireやprocess, setTimeout, setIntervalといったものは使えなくなります。
注意点
内側から現在のプロセスをクラッシュさせることができます。
console.log, util.inspect 系の関数が正常に動きません。
これらの問題や他の問題は 、vm2 の Known issues 欄に書かれています。
Isolated VM を使いましょう
ShadowRealms に期待しましょう
そんな、Discord.jsが使えない空間でコードを実行できないのはJavaScriptじゃないんだよぉぉぉ!!危険だって必要なんだぁぁ
正気か?滝に打たれて頭冷やして