{}const=>[]async()letfn</>var
基礎キャリア開発

初心者向けAPIセキュリティ:トークン、レート制限、アクセス権—最もよく失敗する箇所🔌

APIセキュリティの3つの主要な柱を指先で、コード例を使用して分析します。開発者が最もよく間違えること、トークンの正しい扱い方、レート制限の設定方法、および他のユーザーがデータにアクセスできないようにする方法。これは、すべてのバックエンド開発者向けのチェックリストです。

К

Kodik

著者

2分で読める

API を書き、すべてが機能し、テストが合格し、フロントエンドがエンドポイントを引っ張ります。美しい。そして誰かがトークンを公開リポジトリに流し、ボットがサーバーを毎秒10,000リクエストで攻撃し始め、インターンが誤ってAPIを介して本番データベースを削除します。

APIセキュリティの世界へようこそ。すべてが支えられている3つの主要な柱と、開発者が最も頻繁につまずく場所を見てみましょう。

🎫 1. トークン:デジタルパス

これは何ですか?なぜですか?

トークンは、サーバーに「私は自分が誰であるかを伝える」という文字列です。トークンがない場合、保護されたAPIへのリクエストはすべて冷たい401 Unauthorizedを受け取ります。

最も人気のあるスキーム:

  • API Key — 見出しまたはクエリパラメータの単純なキー。便利ですが、粗いです。

  • JWT (JSON Web Token) — ペイロード、署名、有効期間を持つ自己充足型トークン。

  • OAuth 2.0 Access Token — 認証サーバーを介して発行され、サードパーティのアプリケーションに最適です。

どこにコーシャチャトがありますか?

❌ コード内のトークンの保存

ジャンルの定番。開発者はソースコードに直接const API_KEY = "sk-live-abc123..."を書き込みます。GitHubにプッシュします。ボットは30秒でキーを見つけます。こんにちは、リーク。

// ❌ これは敵だけが自分自身に対して行うことですconst API_KEY = "sk-live-abc123def456";

// ✅環境変数はすべてAPI_KEY = process.env.API_KEY;

❌ 有効期限のないトークン

トークンを発行すると、トークンは永遠に存在します。トークンが盗まれた場合、攻撃者は無期限にアクセスできます。expなしのJWTは、再発行できないアパートの鍵のようなものです。

❌ URL を介したトークンの転送

トークンがクエリパラメータ(?token=abc123)で飛行すると、サーバーログ、ブラウザ履歴、分析に格納されます。常にヘッダー Authorization を使用してください。

Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

❌ 回転なし

同じキーが何年も使用されています。ルールは簡単です。キーを定期的に変更し、access/refreshトークンのペアを使用します。

🔥 10万人以上の学生が参加中

理論を読むのに疲れた?
コーディングの時間だ!

Kodik — 実践でプログラミングを学ぶアプリ。AIメンター、インタラクティブなレッスン、実際のプロジェクト。

🤖 AI 24時間
🎓 修了証
💰 無料
🚀 始める
今日参加

🚦 2. レート制限:API のブレーキ

これは何ですか?なぜですか?

レート制限は、時間単位あたりのリクエスト数の制限です。レート制限がなければ、攻撃的なクライアント(またはボット)が1つだけでサービス全体を停止させる可能性があります。

どこにコーシャチャトがありますか?

❌ レート制限が全く設定されていない

驚くべきことに、多くのAPIは制限なしで本番環境にリリースされます。トラフィックが少ない間は問題ありません。しかし、最初のDDoS攻撃または無限ループのある不正なスクリプトで、サーバーがダウンします。

❌ IP のみの制限

論理的に聞こえますが、1 つの IP の背後にオフィス全体または VPN が隠れている可能性があります。攻撃者は、何千ものアドレスにリクエストを分散させることができます。トークン/ユーザーごとに制限することをお勧めします。

# Pythondef check_rate_limit (user_id) での Redis の例:
    key = f"rate:{user_id}"
    current = redis.incr(key)
    if current == 1:
        redis.expire(key, 60)  # ウィンドウ — 60 秒
    if current > 100:
        raise RateLimitExceeded()

❌ 有益な回答はありません

クライアントが制限に達したとき、何が起こったのかを理解する必要があります。429 Too Many Requestsと便利なヘッダーを返します。

HTTP/1.1 429 Too Many Requests
Retry-After: 30
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1700000000

❌ すべてのエンドポイントに同じ制限を適用する

GET /usersPOST /payments のリクエストは、負荷と重要度の点でまったく異なる操作です。重い操作や機密性の高い操作(支払い、メールの送信、レポートの生成)には、より厳しい制限を設ける必要があります。

👑 3. アクセス権:すべてが同じではない

これは何ですか?なぜですか?

ユーザーが認証されている場合でも(ユーザーが誰であるかを知っている場合でも)、ユーザーが何でもできるわけではありません。承認は、「あなたが許可されているのは何ですか?」という質問に答えます。

どこにコーシャチャトがありますか?

❌ フロントエンドでのみ権限を確認

「削除」ボタンは、通常のユーザーのUIでは非表示になっていますか?素晴らしい。しかし、curlを介して直接DELETE /api/users/42を送信すると、サーバーはリクエストを実行します。権限の確認はバックエンドで行う必要があります。常に。

// ❌ フロントエンド「保護」
{role === 'admin' && <button onClick={deleteUser}>Удалить</button>}

// ✅ バックエンドチェックは必須です
app.delete('/api/users/:id', (req, res) => {
  if (req.user.role !== 'admin') {
    return res.status(403).json({ error: 'Forbidden' });
  }
  // ...削除
});

❌ IDOR — Insecure Direct Object Reference

最も一般的な脆弱性の1つです。ユーザーは GET /api/orders/123 をリクエストし、注文を確認します。123 を 124 に変更すると、他のユーザーのものが表示されます。サーバーは、リソースが現在のユーザーに属しているかどうかを確認しません。

// ❌所有者を確認せずにURLからのIDを信頼する
app.get('/api/orders/:id', async (req, res) => {
  const order = await Order.findById(req.params.id);
  res.json(order); // 誰の注文でも
});

// ✅ 所有者で絞り込む
app.get('/api/orders/:id', async (req, res) => {
  const order = await Order.findOne({
    _id: req.params.id,
    userId: req.user.id  // 自分の注文のみ
  });
  if (!order) return res.status(404).json({ error: 'Not found' });
  res.json(order);
});

❌ トークンのスコープが広すぎる

OAuth を使用すると、制限された権限(スコープ)を持つトークンを発行できます。しかし、開発者はしばしばscope: *を要求します。つまり、すべてに完全にアクセスできます。このようなトークンが漏洩した場合、最大限の影響が生じます。最小特権の原則:特定のタスクに必要な権限を正確に付与します。

❌役割の分離がない

ユーザーには、「認証済み」と「未認証」の2種類があります。必要なものは:管理者、マネージャー、ユーザー、読み取り専用、サービス。適切なロールモデルは、過剰なエンジニアリングではなく、必要性です。

🚀 もっと深く知りたいですか?

プログラミングの道を歩み始めたばかりの方や、実践的なスキルを磨きたい方は、ぜひ試してみてください。 コディックこのアプリでは、プログラミングを実践を通じて学ぶことができます。単に理論を読むだけでなく、すぐにコードを書いて問題を解決することができます。

そして、私たちの Telegramコミュニティ — 開発、タスク分析、新しい資料に関する役立つ投稿が定期的に公開されています。すでに2000人以上の開発者がいます!

API がニュースに載るような開発者にならないでください。今すぐチェックリストを確認してください。 🔒

🎯先延ばしをやめよう

記事は気に入った?
実践の時間だ!

Kodikでは読むだけでなく、すぐにコードを書く。理論 + 実践 = 本当のスキル。

即座に実践
🧠AIがコードを説明
🏆修了証

登録不要 • カード不要