Der alte Walter: XSS bei generierten Inhalten in HTML

Beitrag lesen

Die Daten in den HTML String einzubauen ist jedenfalls mühsamer und fehlerträchtiger. Es geht, natürlich geht es, aber du musst es selbst tun. Der Trick dazu ist ein Dummy-Element, das man nicht ins DOM hängt. Man weist den Text an die textContent-Eigenschaft zu und liest ihn aus innerHTML wieder aus. Zack, fertig maskiert. Aber nicht der beste Weg.

Wäre das so eine saubere Lösung deiner Meinung nach?:

function htmlEncode(str) {
  const div = document.createElement('div'); // oder irgendein anderes Element
  div.textContent = str;
  return div.innerHTML;
}

MudGuard scheint anderer Meinung zu sein (siehe oben), wobei mir auch diese Lösung gangbar erscheint:

Die Behandlung der Zeichen für HTML (also <>& -> &lt;&gt;&amp;)muß erfolgen, wenn die Daten in die HTML-Elemente geschrieben werden.

Bin da diesbezüglich schon vor meinem ersten Post auf folgendes gestoßen (siehe Konversation oben):

      function escapeHTML(str) {
        return str.replace(/[&<>"']/g, function (char) {
          switch (char) {
            case "&":
              return "&amp;";
            case "<":
              return "&lt;";
            case ">":
              return "&gt;";
            case '"':
              return "&quot;";
            case "'":
              return "&#39;";
          }
        });
      }

Beides akzeptabel? Eine Version besser als die andere? JA WAS DENN NU? 😂

Rolf

Vielen lieben Dank für Deine Hilfe! 😃👍