add address validation

This commit is contained in:
shwoop 2025-07-02 14:05:49 +02:00
parent 72f593611a
commit 5c54198a68
No known key found for this signature in database
GPG key ID: 95A35B68C1E5F95A

View file

@ -21,6 +21,8 @@ import (
"fmt" "fmt"
"regexp" "regexp"
"strings" "strings"
"github.com/ethereum/go-ethereum/common"
) )
// Regular expression to match SIWE messages // Regular expression to match SIWE messages
@ -34,7 +36,7 @@ var domain = `(?:[^ ]+)`
var wantsMsg = ` wants you to sign in with your Ethereum account:\n` var wantsMsg = ` wants you to sign in with your Ethereum account:\n`
// Ethereum address (with basic 0x prefix + 40 hex digits) // Ethereum address (with basic 0x prefix + 40 hex digits)
var address = `0x[a-fA-F0-9]{40}\n` var address = `(?:0x[a-fA-F0-9]{40})\n`
// Optional statement (any line not containing "\n\n") // Optional statement (any line not containing "\n\n")
var statement = `(?:[^\n]+\n)?` var statement = `(?:[^\n]+\n)?`
@ -84,7 +86,7 @@ func validateSIWE(req *SignDataRequest) error {
continue continue
} }
patterns := siweMessageRegex.FindStringSubmatch(s) patterns := siweMessageRegex.FindStringSubmatch(s)
if len(patterns) != 14 { if len(patterns) != 15 {
return ErrMalformedSIWEMEssage return ErrMalformedSIWEMEssage
} }
scheme := "https" scheme := "https"
@ -94,6 +96,9 @@ func validateSIWE(req *SignDataRequest) error {
if err := validateDomain(req, scheme, patterns[1]); err != nil { if err := validateDomain(req, scheme, patterns[1]); err != nil {
return err return err
} }
if err := validateAddress(req, patterns[2]); err != nil {
return err
}
} }
return nil return nil
} }
@ -105,3 +110,13 @@ func validateDomain(request *SignDataRequest, scheme, domain string) error {
} }
return nil return nil
} }
func validateAddress(request *SignDataRequest, address string) error {
checksumAddr := common.HexToAddress(address).Hex()
requestAddr := request.Address.Address().Hex()
if checksumAddr != requestAddr {
return fmt.Errorf("sign in request address (%s) does not match source: %s", checksumAddr, requestAddr)
}
return nil
}