diff --git a/pkg/protocols/http/http.go b/pkg/protocols/http/http.go index 51e5a36dfc..645b61142b 100644 --- a/pkg/protocols/http/http.go +++ b/pkg/protocols/http/http.go @@ -19,6 +19,7 @@ import ( httputil "github.com/projectdiscovery/nuclei/v3/pkg/protocols/utils/http" "github.com/projectdiscovery/rawhttp" "github.com/projectdiscovery/retryablehttp-go" + "github.com/projectdiscovery/utils/env" fileutil "github.com/projectdiscovery/utils/file" ) @@ -416,7 +417,11 @@ func (request *Request) Compile(options *protocols.ExecutorOptions) error { request.Threads = protocolstate.GuardThreadsOrDefault(request.Threads) } // if we have payloads, adjust threads if none specified - request.Threads = options.GetThreadsForNPayloadRequests(request.Requests(), request.Threads) + // We only do this in case we have more payload requests than the + // specified concurrency threshold. + if request.generator.NewIterator().Total() > PayloadAutoConcurrencyThreshold { + request.Threads = options.GetThreadsForNPayloadRequests(request.Requests(), request.Threads) + } } return nil @@ -443,3 +448,11 @@ func (request *Request) Requests() int { } return len(request.Path) } + +// PayloadAutoConcurrencyThreshold is the threshold for auto adjusting concurrency +// for payloads in a template. +var PayloadAutoConcurrencyThreshold int + +func init() { + PayloadAutoConcurrencyThreshold = env.GetEnvOrDefault[int]("NUCLEI_PAYLOAD_AUTO_CONCURRENCY_THRESHOLD", 100) +}