Skip to content

Commit ee4f7a3

Browse files
added 20kb limit for put bucket policy
Issue : CLDSRV-700
1 parent a283aa0 commit ee4f7a3

3 files changed

Lines changed: 17 additions & 0 deletions

File tree

constants.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ const constants = {
8989
// Maximum HTTP headers size allowed
9090
maxHttpHeadersSize: 14122,
9191

92+
// AWS sets the maximum size for bucket policies to 20 KB
93+
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html
94+
bucketPolicyMaxBytesSize: 20 * 1024,
95+
9296
// hex digest of sha256 hash of empty string:
9397
emptyStringHash: crypto.createHash('sha256')
9498
.update('', 'binary').digest('hex'),

lib/Config.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1698,6 +1698,13 @@ class Config extends EventEmitter {
16981698
}
16991699

17001700
this.supportedLifecycleRules = parseSupportedLifecycleRules(config.supportedLifecycleRules);
1701+
1702+
this.bucketPolicyMaxBytesSize = config.bucketPolicyMaxBytesSize ||
1703+
constants.bucketPolicyMaxBytesSize;
1704+
assert(Number.isInteger(this.bucketPolicyMaxBytesSize) &&
1705+
this.bucketPolicyMaxBytesSize > 0,
1706+
'bad config: bucketPolicyMaxBytesSize must be a positive integer');
1707+
17011708
return config;
17021709
}
17031710

lib/api/bucketPutPolicy.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ const metadata = require('../metadata/wrapper');
55
const { standardMetadataValidateBucket } = require('../metadata/metadataUtils');
66
const { validatePolicyResource, validatePolicyConditions } =
77
require('./apiUtils/authorization/permissionChecks');
8+
const constants = require('../../constants');
9+
const { config } = require('../Config.js');
810
const { BucketPolicy } = models;
911

1012
/**
@@ -31,6 +33,10 @@ function _checkNotImplementedPolicy(policyString) {
3133
function bucketPutPolicy(authInfo, request, log, callback) {
3234
log.debug('processing request', { method: 'bucketPutPolicy' });
3335

36+
if (request.post && Buffer.byteLength(request.post, 'utf8') > constants.bucketPolicyMaxBytesSize) {
37+
return callback(errorInstances.MalformedPolicy);
38+
}
39+
3440
const { bucketName } = request;
3541
const metadataValParams = {
3642
authInfo,

0 commit comments

Comments
 (0)