Skip to content

📚 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 ルート構成を理解し、効率的な開発・学習を支援するために作成されました。各ルートファイルの詳細な実装については、実際のソースコードを参照してください。