Search

PythonReactSEOPDF
GitHub Skill

file-storage

ファイルアップロード、S3、ファイルシステム操作を扱う際に使用。

TakumiOkayasu☆ 0 Repository stars0 Repository forks

Installation

Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.

View source ↗Guides

Skill instructions

File & Storage

📋 実行前チェック(必須)

このスキルを使うべきか?
  • ファイルアップロードを実装する?
  • S3連携を行う?
  • ファイル検証処理を実装する?
  • 署名付きURLを生成する?
前提条件
  • 許可するファイルタイプを定義したか?
  • ファイルサイズ上限を決定したか?
  • 保存先を決定したか?(ローカル/S3等)
禁止事項の確認
  • ユーザー入力のファイル名をそのまま使おうとしていないか?
  • 拡張子だけでファイルタイプを判断しようとしていないか?
  • サイズ制限なしでアップロードを許可しようとしていないか?
  • 機密ファイルをパブリックにしようとしていないか?

トリガー

  • ファイルアップロード実装時
  • S3連携時
  • ファイル検証処理時
  • 署名付きURL生成時

🚨 鉄則

ユーザーアップロードは信用しない。検証必須。


アップロード検証

// ⚠️ 必須チェック
const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/webp'];
const MAX_SIZE = 5 * 1024 * 1024; // 5MB

function validateUpload(file: File) {
  // MIMEタイプ(⚠️ 拡張子だけで判断しない)
  if (!ALLOWED_TYPES.includes(file.mimetype)) {
    throw new Error('Invalid file type');
  }
  
  // サイズ
  if (file.size > MAX_SIZE) {
    throw new Error('File too large');
  }
  
  // ファイル名サニタイズ
  const safeName = sanitizeFilename(file.originalname);
}

S3署名付きURL

import { getSignedUrl } from '@aws-sdk/s3-request-presigner';

const url = await getSignedUrl(s3Client, new GetObjectCommand({
  Bucket: 'my-bucket',
  Key: 'file.pdf'
}), { expiresIn: 3600 }); // 1時間

🚫 禁止事項まとめ

  • ユーザー入力ファイル名のそのまま使用
  • 拡張子だけでのファイルタイプ判断
  • サイズ制限なしのアップロード
  • 機密ファイルのパブリック公開

Examples

Read the usage examples in the source repository.

View source ↗

Source history

Indexed on
2026-01-20
Index updated
2026-01-26
Branch
main

Index and sync dates describe this directory. View the source repository for code history.

GitHub ↗

chat Comments (0)

chat_bubble_outline

No comments yet. Be the first to share your thoughts!