JavaScriptで括弧を使わずに関数を呼び出す新たな手法が登場
Yet another way to invoke functions without parentheses
JavaScriptで括弧なしに関数を呼び出す新たな手法が公開された。ErrorオブジェクトのprepareStackTraceをFunctionコンストラクタに置き換え、Array.prototype.toStringを操作して任意のコードを生成。最後にvalueOfトリックで実行する。プロトタイプ汚染を利用するなど、セキュリティ研究や難読化の文脈で興味深い。
Object.prototype.message='alert\x281337\x29';Array.prototype.toString=Error.prototype.toString;Error.prepareStackTrace = Function;const x = new Error;x.valueOf=x.stack;+x;