diff --git a/pkg/detectors/surveybot/surveybot.go b/pkg/detectors/surveybot/surveybot.go index a5260b38b9ec..90119f17b1e1 100644 --- a/pkg/detectors/surveybot/surveybot.go +++ b/pkg/detectors/surveybot/surveybot.go @@ -2,6 +2,7 @@ package surveybot import ( "context" + "encoding/json" "net/http" "regexp" "strings" @@ -29,6 +30,10 @@ func (s Scanner) Keywords() []string { return []string{"surveybot"} } +type response struct { + Surveys []interface{} `json:"surveys"` +} + // FromData will find and optionally verify SurveyBot secrets in a given set of bytes. func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (results []detectors.Result, err error) { dataStr := string(data) @@ -57,7 +62,14 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result if err == nil { defer res.Body.Close() if res.StatusCode >= 200 && res.StatusCode < 300 { - s1.Verified = true + var r response + if err := json.NewDecoder(res.Body).Decode(&r); err != nil { + s1.VerificationError = err + continue + } + if len(r.Surveys) > 0 { + s1.Verified = true + } } else { // This function will check false positives for common test words, but also it will make sure the key appears 'random' enough to be a real key. if detectors.IsKnownFalsePositive(resMatch, detectors.DefaultFalsePositives, true) {