axios の連続 CVE は「ライブラリ側のバグ」だが、企業システムでの実害の半分以上は「使い方のバグ」が原因だ。 SSRF を防ぐ baseURL 設計、timeout 未設定の連鎖障害、interceptor でトークンが第三者ドメインに漏れる事故――これらは axios のバージョン更新では防げない。本記事では、コードレビューで即使える 12 項目チェックリストを実コード例付きで提示する。
目次
- チェックリスト 12 項目 概要
- SSRF 対策(baseURL/allowAbsoluteUrls)
- timeout 設定(接続/レスポンス/総時間)
- CSRF トークン送信の正しい設計
- interceptor のトークン漏洩リスク
- proxy 設定の罠
- redirect の自動追従を制御する
- JSON 解析と Prototype Pollution
- エラーハンドリングと情報漏洩
- コードレビュー用 12 項目チェックリスト
- よくある質問(FAQ)
チェックリスト 12 項目 概要
| # | 項目 | リスクレベル | 検知方法 |
|---|---|---|---|
| 1 | baseURL に外部由来文字列を結合していない | 高 | grep |
| 2 | allowAbsoluteUrls: false を明示 | 高 | grep |
| 3 | timeout を必ず設定(5-30 秒) | 高 | grep |
| 4 | maxRedirects を制御(既定値の見直し) | 中 | grep |
| 5 | maxContentLength/maxBodyLength で DoS 防止 | 中 | grep |
| 6 | CSRF トークンを meta タグから注入 | 高 | grep |
| 7 | interceptor で他ドメインに Authorization を漏らさない | 高 | レビュー必須 |
| 8 | proxy 経由時の TLS 検証無効化禁止 | 高 | grep |
| 9 | レスポンスを responseType: 'json' 明示 | 中 | grep |
| 10 | エラーログに request body を含めない | 中 | レビュー |
| 11 | retry に exponential backoff+上限 | 中 | レビュー |
| 12 | 1.15.0 以降を使用(CVE-2026-40175 対応) | 必須 | package.json |
FREE CONSULTATION
この記事の内容について、専門家に相談できます
AI・DX・セキュリティに関するご質問やお見積もりなど、お気軽にお問い合わせください。
SSRF 対策
NG パターン(ユーザー入力を baseURL/url に直結合)
const userUrl = req.body.targetUrl;
const res = await axios.get(userUrl);
外部ユーザーが http://169.254.169.254/latest/meta-data/ を渡すと AWS メタデータエンドポイントに到達。
OK パターン(allowlist + 絶対 URL 拒否)
const ALLOWED = ['https://api.partner1.example', 'https://api.partner2.example'];
const targetBase = ALLOWED.find(b => userUrl.startsWith(b));
if (!targetBase) throw new Error('Forbidden host');
const client = axios.create({
baseURL: targetBase,
allowAbsoluteUrls: false,
timeout: 10_000,
});
const res = await client.get(userUrl.replace(targetBase, ''));
timeout 設定
const client = axios.create({
timeout: 10_000,
signal: AbortSignal.timeout(15_000),
});
接続 timeout(OS レベル)とレスポンス timeout(axios レベル)と総時間(AbortSignal)の 3 段で守る。
CSRF トークン送信の正しい設計
<meta name="csrf-token" content="{{ csrf_token() }}">
import { camelCase } from 'lodash';
const token = document.querySelector('meta[name=\"csrf-token\"]')?.content;
const client = axios.create({
baseURL: '/api',
headers: { 'X-CSRF-Token': token },
withCredentials: true,
});
xsrfCookieName / xsrfHeaderName 既定の使用は同一オリジンのみ。CDN 経由 API では meta タグからの注入が確実。
interceptor のトークン漏洩リスク
NG パターン(外部 URL リダイレクト時に Authorization を引き継ぐ)
client.interceptors.request.use(config => {
config.headers.Authorization = `Bearer ${token}`;
return config;
});
axios は redirect 時に Authorization を引き継がないが、interceptor で全リクエストに付与する設計だと、redirect 後の外部ドメイン宛にも付与される。
OK パターン(自社ドメイン限定)
client.interceptors.request.use(config => {
const url = new URL(config.url ?? '', config.baseURL);
if (url.hostname.endsWith('.example.com')) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
});
proxy 設定の罠
const client = axios.create({
proxy: {
host: 'proxy.internal',
port: 8080,
},
});
NG: process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0' で TLS 検証を無効化する。CI のデバッグで仕込んだまま本番に流出する事故が多発。
redirect の自動追従を制御する
const client = axios.create({
maxRedirects: 5,
});
OAuth コールバックなど redirect が前提の処理では、maxRedirects: 0 + 手動制御が安全。リダイレクト URL の検証ロジックを噛ませる。
JSON 解析と Prototype Pollution
CVE-2026-40175 のような Prototype Pollution は、応答 JSON に __proto__ キーが含まれた時に発生。1.15.0 以上であれば既定で防御されるが、自前で JSON.parse 結果を再帰マージする処理がある場合は別途対策が必要。
const safeMerge = (target, source) => {
for (const key of Object.keys(source)) {
if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;
target[key] = source[key];
}
return target;
};
エラーハンドリングと情報漏洩
NG パターン
catch (e) {
logger.error(e.config); // request body / headers / token が全部出る
}
OK パターン
catch (e) {
logger.error({
url: e.config?.url,
status: e.response?.status,
code: e.code,
});
}
retry に exponential backoff+上限
import axiosRetry from 'axios-retry';
axiosRetry(client, {
retries: 3,
retryDelay: (count) => Math.min(2 ** count * 200, 2_000),
retryCondition: (e) => axiosRetry.isNetworkOrIdempotentRequestError(e),
});
コードレビュー用 12 項目チェックリスト
□ 1. baseURL にユーザー入力を結合していない
□ 2. allowAbsoluteUrls: false を明示
□ 3. timeout を 5-30 秒で設定
□ 4. maxRedirects を 0-5 に制御
□ 5. maxContentLength を 10MB 以下に
□ 6. CSRF トークンを meta から注入
□ 7. interceptor の Authorization 付与をドメイン限定
□ 8. NODE_TLS_REJECT_UNAUTHORIZED を本番で無効化していない
□ 9. responseType: 'json' を明示
□ 10. error ログに request body を含めていない
□ 11. retry に exponential backoff+上限
□ 12. axios 1.15.0 以上を使用
よくある質問(FAQ)
Q. 既存コード 100 callsite で 12 項目全部レビューするのは現実的? A. 12 項目のうち 1-3/6/8/12 は grep で 30 分以内に網羅可能。7/10/11 はコードレビュー必須。1 callsite あたり平均 3 分で 100 callsite で 5 時間が目安。
Q. axios.create() を使い回す設計と都度 new する設計、どちらが安全? A. interceptor/timeout/allowlist を一元管理する観点で、axios.create() を 1 箇所で生成して export する設計が安全。
Q. axios-retry はどのくらい広く採用されている? A. axios-retry の週次ダウンロード数は 200 万超(2026 年 4 月時点)、企業システムでもデファクト。retry 自前実装より低リスク。
参考資料
- axios 公式ドキュメント Security Best Practices
- OWASP API Security Top 10 2023
- IPA「Web アプリケーション開発における脆弱性対策」2024 年版
社内コードレビュー基準への組込みやセキュリティ自動化(grep ルール/Lint 規約)の整備は、GXO のセキュリティ運用支援サービスで支援可能です。
<!-- GXO_QUALITY_REWRITE_20260507_START -->GXO実務追記: サイバーセキュリティで発注前に確認すべきこと
この記事のテーマは、単なるトレンド紹介ではなく、自社で最初に塞ぐべきリスク、外部診断の範囲、初動体制を決めるための検討材料です。検索で情報収集している段階でも、発注前に次の観点を整理しておくと、見積もりのブレ、手戻り、ベンダー依存を減らせます。
まず決めるべき3つの論点
| 論点 | 確認する内容 | 未整理のまま進めた場合のリスク |
|---|---|---|
| 目的 | 売上拡大、工数削減、リスク低減、顧客体験改善のどれを優先するか | 成果指標が曖昧になり、PoCや開発が終わっても投資判断できない |
| 範囲 | 対象部署、対象業務、対象データ、対象システムをどこまで含めるか | 見積もりが膨らむ、または重要な連携が後から漏れる |
| 体制 | 自社責任者、現場担当、ベンダー、保守運用者をどう置くか | 要件確認が遅れ、納期遅延や品質低下につながる |
費用・期間・体制の目安
| フェーズ | 期間目安 | 主な成果物 | GXOが見るポイント |
|---|---|---|---|
| 事前診断 | 1〜2週間 | 課題整理、現行確認、投資判断メモ | 目的と範囲が商談前に整理されているか |
| 要件定義 / 設計 | 3〜6週間 | 要件一覧、RFP、概算見積、ロードマップ | 見積比較できる粒度になっているか |
| PoC / MVP | 1〜3ヶ月 | 検証環境、効果測定、リスク評価 | 本番化判断に必要な数値が取れるか |
| 本番導入 | 3〜6ヶ月 | 本番環境、運用設計、教育、改善計画 | 導入後の運用責任と改善サイクルがあるか |
発注前チェックリスト
- 重要システムと個人情報の所在を棚卸ししたか
- VPN、管理画面、クラウド管理者の多要素認証を必須化したか
- バックアップの世代数、復旧時間、復旧訓練の実施日を確認したか
- 脆弱性診断の対象をWeb、API、クラウド、社内ネットワークに分けたか
- EDR/MDR/SOCの必要性を、監視できる人員と照らして判断したか
- インシデント時の連絡先、意思決定者、広報/法務/顧客対応を決めたか
参考にすべき一次情報・公的情報
上記の一次情報は、社内稟議やベンダー比較の根拠として使えます。一方で、公開情報だけでは自社の現行システム、業務フロー、データ状態、予算制約までは判断できません。記事で一般論を把握した後は、自社条件に落とした診断が必要です。
GXOに相談するタイミング
次のいずれかに当てはまる場合は、記事を読み進めるだけでなく、早めに相談した方が安全です。
- 見積もり依頼前に、要件やRFPの粒度を整えたい
- 既存ベンダーの提案が妥当か第三者視点で確認したい
- 補助金、AI、セキュリティ、レガシー刷新が絡み、判断軸が複雑になっている
- 社内稟議で費用対効果、リスク、ロードマップを説明する必要がある
- PoCや診断で終わらせず、本番導入と運用改善まで進めたい
<!-- GXO_QUALITY_REWRITE_20260507_END -->axios セキュア使い方 チェックリスト 2026|SSRF・タイムアウト・CSRF・interceptor の落とし穴 12 項目を自社条件で診断したい方へ
GXOが、現状整理、RFP/要件定義、費用対効果、ベンダー比較、導入ロードマップまで実務目線で確認します。記事の一般論を、自社の投資判断に使える形へ落とし込みます。
※ 初回相談では営業資料の説明よりも、現状・課題・判断材料の整理を優先します。

