mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-23 05:06:43 +00:00
add address validation
This commit is contained in:
parent
72f593611a
commit
5c54198a68
1 changed files with 17 additions and 2 deletions
|
|
@ -21,6 +21,8 @@ import (
|
|||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
)
|
||||
|
||||
// Regular expression to match SIWE messages
|
||||
|
|
@ -34,7 +36,7 @@ var domain = `(?:[^ ]+)`
|
|||
var wantsMsg = ` wants you to sign in with your Ethereum account:\n`
|
||||
|
||||
// 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")
|
||||
var statement = `(?:[^\n]+\n)?`
|
||||
|
|
@ -84,7 +86,7 @@ func validateSIWE(req *SignDataRequest) error {
|
|||
continue
|
||||
}
|
||||
patterns := siweMessageRegex.FindStringSubmatch(s)
|
||||
if len(patterns) != 14 {
|
||||
if len(patterns) != 15 {
|
||||
return ErrMalformedSIWEMEssage
|
||||
}
|
||||
scheme := "https"
|
||||
|
|
@ -94,6 +96,9 @@ func validateSIWE(req *SignDataRequest) error {
|
|||
if err := validateDomain(req, scheme, patterns[1]); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := validateAddress(req, patterns[2]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
@ -105,3 +110,13 @@ func validateDomain(request *SignDataRequest, scheme, domain string) error {
|
|||
}
|
||||
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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue