eval()を使わないでください!
MDN Web Docs (ja) 『eval()』
https://gyazo.com/7dbb39abec1e26ddf00cb9e0915a2d8f
じゃあどうするか 綾坂こと.icon
Indirect Eval
code:script.js
const a = 1;
(() => {
const a = 2;
eval("console.log('Direct Eval : ' + a)");
eval?.("console.log('Indirect Eval : ' + a)");
})();
// Expected Log Output :
// <string> "Direct Eval : 2"
// <string> "Indirect Eval : 1"
Function() コンストラクター
code:script.js
const a = 1;
(() => {
const a = 2;
eval("console.log('Direct Eval : ' + a)");
new Function("console.log('Function() : ' + a)")();
})();
// Expected Log Output :
// <string> "Direct Eval : 2"
// <string> "Function() : 1"
そんなもん実装しないでください!Summer498.icon
JS内部で使われてる……?
CosenseのUserScriptとかMDNとかに置いてあるJavaScriptテスターとかでは使われてる気がするMijinko_SD.icon
ユーザーが書いたJavaScriptソースコードを動的に実行したい時に使う
JSONC文字列→JavaScriptオブジェクトの変換に都合がいいんですよね〜(やったことがある)綾坂こと.icon
ES Modulesを使うようになったので最近はやってない
それ以外にも使えるけれど、何にでも使うとセキュリティ的にまずいので、余程の理由があってセキュリティ的に問題がないと判別がつく場合以外は使ってはいけないやつ
JSFuckで使われているbsahd.icon
ちなみに、eval内でrequireはできない...とあるが、replだとできた
JSFuckではFunction()コンストラクターを使うのでevalは使わないはず綾坂こと.icon
[].at.constructor === Functionなので、これを呼ぶ
evalと同じようなものだろbsahd.icon
それはそう綾坂こと.icon