55 "fmt"
66 "html/template"
77 "net/http"
8+ "net/url"
89 "strings"
910 "sync/atomic"
1011 "time"
@@ -103,8 +104,8 @@ func New(options *Options) (*DASTServer, error) {
103104 builder .WriteString (" (with token)" )
104105 }
105106 gologger .Info ().Msgf ("%s" , builder .String ())
106- gologger .Info ().Msgf ("Connection URL: %s" , server .buildConnectionURL ( ))
107- gologger .Info ().Msgf ("Stats UI URL: %s" , server .buildStatsURL ( ))
107+ gologger .Info ().Msgf ("Connection URL: %s" , server .buildURL ( "/requests" ))
108+ gologger .Info ().Msgf ("Stats UI URL: %s" , server .buildURL ( "/stats" ))
108109
109110 return server , nil
110111}
@@ -118,7 +119,7 @@ func NewStatsServer(fuzzStatsDB *stats.Tracker) (*DASTServer, error) {
118119 },
119120 }
120121 server .setupHandlers (true )
121- gologger .Info ().Msgf ("Stats UI URL: %s" , server .buildStatsURL ( ))
122+ gologger .Info ().Msgf ("Stats UI URL: %s" , server .buildURL ( "/stats" ))
122123
123124 return server , nil
124125}
@@ -129,20 +130,20 @@ func (s *DASTServer) Close() {
129130 s .tasksPool .StopAndWaitFor (1 * time .Minute )
130131}
131132
132- func (s * DASTServer ) buildConnectionURL ( ) string {
133- url := fmt . Sprintf ( "http://%s/requests" , s . options . Address )
133+ func (s * DASTServer ) buildURL ( endpoint string ) string {
134+ values := make (url. Values )
134135 if s .options .Token != "" {
135- url += "? token=" + s .options .Token
136+ values . Set ( " token" , s .options .Token )
136137 }
137- return url
138- }
139138
140- func (s * DASTServer ) buildStatsURL () string {
141- url := fmt .Sprintf ("http://%s/stats" , s .options .Address )
142- if s .options .Token != "" {
143- url += "?token=" + s .options .Token
139+ // Use url.URL struct to safely construct the URL
140+ u := & url.URL {
141+ Scheme : "http" ,
142+ Host : s .options .Address ,
143+ Path : endpoint ,
144+ RawQuery : values .Encode (),
144145 }
145- return url
146+ return u . String ()
146147}
147148
148149func (s * DASTServer ) setupHandlers (onlyStats bool ) {
@@ -186,13 +187,13 @@ func (s *DASTServer) Start() error {
186187}
187188
188189// PostReuestsHandlerRequest is the request body for the /requests POST handler.
189- type PostReuestsHandlerRequest struct {
190+ type PostRequestsHandlerRequest struct {
190191 RawHTTP string `json:"raw_http"`
191192 URL string `json:"url"`
192193}
193194
194195func (s * DASTServer ) handleRequest (c echo.Context ) error {
195- var req PostReuestsHandlerRequest
196+ var req PostRequestsHandlerRequest
196197 if err := c .Bind (& req ); err != nil {
197198 fmt .Printf ("Error binding request: %s\n " , err )
198199 return err
@@ -246,7 +247,7 @@ func (s *DASTServer) getStats() (StatsResponse, error) {
246247 DASTServerInfo : DASTServerInfo {
247248 NucleiVersion : config .Version ,
248249 NucleiTemplateVersion : cfg .TemplateVersion ,
249- NucleiDastServerAPI : s .buildConnectionURL ( ),
250+ NucleiDastServerAPI : s .buildURL ( "/requests" ),
250251 ServerAuthEnabled : s .options .Token != "" ,
251252 },
252253 DASTScanStartTime : s .startTime ,
0 commit comments