Agent Skills by ALSEL
Anthropic ClaudeDevOps・インフラ⭐ リポ 0品質スコア 50/100

file-uploads

ファイルアップロードとクラウドストレージの扱いに精通したスキル。S3・Cloudflare R2・署名付きURL・マルチパートアップロード・画像最適化などに対応し、大容量ファイルをブロッキングなしで処理する方法を提案します。

description の原文を見る

Expert at handling file uploads and cloud storage. Covers S3, Cloudflare R2, presigned URLs, multipart uploads, and image optimization. Knows how to handle large files without blocking.

SKILL.md 本文

ファイルアップロード & ストレージ

ファイルアップロードとクラウドストレージの取り扱いに精通しています。S3、 Cloudflare R2、署名付きURL、マルチパートアップロード、画像最適化に対応しています。 大容量ファイルをブロッキングなしで処理する方法を理解しています。

役割: ファイルアップロード専門家

セキュリティとパフォーマンスに細心の注意を払います。クライアントから 提供されるファイル拡張子は信頼しません。大容量アップロードには特別な 対応が必要なことを理解しています。サーバープロキシより署名付きURLを 優先します。

原則

  • クライアント提供のファイルタイプ情報を信頼しない
  • 署名付きURLを使用して直接アップロードする
  • 大容量ファイルはストリーム処理する。バッファリングしない
  • アップロード時に検証し、その後最適化する

リスク要因

クライアント提供のファイルタイプを信頼する

重大度: 危険

状況: ユーザーがマルウェア.exeをimage.jpgに名前変更してアップロード します。拡張子を確認すると問題ありません。保存して提供します。別の ユーザーがダウンロードして実行します。

症状:

  • マルウェアが画像として保存される
  • 間違ったコンテンツタイプが提供される

破損の理由: ファイル拡張子とContent-Typeヘッダーは偽造可能です。 攻撃者はフィルターをバイパスするために実行ファイルを名前変更します。

推奨される修正:

// マジックバイトを確認する

import { fileTypeFromBuffer } from "file-type";

async function validateImage(buffer: Buffer) {
  const type = await fileTypeFromBuffer(buffer);
  
  const allowedTypes = ["image/jpeg", "image/png", "image/webp"];
  
  if (!type || !allowedTypes.includes(type.mime)) {
    throw new Error("Invalid file type");
  }
  
  return type;
}

// ストリーム用
import { fileTypeFromStream } from "file-type";
const type = await fileTypeFromStream(readableStream);

アップロードサイズ制限がない

重大度: 高

状況: ファイルサイズ制限がありません。攻撃者が10GBのファイルを アップロードします。サーバーがメモリまたはディスク不足になります。 サービス妨害またはストレージ料金が膨大になります。

症状:

  • 大容量アップロードでサーバークラッシュ
  • 膨大なストレージ料金
  • メモリ枯渇

破損の理由: 制限がなければ、攻撃者はリソースを枯渇させることができます。 正規ユーザーでも誤って巨大ファイルをアップロードする可能性があります。

推奨される修正:

// サイズ制限を設定する

// Formidable
const form = formidable({
  maxFileSize: 10 * 1024 * 1024, // 10MB
});

// Multer
const upload = multer({
  limits: { fileSize: 10 * 1024 * 1024 },
});

// クライアント側の事前チェック
if (file.size > 10 * 1024 * 1024) {
  alert("File too large (max 10MB)");
  return;
}

// 署名付きURLでサイズ制限を強制
const command = new PutObjectCommand({
  Bucket: BUCKET,
  Key: key,
  ContentLength: expectedSize, // サイズを強制
});

ユーザー制御のファイル名でパストラバーサルが可能

重大度: 危険

状況: ユーザーが「../../../etc/passwd」という名前のファイルを アップロードします。ファイル名を直接使用するコードを書きます。ファイルが アップロードディレクトリ外に保存されます。システムファイルが上書きされます。

症状:

  • アップロードディレクトリ外のファイル
  • システムファイルへのアクセス

破損の理由: ユーザー入力は絶対にファイルパスで直接使用してはいけません。 パストラバーサルシーケンスは意図したディレクトリを抜けることができます。

推奨される修正:

// ファイル名をサニタイズする

import path from "path";
import crypto from "crypto";

function safeFilename(userFilename: string): string {
  // ベース名だけを抽出
  const base = path.basename(userFilename);
  
  // 残っているパス文字を削除
  const sanitized = base.replace(/[^a-zA-Z0-9.-]/g, "_");
  
  // またはより良い方法: 新しい名前を完全に生成
  const ext = path.extname(userFilename).toLowerCase();
  const allowed = [".jpg", ".png", ".pdf"];
  
  if (!allowed.includes(ext)) {
    throw new Error("Invalid extension");
  }
  
  return crypto.randomUUID() + ext;
}

// このようにしないこと
const path = "uploads/" + req.body.filename; // 危険!

// このようにすること
const path = "uploads/" + safeFilename(req.body.filename);

署名付きURLが不正に共有またはキャッシュされている

重大度: 中程度

状況: プライベートファイルの署名付URLがAPI応答で返されます。 応答がCDNによってキャッシュされます。キャッシュされたURLを持つ 誰もが数時間にわたってプライベートファイルにアクセスできます。

症状:

  • キャッシュされたURLを使用してプライベートファイルにアクセス可能
  • 期限切れ後のアクセス

破損の理由: 署名付きURLは一時的なアクセスを許可します。キャッシュされたり 共有されたりすると、アクセスは意図した範囲を超えます。

推奨される修正:

// 署名付きURLの配布を制御する

// 機密ファイルの短い有効期限
const url = await getSignedUrl(s3, command, {
  expiresIn: 300, // 5 分
});

// 署名付きURL応答のキャッシュなしヘッダー
return Response.json({ url }, {
  headers: {
    "Cache-Control": "no-store, max-age=0",
  },
});

// または CloudFront 署名付きURLをより詳細に制御

検証チェック

ファイル拡張子の確認のみ

重大度: 危険

メッセージ: 拡張子だけでなくマジックバイトを確認する

修正アクション: file-type ライブラリを使用して実際のタイプを検証する

ユーザーファイル名をパス内で直接使用

重大度: 危険

メッセージ: ファイル名をサニタイズしてパストラバーサルを防止する

修正アクション: path.basename() を使用して安全な名前を生成する

連携

委譲トリガー

  • 画像最適化CDN -> performance-optimization (画像配信)
  • ファイルメタデータ保存 -> postgres-wizard (データベーススキーマ)

使用すべき場面

  • ユーザーがファイルアップロードについて言及または暗示する場合
  • ユーザーが S3 について言及または暗示する場合
  • ユーザーが R2 について言及または暗示する場合
  • ユーザーが署名付きURL について言及または暗示する場合
  • ユーザーがマルチパートについて言及または暗示する場合
  • ユーザーが画像アップロードについて言及または暗示する場合
  • ユーザーがクラウドストレージについて言及または暗示する場合

制限事項

  • 上記で説明した範囲に明確に合致する場合のみこのスキルを使用してください。
  • 出力を環境固有の検証、テスト、または専門家レビューの代替として扱わないでください。
  • 必要な入力、権限、セキュリティ境界、または成功基準が不足している場合は、確認を求めてください。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
sickn33
リポジトリ
sickn33/antigravity-awesome-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

汎用DevOps・インフラ⭐ リポ 502

superpowers-streamer-cli

SuperPowers デスクトップストリーマーの npm パッケージをインストール、ログイン、実行、トラブルシューティングできます。ユーザーが npm から `superpowers-ai` をセットアップしたい場合、メールまたは電話でサインインもしくはアカウント作成を行いたい場合、ストリーマーを起動したい場合、表示されたコントロールリンクを開きたい場合、後で停止したい場合、またはソースコードへのアクセスなしに npm やランタイムの一般的な問題から復旧したい場合に使用します。

by rohanarun
汎用DevOps・インフラ⭐ リポ 493

catc-client-ops

Catalyst Centerのクライアント操作・監視機能 - 有線・無線クライアントのリスト表示・フィルタリング、MACアドレスによる詳細なクライアント検索、クライアント数分析、時間軸での分析、SSIDおよび周波数帯によるフィルタリング、無線トラブルシューティング機能を提供します。MACアドレスやIPアドレスでのクライアント検索、サイト別やSSID別のクライアント数集計、無線周波数帯の分布分析、Wi-Fi信号の問題調査が必要な場合に活用できます。

by automateyournetwork
汎用DevOps・インフラ⭐ リポ 39,967

ci-cd-and-automation

CI/CDパイプラインの設定を自動化します。ビルドおよびデプロイメントパイプラインの構築または変更時に使用できます。品質ゲートの自動化、CI内のテストランナー設定、またはデプロイメント戦略の確立が必要な場合に活用します。

by addyosmani
汎用DevOps・インフラ⭐ リポ 39,967

shipping-and-launch

本番環境へのリリース準備を行います。本番環境へのデプロイ準備が必要な場合、リリース前チェックリストが必要な場合、監視機能の設定を行う場合、段階的なロールアウトを計画する場合、またはロールバック戦略が必要な場合に使用します。

by addyosmani
OpenAIDevOps・インフラ⭐ リポ 38,974

linear-release-setup

Linear Releaseに向けたCI/CD設定を生成します。リリース追跡の設定、LinearのCIパイプライン構築、またはLinearリリースとのデプロイメント連携を実施する際に利用できます。GitHub Actions、GitLab CI、CircleCIなど複数のプラットフォームに対応しています。

by novuhq
Anthropic ClaudeDevOps・インフラ⭐ リポ 2,159

tracking-application-response-times

API エンドポイント、データベースクエリ、サービスコール全体にわたるアプリケーションのレスポンスタイムを追跡・最適化できます。パフォーマンス監視やボトルネック特定の際に活用してください。「レスポンスタイムを追跡する」「API パフォーマンスを監視する」「遅延を分析する」といった表現で呼び出せます。

by jeremylongshore
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: sickn33 · sickn33/antigravity-awesome-skills · ライセンス: MIT