tencent cloud

Cloud Object Storage

업로드 보안 제한

PDF
포커스 모드
폰트 크기
마지막 업데이트 시간: 2025-09-19 10:43:52
본 문서는 클라이언트 업로드 시 발생할 수 있는 일반적인 문제에 대한 해결 방안을 소개하며, 아래 예시는 직접 업로드 및 클라이언트 SDK 업로드 시나리오에 적용됩니다.
서버 측 코드 구현은 Node.js를 예로 들며, 더 많은 언어는 서버 서명 사례을 참고하십시오.

1. 업로드 크기 제한

시나리오 1: PutObject 업로드, sts 임시 키 정책의 condition에 numeric_less_than_equal 조건 설정을 통해 구현

condition: {
// 업로드 파일은 최대 5MB로 제한됨
'numeric_less_than_equal': {
'cos:content-length': 5 * 1024 * 1024
},
}

시나리오 2: PostObject 업로드, 서명 policy의 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 업로드, 서명 policy의 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에 직접 업로드합니다.


관련 문서




도움말 및 지원

문제 해결에 도움이 되었나요?

피드백