checks.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package main
  2. import (
  3. "math"
  4. "strings"
  5. )
  6. // check each line of a diff and see if there are any potential secrets
  7. // [1] https://people.eecs.berkeley.edu/~rohanpadhye/files/key_leaks-msr15.pdf
  8. func checkRegex(diff string) []string {
  9. var match string
  10. var results []string
  11. lines := strings.Split(diff, "\n")
  12. for _, line := range lines {
  13. // doubtful a leak would be on a line > 120 characters
  14. if len(line) == 0 || len(line) > 120 {
  15. continue
  16. }
  17. for _, re := range regexes {
  18. match = re.FindString(line)
  19. if len(match) == 0 {
  20. continue
  21. }
  22. results = append(results, line)
  23. }
  24. }
  25. return results
  26. }
  27. // checkShannonEntropy checks entropy of target
  28. func checkShannonEntropy(target string, entropyCutoff int) bool {
  29. index := assignRegex.FindStringIndex(target)
  30. if len(index) == 0 {
  31. return false
  32. }
  33. target = strings.Trim(target[index[1]:], " ")
  34. if len(target) > 100 {
  35. return false
  36. }
  37. var sum float64
  38. frq := make(map[rune]float64)
  39. for _, i := range target {
  40. frq[i]++
  41. }
  42. for _, v := range frq {
  43. f := v / float64(len(target))
  44. sum += f * math.Log2(f)
  45. }
  46. bits := int(math.Ceil(sum*-1)) * len(target)
  47. return bits > entropyCutoff
  48. }
  49. // containsStopWords checks if there are any stop words in target
  50. func containsStopWords(target string) bool {
  51. stopWords := []string{
  52. "setting",
  53. "Setting",
  54. "SETTING",
  55. "info",
  56. "Info",
  57. "INFO",
  58. "env",
  59. "Env",
  60. "ENV",
  61. "environment",
  62. "Environment",
  63. "ENVIRONMENT",
  64. }
  65. for _, stopWord := range stopWords {
  66. if strings.Contains(target, stopWord) {
  67. return true
  68. }
  69. }
  70. return false
  71. }