---
source_url: https://blog.ikaes.de/yet-another-way-to-invoke-functions-without-parentheses/
source_title: "yet another way to invoke functions without parentheses"
tags: javascript,prototype-pollution,code-execution,security
generated_at: 2026-10-16T12:00:40.635Z
model: claude-haiku-5-5
---
# 括弧を使わずに任意のJavaScript関数を呼び出す別の手法を紹介

ブログ記事の筆者は、Error オブジェクトの prepareStackTrace を上書きし、括弧を使わずに任意の JavaScript 関数を呼び出す手法を紹介した。Array.prototype.toString を制御して動作させ、valueOf のトリックで新しい関数を呼び出す。

筆者は、JavaScriptで括弧を使わずに任意の関数を呼び出す手法を見つけたとブログで紹介している。このペイロードは、Error オブジェクトの prepareStackTrace 関数を上書きして任意の関数を生成するものである。

## 手法の概要

prepareStackTrace は通常、スタックトレースの整形に使われる関数である。エラーの stack 属性にアクセスされたときに呼び出される。ペイロードはこの関数を上書きすることで、任意の関数を生成する。

## 動作の仕組み

prepareStackTrace の引数は、エラーと「a structured representation of the stack」である。これはコード位置の配列にすぎない。

prepareStackTrace は Function コンストラクタと同じ関数シグネチャを持ち、第2引数が有効な JavaScript コードであれば機能する。ただし、生成された関数を呼び出すと構文エラーが発生する。

このため、ペイロードを動作させるには Array.prototype.toString の出力を制御する必要がある。

## 制御と呼び出しの方法

Array.prototype.toString は、ペイロードを返す定数関数で上書きする方法で制御できる。もう一つの方法は、Error realm にとどまったまま Object.prototype.message を通じてプロトタイプ汚染を行うことである。出力を制御する方法は two つが挙げられている。

筆者は valueOf トリックを用いて新しい関数を呼び出した。これは、オブジェクトの既定の valueOf 関数を上書きし、プリミティブとして呼び出す方法である。別の呼び出し方法として、オブジェクトと文字列を連結する toString の手法も挙げられている。

最終ペイロードは記事内に掲載されており、ブラウザのコンソールで試すことを想定している。Object.prototype.message の値には、alert 呼び出しの引数として 1337 が含まれる。

## 筆者の見立て

- Array.prototype.toString の出力を制御する方法は、筆者が見つけたもの以外にも存在すると予想している。
- 構文エラーが生じるのは、スタックトレースが有効な JavaScript コードではないためだと解釈している。
- 新しい関数を呼び出す方法が多く存在することについて、幸運であると論じている。

*この記事は元記事の事実のみに基づいて自動生成されました。*

## 出典

- 媒体名: blog.ikaes.de
- 原題: yet another way to invoke functions without parentheses
- URL: https://blog.ikaes.de/yet-another-way-to-invoke-functions-without-parentheses/
