Skip to content
This repository was archived by the owner on Feb 4, 2021. It is now read-only.

Commit e6571f6

Browse files
authored
Merge pull request #93 from ProgrammingLab/gedorinku/fix_redis
Add validation
2 parents 60a1f86 + 8c7d1bf commit e6571f6

File tree

2 files changed

+21
-1
lines changed

2 files changed

+21
-1
lines changed

app/interceptor/session_auth.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package interceptor
22

33
import (
44
"context"
5+
"regexp"
56
"strings"
67

78
"github.com/pkg/errors"
@@ -28,6 +29,8 @@ var (
2829
ErrMetadataNotFound = errors.New("metadata not found in context")
2930
// ErrInvalidAuthorizationMetadata is returned when authorization metadata is invalid
3031
ErrInvalidAuthorizationMetadata = status.Error(codes.InvalidArgument, "Invalid authorization metadata")
32+
33+
sessionRegexp = regexp.MustCompile(`^[a-z0-9]{64}$`)
3134
)
3235

3336
type currentUserIDKey struct{}
@@ -76,6 +79,10 @@ func (a *Authorizator) authorization(ctx context.Context, req interface{}, info
7679
}
7780

7881
sessionID := strings.TrimSpace(d[len(SessionAuthorizationType):])
82+
if !sessionRegexp.MatchString(sessionID) {
83+
return nil, util.ErrUnauthenticated
84+
}
85+
7986
s, err := a.SessionStore(ctx).GetSession(sessionID)
8087
if err != nil {
8188
grpclog.Error(err)

infra/store/session/session_store.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,10 @@ func (s *sessionStoreImpl) GetSession(sessionID string) (*model.Session, error)
8181
return nil, errors.WithStack(err)
8282
}
8383

84+
if keys[0] != redisKey(sessionID)+":"+v {
85+
return nil, errors.WithStack(errSessionNotFound)
86+
}
87+
8488
id, err := strconv.ParseInt(v, 10, 64)
8589
if err != nil {
8690
return nil, errors.WithStack(err)
@@ -102,7 +106,16 @@ func (s *sessionStoreImpl) DeleteSession(sessionID string) error {
102106
return errors.WithStack(errSessionNotFound)
103107
}
104108

105-
_, err = s.client.Del(keys...).Result()
109+
v, err := s.client.Get(keys[0]).Result()
110+
if err != nil {
111+
return errors.WithStack(err)
112+
}
113+
114+
if keys[0] != redisKey(sessionID)+":"+v {
115+
return errors.WithStack(errSessionNotFound)
116+
}
117+
118+
_, err = s.client.Del(keys[0]).Result()
106119
return errors.WithStack(err)
107120
}
108121

0 commit comments

Comments
 (0)