tencent cloud

Cloud Object Storage

DokumentasiCloud Object Storage

アップロードセキュリティ制限

Unduh
Mode fokus
Ukuran font
Terakhir diperbarui: 2025-09-19 10:43:52
Diterjemahkan oleh AI
本ドキュメントでは、クライアントからのアップロードでよくある問題への対処法について説明します。以下の例は、ダイレクトアップロードおよびクライアントSDKを使用したアップロードシナリオに適用されます。
サーバーサイドのコード実装はNode.jsを例としています。他の言語については、サーバーサイドでの署名実践をご参照ください。

1.アップロードサイズの制限

シナリオ1:PutObjectでのアップロード、sts 一時キーのポリシーにあるconditionで、 numeric_less_than_equal 条件を設定して実現します</p3>

condition: {
// アップロードファイルを5MB未満に制限
'numeric_less_than_equal': {
'cos:content-length': 5 * 1024 * 1024
},
}

シナリオ2:PostObject でのアップロード、署名ポリシーのconditions でcontent-length-range条件を設定して実現します

var policy = JSON.stringify({
...
conditions: [
['content-length-range', 1, 5 * 1024 * 1024], // アップロードファイルサイズの範囲を制限可能(例:1~5MB)
],
});
上記いずれの例では、5MBを超えるファイルのアップロードに対してエラー403が返されます。

2.アップロードファイルタイプの制限

シナリオ1:PutObjectでのアップロード、sts 一時キーポリシーにあるconditionでstring_like条件を設定して実現します

condition: {
// アップロードファイルのcontent-typeを画像タイプに制限
'string_like': {
'cos:content-type': 'image/*'
}
}

シナリオ2:PostObjectでのアップロード、署名ポリシーのconditionsで$Content-Type条件を設定して実現します

var policy = JSON.stringify({
...
conditions: [
// アップロードファイルのcontent-typeを画像タイプに制限
['starts-with', '$Content-Type', 'image/*'],
],
});
上記いずれの例では、画像ファイル以外のアップロードに対してエラー403が返されます。

3.ファイルの上書きアップロード防止

Webまたはクライアントからのアップロードシナリオでは、ファイル名がクライアントサイドによって指定される場合、ファイルが上書きされるリスが存在します。
ファイルの上書きを防止するための重要な対策は、サーバーサイドでアップロードパスを決定することです。
/** サーバーサイドでアップロードパスを生成する例 nodejs **/

// フロントエンドから渡されたファイルのサフィックス ext を取得
const ext = req.query.ext;
const cosKey = generateCosKey(ext);

function generateCosKey(ext) {
const date = new Date();
const m = date.getMonth() + 1;
const ymd = `${date.getFullYear()}${m < 10 ? `0${m}` : m}${date.getDate()}`;
const r = ('000000' + Math.random() * 1000000).slice(-6);
const cosKey = `file/${ymd}/${ymd}_${r}${ext ? `.${ext}` : ''}`;
return cosKey;
};

実行プロセス

1. クライアントサイドでファイルを選択すると、クライアントはサフィックスをサーバーサイドに送信します。
2. サーバーサイドはサフィックスに基づいて、日時を含むランダムなCOSファイルパスを生成し、対応する署名を計算して、URLと署名情報をクライアントに返します。
3. クライアントはPUTまたはPOSTリクエストを使用して、ファイルをCOSへダイレクトアップロードします。


関連ドキュメント




Bantuan dan Dukungan

Apakah halaman ini membantu?

masukan