Skip to content

Commit e87cf60

Browse files
dbussinkshanth96
authored andcommitted
Merge commit from fork
These templates were rendered using text/template which is fundamentally broken as it would allow for trivial HTML injection. Instead render using safehtml/template so that we have automatic escaping. Signed-off-by: Dirkjan Bussink <d.bussink@gmail.com>
1 parent 6759cee commit e87cf60

File tree

6 files changed

+16
-13
lines changed

6 files changed

+16
-13
lines changed

go/vt/vtgate/debugenv.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ import (
2222
"html"
2323
"net/http"
2424
"strconv"
25-
"text/template"
2625
"time"
2726

27+
"github.com/google/safehtml/template"
28+
2829
"vitess.io/vitess/go/acl"
2930
"vitess.io/vitess/go/vt/discovery"
3031
"vitess.io/vitess/go/vt/log"

go/vt/vtgate/querylogz.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ import (
2020
"net/http"
2121
"strconv"
2222
"strings"
23-
"text/template"
2423
"time"
2524

26-
"vitess.io/vitess/go/vt/vtgate/logstats"
25+
"github.com/google/safehtml/template"
2726

2827
"vitess.io/vitess/go/acl"
2928
"vitess.io/vitess/go/vt/log"
3029
"vitess.io/vitess/go/vt/logz"
3130
"vitess.io/vitess/go/vt/sqlparser"
31+
"vitess.io/vitess/go/vt/vtgate/logstats"
3232
)
3333

3434
var (

go/vt/vtgate/querylogz_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ import (
3434

3535
func TestQuerylogzHandlerFormatting(t *testing.T) {
3636
req, _ := http.NewRequest("GET", "/querylogz?timeout=10&limit=1", nil)
37-
logStats := logstats.NewLogStats(context.Background(), "Execute", "select name from test_table limit 1000", "suuid", nil)
37+
logStats := logstats.NewLogStats(context.Background(), "Execute", "select name, 'inject <script>alert();</script>' from test_table limit 1000", "suuid", nil)
3838
logStats.StmtType = "select"
3939
logStats.RowsAffected = 1000
4040
logStats.ShardQueries = 1
@@ -63,7 +63,7 @@ func TestQuerylogzHandlerFormatting(t *testing.T) {
6363
`<td>0.002</td>`,
6464
`<td>0.003</td>`,
6565
`<td>select</td>`,
66-
`<td>select name from test_table limit 1000</td>`,
66+
regexp.QuoteMeta(`<td>select name,​ &#39;inject &lt;script&gt;alert()​;&lt;/script&gt;&#39; from test_table limit 1000</td>`),
6767
`<td>1</td>`,
6868
`<td>1000</td>`,
6969
`<td></td>`,
@@ -93,7 +93,7 @@ func TestQuerylogzHandlerFormatting(t *testing.T) {
9393
`<td>0.002</td>`,
9494
`<td>0.003</td>`,
9595
`<td>select</td>`,
96-
`<td>select name from test_table limit 1000</td>`,
96+
regexp.QuoteMeta(`<td>select name,​ &#39;inject &lt;script&gt;alert()​;&lt;/script&gt;&#39; from test_table limit 1000</td>`),
9797
`<td>1</td>`,
9898
`<td>1000</td>`,
9999
`<td></td>`,
@@ -123,7 +123,7 @@ func TestQuerylogzHandlerFormatting(t *testing.T) {
123123
`<td>0.002</td>`,
124124
`<td>0.003</td>`,
125125
`<td>select</td>`,
126-
`<td>select name from test_table limit 1000</td>`,
126+
regexp.QuoteMeta(`<td>select name,​ &#39;inject &lt;script&gt;alert()​;&lt;/script&gt;&#39; from test_table limit 1000</td>`),
127127
`<td>1</td>`,
128128
`<td>1000</td>`,
129129
`<td></td>`,

go/vt/vttablet/tabletserver/debugenv.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@ import (
2222
"html"
2323
"net/http"
2424
"strconv"
25-
"text/template"
2625
"time"
2726

27+
"github.com/google/safehtml/template"
28+
2829
"vitess.io/vitess/go/acl"
2930
"vitess.io/vitess/go/vt/log"
3031
)

go/vt/vttablet/tabletserver/querylogz.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ import (
2020
"net/http"
2121
"strconv"
2222
"strings"
23-
"text/template"
2423
"time"
2524

25+
"github.com/google/safehtml/template"
26+
2627
"vitess.io/vitess/go/acl"
2728
"vitess.io/vitess/go/vt/log"
2829
"vitess.io/vitess/go/vt/logz"

go/vt/vttablet/tabletserver/querylogz_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ func TestQuerylogzHandler(t *testing.T) {
3636
req, _ := http.NewRequest("GET", "/querylogz?timeout=10&limit=1", nil)
3737
logStats := tabletenv.NewLogStats(context.Background(), "Execute")
3838
logStats.PlanType = planbuilder.PlanSelect.String()
39-
logStats.OriginalSQL = "select name from test_table limit 1000"
39+
logStats.OriginalSQL = "select name, 'inject <script>alert();</script>' from test_table limit 1000"
4040
logStats.RowsAffected = 1000
4141
logStats.NumberOfQueries = 1
4242
logStats.StartTime, _ = time.Parse("Jan 2 15:04:05", "Nov 29 13:33:09")
@@ -63,7 +63,7 @@ func TestQuerylogzHandler(t *testing.T) {
6363
`<td>0.001</td>`,
6464
`<td>1e-08</td>`,
6565
`<td>Select</td>`,
66-
`<td>select name from test_table limit 1000</td>`,
66+
regexp.QuoteMeta(`<td>select name,​ &#39;inject &lt;script&gt;alert()​;&lt;/script&gt;&#39; from test_table limit 1000</td>`),
6767
`<td>1</td>`,
6868
`<td>none</td>`,
6969
`<td>1000</td>`,
@@ -94,7 +94,7 @@ func TestQuerylogzHandler(t *testing.T) {
9494
`<td>0.001</td>`,
9595
`<td>1e-08</td>`,
9696
`<td>Select</td>`,
97-
`<td>select name from test_table limit 1000</td>`,
97+
regexp.QuoteMeta(`<td>select name,​ &#39;inject &lt;script&gt;alert()​;&lt;/script&gt;&#39; from test_table limit 1000</td>`),
9898
`<td>1</td>`,
9999
`<td>none</td>`,
100100
`<td>1000</td>`,
@@ -125,7 +125,7 @@ func TestQuerylogzHandler(t *testing.T) {
125125
`<td>0.001</td>`,
126126
`<td>1e-08</td>`,
127127
`<td>Select</td>`,
128-
`<td>select name from test_table limit 1000</td>`,
128+
regexp.QuoteMeta(`<td>select name,​ &#39;inject &lt;script&gt;alert()​;&lt;/script&gt;&#39; from test_table limit 1000</td>`),
129129
`<td>1</td>`,
130130
`<td>none</td>`,
131131
`<td>1000</td>`,

0 commit comments

Comments
 (0)