From 6048299a138e078aed210f163111698c8c526a13 Mon Sep 17 00:00:00 2001 From: Solly Ross Date: Thu, 12 Jan 2017 11:43:35 -0500 Subject: [PATCH] Use textContent instead of innerHTML Previously, setting `innerHTML` was used to display the statuses. These could include content communicated from the remote VNC server, allowing the remove VNC server to inject HTML into the noVNC page. This commit switches all uses of `innerHTML` to use `textContent`, which is not vulnerable to the HTML injection. --- app/ui.js | 8 ++++---- tests/input.html | 2 +- tests/vnc_perf.html | 4 ++-- tests/vnc_playback.html | 4 ++-- vnc_auto.html | 10 +++++++--- 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app/ui.js b/app/ui.js index 0e789c0..8056078 100644 --- a/app/ui.js +++ b/app/ui.js @@ -48,7 +48,7 @@ var UI; document.getElementById('noVNC_fallback_error') .classList.add("noVNC_open"); - document.getElementById('noVNC_fallback_errormsg').innerHTML = msg; + document.getElementById('noVNC_fallback_errormsg').textContent = msg; } catch (exc) { document.write("noVNC encountered an error."); } @@ -416,7 +416,7 @@ var UI; switch (state) { case 'connecting': - document.getElementById("noVNC_transition_text").innerHTML = _("Connecting..."); + document.getElementById("noVNC_transition_text").textContent = _("Connecting..."); document.documentElement.classList.add("noVNC_connecting"); break; case 'connected': @@ -431,7 +431,7 @@ var UI; break; case 'disconnecting': UI.connected = false; - document.getElementById("noVNC_transition_text").innerHTML = _("Disconnecting..."); + document.getElementById("noVNC_transition_text").textContent = _("Disconnecting..."); document.documentElement.classList.add("noVNC_disconnecting"); break; case 'disconnected': @@ -531,7 +531,7 @@ var UI; break; } - statusElem.innerHTML = text; + statusElem.textContent = text; statusElem.classList.add("noVNC_open"); // If no time was specified, show the status for 1.5 seconds diff --git a/tests/input.html b/tests/input.html index 437d6f3..0938a4a 100644 --- a/tests/input.html +++ b/tests/input.html @@ -45,7 +45,7 @@ function message(str) { console.log(str); cell = document.getElementById('messages'); - cell.innerHTML += msg_cnt + ": " + str + newline; + cell.textContent += msg_cnt + ": " + str + newline; cell.scrollTop = cell.scrollHeight; msg_cnt++; } diff --git a/tests/vnc_perf.html b/tests/vnc_perf.html index c3e6a11..ce97ca4 100644 --- a/tests/vnc_perf.html +++ b/tests/vnc_perf.html @@ -65,7 +65,7 @@ function msg(str) { console.log(str); var cell = document.getElementById('messages'); - cell.innerHTML += str + "\n"; + cell.textContent += str + "\n"; cell.scrollTop = cell.scrollHeight; } function dbgmsg(str) { @@ -85,7 +85,7 @@ } notification = function (rfb, mesg, level, options) { - document.getElementById('VNC_status').innerHTML = mesg; + document.getElementById('VNC_status').textContent = mesg; } function do_test() { diff --git a/tests/vnc_playback.html b/tests/vnc_playback.html index 510ad06..65b735e 100644 --- a/tests/vnc_playback.html +++ b/tests/vnc_playback.html @@ -49,7 +49,7 @@ function message(str) { console.log(str); var cell = document.getElementById('messages'); - cell.innerHTML += str + "\n"; + cell.textContent += str + "\n"; cell.scrollTop = cell.scrollHeight; } @@ -76,7 +76,7 @@ } notification = function (rfb, mesg, level, options) { - document.getElementById('VNC_status').innerHTML = mesg; + document.getElementById('VNC_status').textContent = mesg; } function start() { diff --git a/vnc_auto.html b/vnc_auto.html index e86ae5d..e4fc467 100644 --- a/vnc_auto.html +++ b/vnc_auto.html @@ -111,10 +111,14 @@ var html; html = '