絶対に eval を使うな!
Discordボットを作ろうと思った人ならevalという関数を使ってボットからコードを取得してevalで実行し、実行結果を返すというものを作ったことがあるのではないでしょうか?
ですがこのevalという関数は任意のコードを何でも実行できてしまうというかなり危険な関数であり、MDNでも絶対に使うなと書かれるくらいです。
(evalだけでなく、FunctionコンストラクターやAsyncFunctionコンストラクターなども任意のコードを実行できてしまうため、それらも使用を控えましょう)
何ができるの?
何でもできます。ファイルを操作することもできるので第三者にPCのファイルを盗まれたり、消されたりされるでしょう。いやそれだけじゃ済まない
Discord.jsを使用している状態ならトークンを奪うことも可能です。
実行できるの俺だけだし大丈夫っしょ
大丈夫じゃないです。
あなたのアカウントが乗っ取られて知らない間にコードを実行される可能性もあります。
もしかすると処理に抜け穴があるかもしれない!
それでも俺はDiscord.jsを使った簡単なコードを実行したいんだー!!!
そんなあなたにはyuta0801yuta0801.iconが作ったdiscord.js-replをオススメしよう!
だけど、だけど俺はDiscordからコマンドを打ってコードを実行したいんじゃー!!!
evalで実行するのはとても危ないので別の手段を提案します。
vm2 を使用してコードを実行しよう!
requireやprocess, setTimeout, setIntervalといったものは使えなくなります。
ただし,現在のプロセスをクラッシュさせることができたり,console.log(util.inspect) が正常に動かなかったり,本来の JavaScript の挙動と異なったりするので気をつけること。(これらの問題は vm2 の Known issues 欄に書かれていると思います)
使用例
そんな、Discord.jsが使えない空間でコードを実行できないのはJavaScriptじゃないんだよぉぉぉ!!危険だって必要なんだぁぁ
正気か?滝に打たれて頭冷やして