kdnakt blog

hello there.

JavaScriptのconsole.time()で経過時間を記録する

脆弱性の調査をしていて学んだのでメモ。

[CVE-2022-24999のPoC]

qsというライブラリのプロトタイプ汚染問題(CVE-2022-24999)が少し前に話題になった。

再現方法を調べていたら、GitHub上でPoCが公開されていた。

github.com

PoCのJavaScriptコードを読んでいて、console.time()console.timeEnd()というメソッドが使われているのに気がついた。

[consoleのタイマー]

調べてみるとライブラリを入れなくともJavaScript標準で使えるらしい。

developer.mozilla.org

こちらのページに使い方がまとまっていた。

developer.mozilla.org

// タイマー登録
console.time("answer time");

alert("Click to continue");

// タイマー経過出力
console.timeLog("answer time");
// answer time: 5669.81103515625 ms

alert("Do a bunch of other stuff…");

// タイマー利用終了
console.timeEnd("answer time");
// answer time: 7343.092041015625 ms

本番環境でコンソールにあまり余計なものは出したくないが、トラブル時のデバッグに利用したり、テストコードの簡易的な時間計測に利用したりするのが良さそう。

[まとめ]

  • console.log('label')で名前をつけたタイマーを開始できる
  • 途中経過を出力する場合はconsole.timeLog('label')を利用する
  • タイマーの最終結果を出力する場合はconsole.timeEnd('label')を利用する