2010-12-23 6 views
1

Ich möchte, dass meine Seite zu schützen, wenn ein Benutzer gibt die folgenden:mit Abschlags

<script type="text/javascript"> 
    alert("hi"); 
</script> 

Ich verwende Showdown:

jQuery.fn.markDown = function() 
{ 
    return this.each(function() { 
     var caller = this; 
     var converter = new Showdown.converter(); 

     var text = $(caller).text(); 
     var html = converter.makeHtml(text); 

     $(caller).html(html); 
    }); 
} 

Antwort

1

Eine der Lösungen, die effektiv sein könnte, wäre, das gesamte Tag in der Quelle zu entfernen oder HTML zu codieren, bevor es mit Showdown transformiert wird.

Denn wie all HTML-Tag strippen, gibt es ein paar Weg, es zu tun, dass Sie in dieser Frage finden:

Strip HTML from Text JavaScript

Denn wie den Tag in HTML kodieren, können Sie dies:

myString.replace(/</g, '&lt;').replace(/>/g, '&gt;'); 

Hinweis: Dies entfernt Sie die Möglichkeit, HTML in Showdown zu verwenden.

+0

MarkDown ermöglicht HTML-Tags. – SLaks

0

Ich benutze HTML Purifier die sehr gut funktioniert für Filtern von Benutzereingaben und ist in hohem Maße anpassbar.

Ich nehme an, Sie können es mit MarkDown verwenden, obwohl ich es nie versucht habe.

+0

Sorry, ich bin mit MVC (C#). PHP ist keine Option für mich. Danke trotzdem. Wenn es Ihnen nichts ausmacht, löschen Sie bitte die Antwort, ich möchte, dass andere Leute diese Frage ohne Antwort sehen. –

+0

Ich glaube nicht, dass Sie die Leute bitten sollen, ihre Antworten zu entfernen –

+0

@Daniel Peñalba: Die Antwort kann für einige andere Leute nützlich sein, die PHP benutzen. Um Verwirrung in der Zukunft zu vermeiden, achten Sie bitte darauf, Ihre Fragen korrekt zu markieren (es gab kein C# -Tag ...). Machen Sie sich keine Sorgen, die Masse der Benutzer von SO stellt sicher, dass Sie sehr bald andere Antworten bekommen werden (und Sie bereits haben). – nico

1

Die ShowDown-Seite entfernt jedes Javascript, also weiß ich nicht, was Sie genau meinen. Aber Sie können dies nicht auf dem Client tun. Wenn dies niemals an den Server gesendet wird, spielt es keine Rolle. In 99% der Fälle möchten Sie es jedoch auf dem Server speichern.

Ich denke, der beste Ansatz besteht darin, ein serverseitiges DOM-Objekt aus dem HTML zu erstellen, das übergeben wird (was gefälscht und ShowDown umgehen könnte) und nach einem Skript oder anderen gefährlichen Tags zu suchen. Das ist nicht so einfach!

Der beste Kompromiss für mich ist eine serverseitige Abschrift Sprache (wie https://github.com/charliesome/bbsharp), die Sie dann verwenden könnten, um das HTML zu generieren. Sie würden dann HTML html kodieren, bevor Sie es an das Werkzeug übergeben, das den Markdown in HTML konvertiert.

+0

Nein, Javascript wird nicht entfernt. Fügen Sie ein Tag mit einem 'mouseover'-Attribut ein und beobachten Sie, wie es ausgeführt wird. Es werden keine '