fix(server/handlers): HTML escape chat messages to prevent XSS attacks (#322)

pull/330/head
mei 1 year ago committed by GitHub
parent 67f57e1d5b
commit 9b3ddee4a1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"io" "io"
"strings" "strings"
"text/template"
"time" "time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
@ -373,12 +374,13 @@ func handleChatMessage(cli *op.Client, message string) error {
if message == "" { if message == "" {
return sendErrorMessage(cli, "message is empty") return sendErrorMessage(cli, "message is empty")
} }
if len(message) > MaxChatMessageLength { sanitizedMessage := template.HTMLEscapeString(message)
if len(sanitizedMessage) > MaxChatMessageLength {
return sendErrorMessage(cli, "message too long") return sendErrorMessage(cli, "message too long")
} }
err := cli.SendChatMessage(message) err := cli.SendChatMessage(sanitizedMessage)
if err != nil && errors.Is(err, model.ErrNoPermission) { if err != nil && errors.Is(err, model.ErrNoPermission) {
return sendErrorMessage(cli, fmt.Sprintf("send chat message error: %v", err)) return sendErrorMessage(cli, "failed to send message due to permission issue")
} }
return err return err
} }

Loading…
Cancel
Save