mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-18 13:55:27 +00:00
set content_length as len(body) if response ContentLength is -1 (#2407)
* set content_length as len(body) if response ContentLength is -1 * move content-length calculation to utils * adding basic tests Co-authored-by: Mzack9999 <mzack9999@protonmail.com>
This commit is contained in:
parent
92ff305e74
commit
928f082109
@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/projectdiscovery/nuclei/v2/pkg/output"
|
"github.com/projectdiscovery/nuclei/v2/pkg/output"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/helpers/responsehighlighter"
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/helpers/responsehighlighter"
|
||||||
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/utils"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/types"
|
"github.com/projectdiscovery/nuclei/v2/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -121,7 +122,6 @@ func (request *Request) responseToDSLMap(resp *http.Response, host, matched, raw
|
|||||||
data["response"] = rawResp
|
data["response"] = rawResp
|
||||||
data["status_code"] = resp.StatusCode
|
data["status_code"] = resp.StatusCode
|
||||||
data["body"] = body
|
data["body"] = body
|
||||||
data["content_length"] = resp.ContentLength
|
|
||||||
data["all_headers"] = headers
|
data["all_headers"] = headers
|
||||||
data["header"] = headers
|
data["header"] = headers
|
||||||
data["duration"] = duration.Seconds()
|
data["duration"] = duration.Seconds()
|
||||||
@ -129,6 +129,8 @@ func (request *Request) responseToDSLMap(resp *http.Response, host, matched, raw
|
|||||||
data["template-info"] = request.options.TemplateInfo
|
data["template-info"] = request.options.TemplateInfo
|
||||||
data["template-path"] = request.options.TemplatePath
|
data["template-path"] = request.options.TemplatePath
|
||||||
|
|
||||||
|
data["content_length"] = utils.CalculateContentLength(resp.ContentLength, int64(len(body)))
|
||||||
|
|
||||||
if request.StopAtFirstMatch || request.options.StopAtFirstMatch {
|
if request.StopAtFirstMatch || request.options.StopAtFirstMatch {
|
||||||
data["stop-at-first-match"] = true
|
data["stop-at-first-match"] = true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/projectdiscovery/nuclei/v2/pkg/output"
|
"github.com/projectdiscovery/nuclei/v2/pkg/output"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/helpers/responsehighlighter"
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/helpers/responsehighlighter"
|
||||||
|
"github.com/projectdiscovery/nuclei/v2/pkg/protocols/utils"
|
||||||
"github.com/projectdiscovery/nuclei/v2/pkg/types"
|
"github.com/projectdiscovery/nuclei/v2/pkg/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -112,7 +113,6 @@ func (request *Request) responseToDSLMap(resp *http.Response, host, matched, raw
|
|||||||
data["matched"] = matched
|
data["matched"] = matched
|
||||||
data["request"] = rawReq
|
data["request"] = rawReq
|
||||||
data["response"] = rawResp
|
data["response"] = rawResp
|
||||||
data["content_length"] = resp.ContentLength
|
|
||||||
data["status_code"] = resp.StatusCode
|
data["status_code"] = resp.StatusCode
|
||||||
data["body"] = body
|
data["body"] = body
|
||||||
data["type"] = request.Type().String()
|
data["type"] = request.Type().String()
|
||||||
@ -121,6 +121,8 @@ func (request *Request) responseToDSLMap(resp *http.Response, host, matched, raw
|
|||||||
data["template-id"] = request.options.TemplateID
|
data["template-id"] = request.options.TemplateID
|
||||||
data["template-info"] = request.options.TemplateInfo
|
data["template-info"] = request.options.TemplateInfo
|
||||||
data["template-path"] = request.options.TemplatePath
|
data["template-path"] = request.options.TemplatePath
|
||||||
|
data["content_length"] = utils.CalculateContentLength(resp.ContentLength, int64(len(body)))
|
||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,3 +38,11 @@ func AddConfiguredClientCertToRequest(tlsConfig *tls.Config, options *types.Opti
|
|||||||
}
|
}
|
||||||
return tlsConfig, nil
|
return tlsConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CalculateContentLength calculates content-length of the http response
|
||||||
|
func CalculateContentLength(contentLength, bodyLength int64) int64 {
|
||||||
|
if contentLength > -1 {
|
||||||
|
return contentLength
|
||||||
|
}
|
||||||
|
return bodyLength
|
||||||
|
}
|
||||||
|
|||||||
27
v2/pkg/protocols/utils/utils_test.go
Normal file
27
v2/pkg/protocols/utils/utils_test.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCalculateContentLength(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
expected int64
|
||||||
|
contentLengthHeader int64
|
||||||
|
bodyLength int64
|
||||||
|
}{
|
||||||
|
{"content-length-header", 10, 10, 10},
|
||||||
|
{"content-length-header-with-body-length", 10, 10, 1000},
|
||||||
|
{"no-content-length-header-with-body-length", 1000, -1, 1000},
|
||||||
|
{"content-length-header-without-body-length", 10, 10, -1},
|
||||||
|
}
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
got := CalculateContentLength(test.contentLengthHeader, test.bodyLength)
|
||||||
|
require.Equal(t, test.expected, got)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user