📚 API ルート詳細ガイド: OWASP Juice Shop のバックエンド API エンドポイント完全解説
🛣️ API ルート (routes/) 完全ガイド
OWASP Juice Shop のバックエンド API は、30以上のルートファイルで構成されており、認証、商品管理、決済、セキュリティチャレンジなど、アプリケーションの全機能を提供しています。
📋 ルートファイル一覧
🔐 認証・ユーザー管理
2fa.ts
- 二要素認証
- 機能: TOTP(Time-based One-Time Password)による二要素認証
-
主要エンドポイント:
-
verify()
- 2FAトークン検証 -
status()
- 2FA設定状況確認 -
setup()
- 2FA有効化(パスワード確認 + セットアップトークン + 初回TOTPトークン) -
disable()
- 2FA無効化
-
-
依存関係:
otplib
,UserModel
,BasketModel
- 脆弱性: 意図的な脆弱性実装あり
authenticatedUsers.ts
- 認証済みユーザー一覧
- 機能: 認証済みユーザーの情報取得
-
主要機能:
- ユーザー一覧取得(パスワード・TOTPシークレットはマスク化)
- 最終ログイン時刻の計算
-
セキュリティ: パスワードとTOTPシークレットを
*
でマスク
changePassword.ts
- パスワード変更
- 機能: ユーザーパスワードの変更
-
検証項目:
- 現在のパスワード確認
- 新しいパスワードと確認パスワードの一致
- 空パスワードの拒否
- 脆弱性: セキュリティチャレンジ用の意図的な脆弱性
currentUser.ts
- 現在のユーザー情報
- 機能: ログイン中ユーザーの情報取得
- 返却情報: ID, メール, 最終ログインIP, プロフィール画像
- 脆弱性: JSONPコールバック対応(メール漏洩チャレンジ)
login.ts
- ログイン処理
- 機能: ユーザー認証とJWTトークン発行
- 対応認証: 通常ログイン + 2FA対応
🛒 ショッピング機能
basket.ts
- ショッピングカート
- 機能: ユーザーのショッピングカート取得
-
主要機能:
-
retrieveBasket()
- カート内容取得(商品情報含む)
-
- 脆弱性: 他ユーザーのカートアクセス(basketAccessChallenge)
basketItems.ts
- カートアイテム管理
- 機能: カートへの商品追加・更新
-
主要機能:
-
addBasketItem()
- 商品追加 -
quantityCheckBeforeBasketItemAddition()
- 在庫確認 -
quantityCheckBeforeBasketItemUpdate()
- 更新前在庫確認
-
- 特徴: カスタムJSON解析処理
coupon.ts
- クーポン適用
- 機能: ショッピングカートへのクーポン適用
-
主要機能:
-
applyCoupon()
- クーポンコード検証と割引適用
-
- 処理: URLデコード → 割引計算 → カート更新
order.ts
- 注文処理
- 機能: 注文確定処理
-
主要機能:
placeOrder()
- 注文確定
orderHistory.ts
- 注文履歴
- 機能: 注文履歴の管理
-
主要機能:
-
orderHistory()
- ユーザー注文履歴 -
allOrders()
- 全注文一覧(経理権限) -
toggleDeliveryStatus()
- 配送状況更新
-
💳 決済・ウォレット
payment.ts
- 決済方法管理
- 機能: クレジットカード等の決済方法管理
-
主要機能:
-
getPaymentMethods()
- 決済方法一覧 -
getPaymentMethodById()
- 特定決済方法取得 -
delPaymentMethodById()
- 決済方法削除
-
wallet.ts
- デジタルウォレット
- 機能: ユーザーのデジタルウォレット管理
-
主要機能:
-
getWalletBalance()
- 残高取得 -
addWalletBalance()
- 残高追加
-
deluxe.ts
- デラックス会員
- 機能: デラックス会員へのアップグレード
-
主要機能:
-
upgradeToDeluxe()
- デラックス会員アップグレード -
deluxeMembershipStatus()
- 会員状況確認
-
- 対応決済: ウォレット決済、クレジットカード決済
🏪 商品・レビュー
search.ts
- 商品検索
- 機能: 商品検索機能
-
主要機能:
searchProducts()
- 商品検索
createProductReviews.ts
- レビュー作成
- 機能: 商品レビューの作成
- 脆弱性: 偽造レビューチャレンジ(forgedReviewChallenge)
showProductReviews.ts
- レビュー表示
- 機能: 商品レビューの表示
updateProductReviews.ts
- レビュー更新
- 機能: 商品レビューの更新
likeProductReviews.ts
- レビューいいね
- 機能: 商品レビューへのいいね機能
🔒 セキュリティ・認証
captcha.ts
- CAPTCHA
- 機能: 数式CAPTCHA生成・検証
-
主要機能:
-
captchas()
- CAPTCHA生成(3項演算式) -
verifyCaptcha()
- CAPTCHA検証
-
-
脆弱性:
eval()
使用(意図的)
imageCaptcha.ts
- 画像CAPTCHA
- 機能: 画像ベースのCAPTCHA
-
主要機能:
-
imageCaptchas()
- 画像CAPTCHA生成 -
verifyImageCaptcha()
- 画像CAPTCHA検証
-
securityQuestion.ts
- セキュリティ質問
- 機能: パスワードリセット用セキュリティ質問
resetPassword.ts
- パスワードリセット
- 機能: セキュリティ質問によるパスワードリセット
🏢 B2B・企業機能
b2bOrder.ts
- B2B注文
- 機能: 企業間取引の注文処理
-
脆弱性:
- RCE(Remote Code Execution)チャレンジ
-
vm.runInContext()
による任意コード実行 -
notevil
ライブラリ使用
🤖 AI・チャットボット
chatbot.ts
- チャットボット
- 機能: AI チャットボット機能
-
主要機能:
-
initializeChatbot()
- チャットボット初期化 -
process()
- チャット処理
-
-
特徴:
- 学習データのダウンロード機能
- JWT トークン処理
- ファイルアップロード対応
🌐 Web3・ブロックチェーン
checkKeys.ts
- 暗号鍵検証
- 機能: NFT・暗号通貨関連の鍵検証
-
主要機能:
-
checkKeys()
- 秘密鍵検証 -
nftUnlocked()
- NFT アンロック状況
-
- 技術: Ethereum ウォレット(ethers.js)
nftMint.ts
- NFT ミント
- 機能: NFT ミント機能
-
主要機能:
-
nftMintListener()
- NFT ミントリスナー -
walletNFTVerify()
- ウォレット NFT 検証
-
web3Wallet.ts
- Web3 ウォレット
- 機能: Web3 ウォレット連携
-
主要機能:
contractExploitListener()
- コントラクト脆弱性リスナー
📊 データ管理・エクスポート
dataExport.ts
- データエクスポート
- 機能: ユーザーデータのエクスポート(GDPR対応)
-
エクスポート内容:
- ユーザー情報(メールアドレスは母音マスク)
- 注文履歴
- レビュー履歴
- メモリー(写真)
dataErasure.ts
- データ削除
- 機能: ユーザーデータの削除(GDPR対応)
- 削除対象: ユーザーアカウント、関連データ
memory.ts
- メモリー機能
- 機能: ユーザーの写真・メモリー管理
-
主要機能:
-
addMemory()
- メモリー追加 -
getMemories()
- メモリー取得
-
🔧 システム・設定
appConfiguration.ts
- アプリ設定
- 機能: アプリケーション設定情報の取得
-
主要機能:
retrieveAppConfiguration()
- 設定情報返却
appVersion.ts
- バージョン情報
- 機能: アプリケーションバージョン情報
-
主要機能:
retrieveAppVersion()
- バージョン情報返却
angular.ts
- Angular クライアント
- 機能: Angular SPA のルーティング
-
主要機能:
serveAngularClient()
- SPA ファイル配信
metrics.ts
- メトリクス
- 機能: Prometheus メトリクス収集
- 脆弱性: メトリクス情報の露出
📁 ファイル管理
fileServer.ts
- ファイルサーバー
- 機能: 公開ファイルの配信
-
主要機能:
servePublicFiles()
- 公開ファイル配信
fileUpload.ts
- ファイルアップロード
- 機能: ファイルアップロード処理
- 対応形式: ZIP, XML, YAML
- セキュリティ: ファイルサイズ・タイプ制限
profileImageFileUpload.ts
- プロフィール画像アップロード
- 機能: プロフィール画像のファイルアップロード
profileImageUrlUpload.ts
- プロフィール画像URL
- 機能: URL からのプロフィール画像設定
🎯 チャレンジ・学習
continueCode.ts
- 継続コード
- 機能: チャレンジ進行状況の保存・復元
-
主要機能:
-
continueCode()
- 通常チャレンジ継続コード -
continueCodeFindIt()
- FindIt チャレンジ継続コード -
continueCodeFixIt()
- FixIt チャレンジ継続コード
-
vulnCodeSnippet.ts
- 脆弱性コードスニペット
- 機能: 脆弱性学習用コードスニペット
-
主要機能:
-
serveCodeSnippet()
- コードスニペット配信 -
checkVulnLines()
- 脆弱性行チェック
-
vulnCodeFixes.ts
- 脆弱性修正
- 機能: 脆弱性修正例の提供
-
主要機能:
-
serveCodeFixes()
- 修正例配信 -
checkCorrectFix()
- 修正内容チェック
-
🌍 国際化・地域化
languages.ts
- 言語設定
- 機能: 対応言語一覧の取得
-
主要機能:
getLanguageList()
- 言語リスト返却
countryMapping.ts
- 国別マッピング
- 機能: CTF 用国別マッピング設定
-
主要機能:
countryMapping()
- 国別設定取得
🎪 特殊機能・イースターエッグ
easterEgg.ts
- イースターエッグ
- 機能: 隠し機能・イースターエッグ
-
主要機能:
serveEasterEgg()
- イースターエッグ配信
premiumReward.ts
- プレミアム報酬
- 機能: プレミアムコンテンツの配信
-
主要機能:
servePremiumContent()
- プレミアムコンテンツ
privacyPolicyProof.ts
- プライバシーポリシー証明
- 機能: プライバシーポリシー関連の証明
-
主要機能:
servePrivacyPolicyProof()
- 証明書配信
🔗 ルート間の関係性
認証フロー
login.ts → currentUser.ts → authenticatedUsers.ts
↓
2fa.ts (オプション)
↓
各種認証必須エンドポイント
ショッピングフロー
search.ts → basket.ts → basketItems.ts → coupon.ts → order.ts → orderHistory.ts
↓
payment.ts / wallet.ts
レビューフロー
showProductReviews.ts → createProductReviews.ts → updateProductReviews.ts → likeProductReviews.ts
⚠️ セキュリティ上の注意点
意図的な脆弱性
-
RCE:
b2bOrder.ts
での任意コード実行 - 認証バイパス: 各種チャレンジでの認証回避
-
データ漏洩:
currentUser.ts
でのJSONP対応 -
アクセス制御:
basket.ts
での他ユーザーデータアクセス
セキュリティ機能
- レート制限: パスワードリセット、2FA
- 入力検証: ファイルアップロード、CAPTCHA
- 認証: JWT トークンベース認証
- 認可: ロールベースアクセス制御
🛠️ 開発者向け情報
共通パターン
- エラーハンドリング: try-catch + next(error)
-
認証:
security.isAuthorized()
ミドルウェア -
ユーザーID:
security.appendUserId()
で自動付与 -
チャレンジ:
challengeUtils.solveIf()
で条件チェック
依存関係
- Express: ルーティングフレームワーク
- Sequelize: ORM(SQLite/MySQL)
- MongoDB: NoSQL データベース
- JWT: 認証トークン
- Multer: ファイルアップロード
📈 パフォーマンス考慮事項
最適化ポイント
- データベースクエリ: include オプションでJOIN最適化
- ファイル処理: メモリ/ディスク使い分け
- キャッシュ: 静的コンテンツのキャッシュ戦略
- レート制限: API 乱用防止
このドキュメントは、OWASP Juice Shop の API ルート構成を理解し、効率的な開発・学習を支援するために作成されました。各ルートファイルの詳細な実装については、実際のソースコードを参照してください。