ReDoS: Regular Expression Denial of Service
正規表現の実行が極端に遅くなるカタストロフィックバックトラッキング
概要
ReDoS(Regular Expression Denial of Service)は、特定の入力に対して正規表現のマッチングが指数関数的に遅くなる問題です。アプリケーションがハングする原因となります。
エラーメッセージ
RangeError: Maximum call stack size exceeded
# または単にハング/タイムアウト
原因
- ネストした繰り返し:
(a+)+のようなパターン - 重複する選択肢:
(a|a)+のようなパターン - 量指定子の連続:
.*.*のようなパターン - ユーザー入力の直接使用: 検証なしで正規表現に使用
解決策
1. 危険なパターンを避ける
| |
2. アトミックグループを使用(対応している場合)
| |
3. タイムアウトを設定
| |
4. 入力長を制限
| |
5. 専用のバリデーションライブラリを使用
| |
6. 静的解析ツールで検出
| |
7. 文字列メソッドで代替
| |
JavaScript の他のエラー
この記事は役に立ちましたか?