Skip to content

Commit 5d32632

Browse files
committed
escape html special chars for rendering
1 parent ca99c96 commit 5d32632

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

custom/js/helper.js

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
function escapeHtml(unsafe)
2+
{
3+
return unsafe
4+
.replace(/&/g, "&")
5+
.replace(/</g, "&lt;")
6+
.replace(/>/g, "&gt;")
7+
.replace(/"/g, "&quot;")
8+
.replace(/'/g, "&#039;");
9+
}
10+
111
function renderClientList(data) {
212
$.each(data, function(index, obj) {
313
// render telegram button
@@ -6,13 +16,13 @@ function renderClientList(data) {
616
telegramButton = `<div class="btn-group">
717
<button type="button" class="btn btn-outline-primary btn-sm" data-toggle="modal"
818
data-target="#modal_telegram_client" data-clientid="${obj.Client.id}"
9-
data-clientname="${obj.Client.name}">Telegram</button>
19+
data-clientname="${escapeHtml(obj.Client.name)}">Telegram</button>
1020
</div>`
1121
}
1222

1323
let telegramHtml = "";
1424
if (obj.Client.telegram_userid && obj.Client.telegram_userid.length > 0) {
15-
telegramHtml = `<div style="display: none"><i class="fas fa-tguserid"></i>${obj.Client.telegram_userid}</div>`
25+
telegramHtml = `<div style="display: none"><i class="fas fa-tguserid"></i>${escapeHtml(obj.Client.telegram_userid)}</div>`
1626
}
1727

1828
// render client status css tag style
@@ -24,13 +34,13 @@ function renderClientList(data) {
2434
// render client allocated ip addresses
2535
let allocatedIpsHtml = "";
2636
$.each(obj.Client.allocated_ips, function(index, obj) {
27-
allocatedIpsHtml += `<small class="badge badge-secondary">${obj}</small>&nbsp;`;
37+
allocatedIpsHtml += `<small class="badge badge-secondary">${escapeHtml(obj)}</small>&nbsp;`;
2838
})
2939

3040
// render client allowed ip addresses
3141
let allowedIpsHtml = "";
3242
$.each(obj.Client.allowed_ips, function(index, obj) {
33-
allowedIpsHtml += `<small class="badge badge-secondary">${obj}</small>&nbsp;`;
43+
allowedIpsHtml += `<small class="badge badge-secondary">${escapeHtml(obj)}</small>&nbsp;`;
3444
})
3545

3646
let subnetRangesString = "";
@@ -40,7 +50,7 @@ function renderClientList(data) {
4050

4151
let additionalNotesHtml = "";
4252
if (obj.Client.additional_notes && obj.Client.additional_notes.length > 0) {
43-
additionalNotesHtml = `<div style="display: none"><i class="fas fa-additional_notes"></i>${obj.Client.additional_notes.toUpperCase()}</div>`
53+
additionalNotesHtml = `<div style="display: none"><i class="fas fa-additional_notes"></i>${escapeHtml(obj.Client.additional_notes.toUpperCase())}</div>`
4454
}
4555

4656
// render client html content
@@ -56,12 +66,12 @@ function renderClientList(data) {
5666
<div class="btn-group">
5767
<button type="button" class="btn btn-outline-primary btn-sm" data-toggle="modal"
5868
data-target="#modal_qr_client" data-clientid="${obj.Client.id}"
59-
data-clientname="${obj.Client.name}" ${obj.QRCode != "" ? '' : ' disabled'}>QR code</button>
69+
data-clientname="${escapeHtml(obj.Client.name)}" ${obj.QRCode != "" ? '' : ' disabled'}>QR code</button>
6070
</div>
6171
<div class="btn-group">
6272
<button type="button" class="btn btn-outline-primary btn-sm" data-toggle="modal"
6373
data-target="#modal_email_client" data-clientid="${obj.Client.id}"
64-
data-clientname="${obj.Client.name}">Email</button>
74+
data-clientname="${escapeHtml(obj.Client.name)}">Email</button>
6575
</div>
6676
${telegramButton}
6777
<div class="btn-group">
@@ -72,31 +82,31 @@ function renderClientList(data) {
7282
<div class="dropdown-menu" role="menu">
7383
<a class="dropdown-item" href="#" data-toggle="modal"
7484
data-target="#modal_edit_client" data-clientid="${obj.Client.id}"
75-
data-clientname="${obj.Client.name}">Edit</a>
85+
data-clientname="${escapeHtml(obj.Client.name)}">Edit</a>
7686
<a class="dropdown-item" href="#" data-toggle="modal"
7787
data-target="#modal_pause_client" data-clientid="${obj.Client.id}"
78-
data-clientname="${obj.Client.name}">Disable</a>
88+
data-clientname="${escapeHtml(obj.Client.name)}">Disable</a>
7989
<a class="dropdown-item" href="#" data-toggle="modal"
8090
data-target="#modal_remove_client" data-clientid="${obj.Client.id}"
81-
data-clientname="${obj.Client.name}">Delete</a>
91+
data-clientname="${escapeHtml(obj.Client.name)}">Delete</a>
8292
</div>
8393
</div>
8494
</div>
8595
<div class="card-body">
86-
<div class="info-box-text"><i class="fas fa-user"></i> ${obj.Client.name}</div>
87-
<div style="display: none"><i class="fas fa-key"></i> ${obj.Client.public_key}</div>
88-
<div style="display: none"><i class="fas fa-subnetrange"></i>${subnetRangesString}</div>
96+
<div class="info-box-text"><i class="fas fa-user"></i> ${escapeHtml(obj.Client.name)}</div>
97+
<div style="display: none"><i class="fas fa-key"></i> ${escapeHtml(obj.Client.public_key)}</div>
98+
<div style="display: none"><i class="fas fa-subnetrange"></i>${escapeHtml(subnetRangesString)}</div>
8999
${telegramHtml}
90100
${additionalNotesHtml}
91-
<div class="info-box-text"><i class="fas fa-envelope"></i> ${obj.Client.email}</div>
101+
<div class="info-box-text"><i class="fas fa-envelope"></i> ${escapeHtml(obj.Client.email)}</div>
92102
<div class="info-box-text"><i class="fas fa-clock"></i>
93103
${prettyDateTime(obj.Client.created_at)}</div>
94104
<div class="info-box-text"><i class="fas fa-history"></i>
95105
${prettyDateTime(obj.Client.updated_at)}</div>
96106
<div class="info-box-text"><i class="fas fa-server" style="${obj.Client.use_server_dns ? "opacity: 1.0" : "opacity: 0.5"}"></i>
97107
${obj.Client.use_server_dns ? 'DNS enabled' : 'DNS disabled'}</div>
98108
<div class="info-box-text"><i class="fas fa-file"></i>
99-
${obj.Client.additional_notes}</div>
109+
${escapeHtml(obj.Client.additional_notes)}</div>
100110
<div class="info-box-text"><strong>IP Allocation</strong></div>`
101111
+ allocatedIpsHtml
102112
+ `<div class="info-box-text"><strong>Allowed IPs</strong></div>`

router/router.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ package router
22

33
import (
44
"errors"
5+
"html/template"
56
"io"
67
"io/fs"
78
"reflect"
89
"strings"
9-
"text/template"
1010

1111
"github.com/gorilla/sessions"
1212
"github.com/labstack/echo-contrib/session"

0 commit comments

Comments
 (0)