diff --git a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java index 0f279d8..f0b1065 100644 --- a/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java +++ b/src/main/java/org/gaul/s3proxy/S3ProxyHandler.java @@ -462,7 +462,7 @@ public class S3ProxyHandler { haveDate = false; } if (haveDate) { - isTimeSkewed(dateSkew); + isTimeSkewed(dateSkew, presignedUrl); } } @@ -2945,14 +2945,22 @@ public class S3ProxyHandler { } } - private void isTimeSkewed(long date) throws S3Exception { + private void isTimeSkewed( + long date, boolean isPresigned) throws S3Exception { if (date < 0) { throw new S3Exception(S3ErrorCode.ACCESS_DENIED); } long now = System.currentTimeMillis() / 1000; - if (now + maximumTimeSkew < date || now - maximumTimeSkew > date) { - logger.debug("time skewed {} {}", date, now); - throw new S3Exception(S3ErrorCode.REQUEST_TIME_TOO_SKEWED); + if (isPresigned) { + if (now + maximumTimeSkew < date) { + logger.debug("request is not valid yet {} {}", date, now); + throw new S3Exception(S3ErrorCode.ACCESS_DENIED); + } + } else { + if (now + maximumTimeSkew < date || now - maximumTimeSkew > date) { + logger.debug("time skewed {} {}", date, now); + throw new S3Exception(S3ErrorCode.REQUEST_TIME_TOO_SKEWED); + } } }