@@ -157,8 +157,11 @@ var getAuth = function (opt) {
157157 pathname . indexOf ( '/' ) !== 0 && ( pathname = '/' + pathname ) ;
158158 }
159159
160- // 如果有传入存储桶,那么签名默认加 Host 参与计算,避免跨桶访问
161- if ( ! headers . Host && ! headers . host && opt . Bucket && opt . Region ) headers . Host = opt . Bucket + '.cos.' + opt . Region + '.myqcloud.com' ;
160+ // ForceSignHost明确传入false才不加入host签名
161+ var forceSignHost = opt . ForceSignHost === false ? false : true ;
162+
163+ // 如果有传入存储桶且需要强制签名,那么签名默认加 Host 参与计算,避免跨桶访问
164+ if ( ! headers . Host && ! headers . host && opt . Bucket && opt . Region && forceSignHost ) headers . Host = opt . Bucket + '.cos.' + opt . Region + '.myqcloud.com' ;
162165
163166 if ( ! SecretId ) throw new Error ( 'missing param SecretId' ) ;
164167 if ( ! SecretKey ) throw new Error ( 'missing param SecretKey' ) ;
@@ -596,6 +599,7 @@ var apiWrapper = function (apiName, apiFn) {
596599 var formatResult = function ( result ) {
597600 if ( result && result . headers ) {
598601 result . headers [ 'x-cos-request-id' ] && ( result . RequestId = result . headers [ 'x-cos-request-id' ] ) ;
602+ result . headers [ 'x-ci-request-id' ] && ( result . RequestId = result . headers [ 'x-ci-request-id' ] ) ;
599603 result . headers [ 'x-cos-version-id' ] && ( result . VersionId = result . headers [ 'x-cos-version-id' ] ) ;
600604 result . headers [ 'x-cos-delete-marker' ] && ( result . DeleteMarker = result . headers [ 'x-cos-delete-marker' ] ) ;
601605 }
@@ -2442,7 +2446,8 @@ var defaultOptions = {
24422446 UploadQueueSize : 10000 ,
24432447 UploadAddMetaMd5 : false ,
24442448 UploadIdCacheLimit : 50 ,
2445- UseAccelerate : false
2449+ UseAccelerate : false ,
2450+ ForceSignHost : true // 默认将host加入签名计算,关闭后可能导致越权风险,建议保持为true
24462451} ;
24472452
24482453// 对外暴露的类
@@ -2485,7 +2490,7 @@ COS.util = {
24852490 json2xml : util . json2xml
24862491} ;
24872492COS . getAuthorization = util . getAuth ;
2488- COS . version = '2.0.0 ' ;
2493+ COS . version = '1.3.6 ' ;
24892494
24902495module . exports = COS ;
24912496
@@ -7866,12 +7871,13 @@ function getAuth(params) {
78667871 */
78677872function getObjectUrl ( params , callback ) {
78687873 var self = this ;
7874+ var useAccelerate = params . UseAccelerate === undefined ? self . options . UseAccelerate : params . UseAccelerate ;
78697875 var url = getUrl ( {
78707876 ForcePathStyle : self . options . ForcePathStyle ,
78717877 protocol : params . Protocol || self . options . Protocol ,
78727878 domain : params . Domain || self . options . Domain ,
78737879 bucket : params . Bucket ,
7874- region : params . Region ,
7880+ region : useAccelerate ? 'accelerate' : params . Region ,
78757881 object : params . Key
78767882 } ) ;
78777883
@@ -7891,7 +7897,7 @@ function getObjectUrl(params, callback) {
78917897 }
78927898
78937899 // 签名加上 Host,避免跨桶访问
7894- var SignHost = getSignHost . call ( this , { Bucket : params . Bucket , Region : params . Region , Url : url } ) ;
7900+ var SignHost = getSignHost . call ( this , { Bucket : params . Bucket , Region : params . Region , UseAccelerate : params . UseAccelerate , Url : url } ) ;
78957901 var AuthData = getAuthorizationAsync . call ( this , {
78967902 Action : ( params . Method || '' ) . toUpperCase ( ) === 'PUT' ? 'name/cos:PutObject' : 'name/cos:GetObject' ,
78977903 Bucket : params . Bucket || '' ,
@@ -7901,7 +7907,8 @@ function getObjectUrl(params, callback) {
79017907 Expires : params . Expires ,
79027908 Headers : params . Headers ,
79037909 Query : params . Query ,
7904- SignHost : SignHost
7910+ SignHost : SignHost ,
7911+ ForceSignHost : params . ForceSignHost === false ? false : self . options . ForceSignHost // getObjectUrl支持传参ForceSignHost
79057912 } , function ( err , AuthData ) {
79067913 if ( ! callback ) return ;
79077914 if ( err ) {
@@ -8051,12 +8058,13 @@ function getUrl(params) {
80518058
80528059var getSignHost = function ( opt ) {
80538060 if ( ! opt . Bucket || ! opt . Region ) return '' ;
8061+ var useAccelerate = opt . UseAccelerate === undefined ? this . options . UseAccelerate : opt . UseAccelerate ;
80548062 var url = opt . Url || getUrl ( {
80558063 ForcePathStyle : this . options . ForcePathStyle ,
80568064 protocol : this . options . Protocol ,
80578065 domain : this . options . Domain ,
80588066 bucket : opt . Bucket ,
8059- region : this . options . UseAccelerate ? 'accelerate' : opt . Region
8067+ region : useAccelerate ? 'accelerate' : opt . Region
80608068 } ) ;
80618069 var urlHost = url . replace ( / ^ h t t p s ? : \/ \/ ( [ ^ / ] + ) ( \/ .* ) ? $ / , '$1' ) ;
80628070 var standardHostReg = new RegExp ( '^([a-z\\d-]+-\\d+\\.)?(cos|cosv6|ci|pic)\\.([a-z\\d-]+)\\.myqcloud\\.com$' ) ;
@@ -8072,9 +8080,11 @@ function getAuthorizationAsync(params, callback) {
80728080 ( v === '' || [ 'content-type' , 'cache-control' , 'expires' ] . indexOf ( k . toLowerCase ( ) ) > - 1 ) && delete headers [ k ] ;
80738081 if ( k . toLowerCase ( ) === 'host' ) headerHost = v ;
80748082 } ) ;
8083+ // ForceSignHost明确传入false才不加入host签名
8084+ var forceSignHost = params . ForceSignHost === false ? false : true ;
80758085
80768086 // Host 加入签名计算
8077- if ( ! headerHost && params . SignHost ) headers . Host = params . SignHost ;
8087+ if ( ! headerHost && params . SignHost && forceSignHost ) headers . Host = params . SignHost ;
80788088
80798089 // 获取凭证的回调,避免用户 callback 多次
80808090 var cbDone = false ;
@@ -8145,7 +8155,8 @@ function getAuthorizationAsync(params, callback) {
81458155 Expires : params . Expires ,
81468156 UseRawKey : self . options . UseRawKey ,
81478157 SystemClockOffset : self . options . SystemClockOffset ,
8148- KeyTime : KeyTime
8158+ KeyTime : KeyTime ,
8159+ ForceSignHost : self . options . ForceSignHost
81498160 } ) ;
81508161 var AuthData = {
81518162 Authorization : Authorization ,
@@ -8202,7 +8213,8 @@ function getAuthorizationAsync(params, callback) {
82028213 Query : params . Query ,
82038214 Headers : headers ,
82048215 Scope : Scope ,
8205- SystemClockOffset : self . options . SystemClockOffset
8216+ SystemClockOffset : self . options . SystemClockOffset ,
8217+ ForceSignHost : self . options . ForceSignHost
82068218 } , function ( AuthData ) {
82078219 if ( typeof AuthData === 'string' ) AuthData = { Authorization : AuthData } ;
82088220 var AuthError = checkAuthError ( AuthData ) ;
@@ -8245,7 +8257,8 @@ function getAuthorizationAsync(params, callback) {
82458257 Headers : headers ,
82468258 Expires : params . Expires ,
82478259 UseRawKey : self . options . UseRawKey ,
8248- SystemClockOffset : self . options . SystemClockOffset
8260+ SystemClockOffset : self . options . SystemClockOffset ,
8261+ ForceSignHost : self . options . ForceSignHost
82498262 } ) ;
82508263 var AuthData = {
82518264 Authorization : Authorization ,
@@ -8318,7 +8331,8 @@ function submitRequest(params, callback) {
83188331 SignHost : SignHost ,
83198332 Action : params . Action ,
83208333 ResourceKey : params . ResourceKey ,
8321- Scope : params . Scope
8334+ Scope : params . Scope ,
8335+ ForceSignHost : self . options . ForceSignHost
83228336 } , function ( err , AuthData ) {
83238337 if ( err ) {
83248338 callback ( err ) ;
0 commit comments