Skip to content

Commit 7c152f7

Browse files
mobyvbStorj Robot
authored andcommitted
satellite/console: Filter new characters out of user input
HTML and JS escape user input for create and update user. Change-Id: I91d972f454341a5a7f333d006a87c6f854595490
1 parent a53849f commit 7c152f7

File tree

2 files changed

+16
-7
lines changed

2 files changed

+16
-7
lines changed

satellite/console/consoleweb/consoleapi/auth.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ package consoleapi
66
import (
77
"encoding/json"
88
"errors"
9+
"html/template"
910
"net/http"
1011
"regexp"
1112
"strings"
@@ -165,9 +166,11 @@ func (a *Auth) Logout(w http.ResponseWriter, r *http.Request) {
165166
a.cookieAuth.RemoveTokenCookie(w)
166167
}
167168

168-
// replaceURLCharacters replaces slash, colon, and dot characters in a string with a hyphen.
169-
func replaceURLCharacters(s string) string {
169+
// replaceSpecialCharacters replaces characters that could be used to represent a url or html.
170+
func replaceSpecialCharacters(s string) string {
170171
re := regexp.MustCompile(`[\/:\.]`)
172+
s = template.HTMLEscapeString(s)
173+
s = template.JSEscapeString(s)
171174
return re.ReplaceAllString(s, "-")
172175
}
173176

@@ -225,9 +228,13 @@ func (a *Auth) Register(w http.ResponseWriter, r *http.Request) {
225228
return
226229
}
227230

228-
// remove special characters from submitted name so that malicious link cannot be injected into verification or password reset emails.
229-
registerData.FullName = replaceURLCharacters(registerData.FullName)
230-
registerData.ShortName = replaceURLCharacters(registerData.ShortName)
231+
// remove special characters from submitted info so that malicious link or code cannot be injected anywhere.
232+
registerData.FullName = replaceSpecialCharacters(registerData.FullName)
233+
registerData.ShortName = replaceSpecialCharacters(registerData.ShortName)
234+
registerData.Partner = replaceSpecialCharacters(registerData.Partner)
235+
registerData.Position = replaceSpecialCharacters(registerData.Position)
236+
registerData.CompanyName = replaceSpecialCharacters(registerData.CompanyName)
237+
registerData.EmployeeCount = replaceSpecialCharacters(registerData.EmployeeCount)
231238

232239
if len([]rune(registerData.Partner)) > 100 {
233240
a.serveJSONError(w, console.ErrValidation.Wrap(errs.New("Partner must be less than or equal to 100 characters")))
@@ -427,6 +434,8 @@ func (a *Auth) UpdateAccount(w http.ResponseWriter, r *http.Request) {
427434
a.serveJSONError(w, err)
428435
return
429436
}
437+
updatedInfo.FullName = replaceSpecialCharacters(updatedInfo.FullName)
438+
updatedInfo.ShortName = replaceSpecialCharacters(updatedInfo.ShortName)
430439

431440
if err = a.service.UpdateAccount(ctx, updatedInfo.FullName, updatedInfo.ShortName); err != nil {
432441
a.serveJSONError(w, err)

satellite/console/consoleweb/consoleapi/auth_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -754,8 +754,8 @@ func TestAuth_Register_NameSpecialChars(t *testing.T) {
754754
},
755755
},
756756
}, func(t *testing.T, ctx *testcontext.Context, planet *testplanet.Planet) {
757-
inputName := "The website has been changed to https://evil.com/login.html - Enter Login Details,"
758-
filteredName := "The website has been changed to https---evil-com-login-html - Enter Login Details,"
757+
inputName := "The website has been changed to https://evil.com/login.html<> - Enter Login ' \" Details,"
758+
filteredName := "The website has been changed to https---evil-com-login-html\\u0026lt;\\u0026gt; - Enter Login \\u0026#39; \\u0026#34; Details,"
759759
email := "user@mail.test"
760760
registerData := struct {
761761
FullName string `json:"fullName"`

0 commit comments

Comments
 (0)