fix(security): use crypto/rand for alias prefix generation

Replace math/rand.Intn with crypto/rand for generating random alias
prefixes. While aliases are not security tokens, using a CSPRNG ensures
consistent use of cryptographically secure randomness throughout.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
nemunaire 2026-03-06 14:48:17 +07:00
commit 9870fa7831

12
addy.go
View file

@ -3,13 +3,13 @@ package main
import ( import (
"bytes" "bytes"
"crypto/hmac" "crypto/hmac"
"crypto/rand"
"crypto/sha256" "crypto/sha256"
"encoding/base32" "encoding/base32"
"encoding/json" "encoding/json"
"flag" "flag"
"fmt" "fmt"
"log" "log"
"math/rand"
"net/http" "net/http"
"os" "os"
"strings" "strings"
@ -230,10 +230,14 @@ func addyAliasAPIDelete(w http.ResponseWriter, r *http.Request) {
} }
func generateRandomString(length int) string { func generateRandomString(length int) string {
charset := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" const charset = "abcdefghijklmnopqrstuvwxyz0123456789"
result := make([]byte, length) result := make([]byte, length)
for i := range result { buf := make([]byte, length)
result[i] = charset[rand.Intn(len(charset))] if _, err := rand.Read(buf); err != nil {
panic("crypto/rand unavailable: " + err.Error())
}
for i, b := range buf {
result[i] = charset[int(b)%len(charset)]
} }
return string(result) return string(result)
} }