api: sanitise new commenters' links

This commit is contained in:
Adhityaa 2018-06-10 23:13:18 +05:30
parent 2020405e8b
commit 42a58f1d87
2 changed files with 17 additions and 0 deletions

View File

@ -15,6 +15,13 @@ func commenterNew(email string, name string, link string, photo string, provider
return "", errorMissingField return "", errorMissingField
} }
// See utils_sanitise.go's documentation on isHttpsUrl. This is not a URL
// validator, just an XSS preventor.
// TODO: reject URLs instead of malforming them.
if !isHttpsUrl(link) {
link = "https://" + link
}
if _, err := commenterGetByEmail(provider, email); err == nil { if _, err := commenterGetByEmail(provider, email); err == nil {
return "", errorEmailAlreadyExists return "", errorEmailAlreadyExists
} }

View File

@ -33,3 +33,13 @@ func stripPath(url string) string {
return strippedPath return strippedPath
} }
var httpsUrl = regexp.MustCompile(`^https?://`)
func isHttpsUrl(in string) bool {
// Admittedly, this isn't the greatest URL checker. But it does what we need.
// I don't care if the user gives an invalid URL, I just want to make sure
// they don't do any XSS shenanigans. Hopefully, enforcing a https?:// prefix
// solves this. If this function returns false, prefix with "http://"
return len(httpsUrl.FindAllString(in, -1)) != 0
}