(uri string, resp ResponseInfo)
| 656 | } |
| 657 | |
| 658 | func inferFrontendHints(uri string, resp ResponseInfo) []string { |
| 659 | var hints []string |
| 660 | parsed, _ := url.Parse(uri) |
| 661 | host := "" |
| 662 | if parsed != nil { |
| 663 | host = strings.ToLower(parsed.Host) |
| 664 | } |
| 665 | server := strings.ToLower(resp.server) |
| 666 | via := strings.ToLower(resp.via) |
| 667 | xcache := strings.ToLower(resp.xCache) |
| 668 | |
| 669 | addHint := func(h string) { |
| 670 | for _, existing := range hints { |
| 671 | if existing == h { |
| 672 | return |
| 673 | } |
| 674 | } |
| 675 | hints = append(hints, h) |
| 676 | } |
| 677 | |
| 678 | if strings.Contains(host, "elb.amazonaws.com") || strings.Contains(server, "awselb") { |
| 679 | addHint("AWS ELB/ALB") |
| 680 | } |
| 681 | if strings.Contains(via, "cloudfront") || strings.Contains(xcache, "cloudfront") { |
| 682 | addHint("CloudFront") |
| 683 | } |
| 684 | if resp.cfRay != "" || strings.Contains(server, "cloudflare") { |
| 685 | addHint("Cloudflare") |
| 686 | } |
| 687 | if strings.Contains(server, "nginx") { |
| 688 | addHint("Nginx") |
| 689 | } |
| 690 | if strings.Contains(server, "envoy") { |
| 691 | addHint("Envoy") |
| 692 | } |
| 693 | if strings.Contains(server, "apache") { |
| 694 | addHint("Apache") |
| 695 | } |
| 696 | if strings.Contains(server, "iis") { |
| 697 | addHint("IIS") |
| 698 | } |
| 699 | if resp.poweredBy != "" { |
| 700 | addHint(resp.poweredBy) |
| 701 | } |
| 702 | return hints |
| 703 | } |
| 704 | |
| 705 | func prioritizeTechniques(techniques []string, hints []string) []string { |
| 706 | if len(hints) == 0 { |
no outgoing calls
no test coverage detected