658 Stimmen

HTML-Zeichenfolgen mit jQuery umbrechen

Kennt jemand eine einfache Möglichkeit, HTML aus Strings in jQuery ? Ich muss in der Lage sein, eine beliebige Zeichenfolge zu übergeben und haben es richtig für die Anzeige in einer HTML-Seite (Verhinderung von JavaScript/HTML-Injection-Angriffe) escaped. Ich bin sicher, es ist möglich, jQuery zu erweitern, um dies zu tun, aber ich weiß nicht genug über das Framework im Moment, um dies zu erreichen.

0 Stimmen

Siehe auch Perf: jsperf.com/

-2voto

Cees Timmerman Punkte 15076

Diese Antwort bietet die jQuery- und die normalen JS-Methoden, aber dies ist die kürzeste Methode ohne Verwendung des DOM:

unescape(escape("It's > 20% less complicated this way."))

Entkommene Zeichenfolge: It%27s%20%3E%2020%25%20less%20complicated%20this%20way.

Wenn Sie die Leerzeichen stören, versuchen Sie es:

unescape(escape("It's > 20% less complicated this way.").replace(/%20/g, " "))

Entkommene Zeichenfolge: It%27s %3E 20%25 less complicated this way.

Leider ist die escape() Funktion war veraltet in JavaScript Version 1.5 . encodeURI() o encodeURIComponent() sind Alternativen, aber sie ignorieren ' so dass die letzte Zeile des Codes wie folgt aussehen würde:

decodeURI(encodeURI("It's > 20% less complicated this way.").replace(/%20/g, " ").replace("'", '%27'))

Alle wichtigen Browser unterstützen immer noch den Kurzcode, und angesichts der vielen alten Websites wird sich das wohl auch nicht so bald ändern.

0 Stimmen

Dies ist für die URL-Kodierung. Die Frage bezog sich auf HTML-Escaping, was etwas ganz anderes ist.

0 Stimmen

@thelem, nicht, wenn die Strings in JavaScript-Arrays eingebettet sind, die in HTML eingebettet sind, aber ich stimme zu, dass es um einfaches HTML-Escaping ging, damit es sofort als Text angezeigt werden kann.

-3voto

Kauê Gimenes Punkte 1242

Wenn Sie diese Informationen in einem Datenbank ist es falsch, HTML mit einer Client-seitig Skript zu erstellen, sollte dies in der Server . Andernfalls ist es leicht, den XSS-Schutz zu umgehen.

Um meinen Standpunkt zu verdeutlichen, hier ein Beispiel mit einer der Antworten:

Nehmen wir an, Sie verwenden die Funktion escapeHtml, um das Html eines Kommentars in Ihrem Blog zu entschlüsseln und ihn dann auf Ihrem Server zu veröffentlichen.

var entityMap = {
    "&": "&",
    "<": "&lt;",
    ">": "&gt;",
    '"': '&quot;',
    "'": '&#39;',
    "/": '&#x2F;'
  };

  function escapeHtml(string) {
    return String(string).replace(/[&<>"'\/]/g, function (s) {
      return entityMap[s];
    });
  }

Der Benutzer könnte:

  • Bearbeiten Sie die POST-Anforderungsparameter und ersetzen Sie den Kommentar durch Javascript-Code.
  • Überschreiben Sie die Funktion escapeHtml über die Browserkonsole.

Wenn der Benutzer dieses Snippet in die Konsole einfügt, umgeht er die XSS-Validierung:

function escapeHtml(string){
   return string
}

0 Stimmen

Da bin ich anderer Meinung. Um diesen XSS-Schutz zu umgehen, müsste man einen XSS-Angriff durchführen (ein Skript einschleusen, das das Escaping deaktiviert), und das ist es, was Sie eigentlich blockieren. In bestimmten Fällen ist es tatsächlich sinnvoller, das Escaping auf dem Client durchzuführen, z. B. wenn die Daten von einer REST-API stammen, die Standard-JSON zurückgeben muss.

0 Stimmen

@Qualcuno Wenn Sie diese Validierung im Client durchführen und diese Informationen im Vertrauen auf die Validierung an den Server senden, könnte der Benutzer die Anfrage einfach bearbeiten, und das Skript würde in der Datenbank gespeichert werden.

0 Stimmen

@Qualcuno Ich habe einige Beispiele hinzugefügt, um meinen Standpunkt zu verdeutlichen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X