2010-11-19 8 views
0

Ich mache eine Chat-Room-Website, derzeit kann der Benutzer alles, was sie möchten, in das Eingabefeld eingeben und es an alle Online-Benutzer senden. Aber ich fürchte, es ist nicht sicher, sobald es einige Bösewichte gibt, die bösartigen HTML-/Javascript-Code senden, um alle anderen Benutzer zu brechen?So vermeiden Sie bösartige senden in Chat-Room-Anwendung

Wie kann das vermieden werden?

Antwort

3

Was alle schon gesagt haben, ist richtig; Sie müssen alle diese Daten verschlüsseln, bevor Sie sie an die Benutzer senden.

Ich wollte nur hinzufügen, aber sicher sein, dass Sie diese Codierung auf dem Server, mit einer integrierten (und daher gut getesteten) Methode von der Web-Framework, die Sie verwenden, tun.

Do not versuchen, dies in JavaScript auf dem Client zu tun; Es gibt weitere bösartige Codes, die Benutzer eingeben könnten, die das JavaScript selbst brechen würden.

Und nicht versucht Codierung Mechanismus ‚Ihren eigene Rolle‘, noch versuchen, einen schwarzen Liste Ansatz zu verwenden, in dem Sie versuchen, nur bestimmte „schlechte“ Dinge zu finden, jemand geben könnte, und sie ersetzen. Du wirst nie erraten, was all die "schlechten Dinge" sind.

Sie erwähnen nicht, Ihren Web-Framework, aber die meisten haben eine integrierte Funktionalität, die HTML-Codiert eine ganze Zeichenfolge so, dass die Zeichenfolge buchstäblich im Browser angezeigt werden, egal was Inhalt drin ist.

+0

Ich schreibe Python CGI mit Flup. Hast du irgendwelche Vorschläge? –

1

Eine Möglichkeit könnte sein, den gesamten HTML-Code in Opcodes umzuwandeln. Anstatt also < zu senden, senden Sie &lt; usw.

Auf diese Weise wird der Code angezeigt, wie es eingegeben wurde, aber nicht ausgeführt werden sollte.

2

Stellen Sie sicher, dass Sie kodieren alle Inhalte, die Sie senden, die Sie sowieso tun möchten. Wenn der Benutzer z. B. < eingibt, möchten Sie ihn wahrscheinlich als < anzeigen, anstatt ein HTML-Tag zu starten. Wenn Sie also diese Ausgabe in einer HTML-Seite ausgeben möchten, müssen Sie sie als &lt; zurückgeben. Dies hat den wunderbaren Effekt, dass Leute nicht HTML-Tags eingeben (und wenn sie kein HTML senden können, ist es schwierig, ein script-Tag zu senden).

Die Nötigste Sie selbst kodieren müssen nur die Ausgabe richtig haben (viel weniger gegen schädlichen Ausgang zu schützen) ist < =>&lt; und & =>&amp;. Ich mache immer auch > =>&gt; auch nur für die Gründlichkeit, und weil ich nicht helfen kann, eines Tages zu denken, irgendwie wird es egal sein. :-)

1

Wenn Sie PHP verwenden, können Sie strip_tags() verwenden, die alle Tags entfernt, die Sie angeben, aber trotzdem HTML zulassen, wenn Sie dies zulassen.

+0

'strip_tags()' kann nicht sein, was er will. Zum Beispiel geben Leute manchmal "" als eine Art 'Emote' ein, dass sie als Antwort auf etwas grinsen. Auch der Versuch, einige Tags zuzulassen, könnte gefährlich sein. Fragen Sie Twitter nach den onHover-Attacken vor ein paar Wochen. –

+0

Ich habe gerade meine Antwort geworfen, falls das für ihn gilt. Vielleicht will er keine Tags, in diesem Fall spielt es keine Rolle?Wenn er einige Tags haben möchte, können Sie Attribute immer noch über eine Regex oder einen anderen minimalen zusätzlichen Code entfernen. –