web-dev-qa-db-ja.com

クライアントがWebサイトでリッチテキスト編集を必要とする場合はどうしますか?

今や誰もが知っているように、 XSS攻撃は危険です および 本当に簡単に引き離すことができます 。 ASP.NET MVCのように、さまざまなフレームワークによりHTMLのエンコードが容易になります。

<%= Html.Encode("string"); %>

しかし、クライアントがMicrosoft Word文書から直接コンテンツをアップロードできる必要がある場合はどうなりますか?

シナリオは次のとおりです。人々はMicrosoft WordからコンテンツをコピーしてWYSIWYGエディター(この場合は tinyMCE )に貼り付け、その情報をWebページに投稿できます。

Webサイトは公開されていますが、その組織のメンバーのみがWebページに情報を投稿するためのアクセス権を持っています。

これらの要件を安全に処理するにはどうすればよいですか?現在、クライアントが投稿した内容のチェックは行われていません(「信頼できる」ユーザーしか投稿できないため)が、特に不満があり、アカウントがハッキングされた場合に備えて、さらにロックダウンしたいと考えています。

これらの要件を満たすことがわかっている唯一の概念的な方法は HTMLタグをホワイトリストに登録し、それらを通過させる です。別の方法はありますか?そうでない場合、ユーザーがデータベースに入力を任意の形式で保存し、適切にエンコードされ、不正なタグを取り除いて表示するための安全な方法は何ですか?

関連質問

クロスサイトスクリプティング(XSS)の防止

19
George Stocker

(開発者としての)最も簡単な方法は、 Markdown の多くのバリエーションの1つを実装することです(例: )。 Markdown.NET または、さらに良い(imho)、 wmd-editor

その後、ユーザーは単純なHTMLを貼り付けることができますが、何も危険ではありません。ユーザーは入力したデータをプレビューして、投稿する前でも問題を修正できます...

8
Tomas Aschan

ホワイトリストは、ユーザーが直接またはリッチテキストエディターを使用してHTMLを入力できるようにするときに、XSS攻撃を防ぐための最良の方法です。

他の質問について:

その場でホワイトリストに登録する機能を含むWYSIWYGエディターはありますか?

これでうまくいくとは思いません。これにはサーバー側のコードが必要で、RTEはクライアントで実行されます。

TinyMCEは必要に応じてタグをフィルタリングしますが、これはブラウザーで行われるため、信頼できません。 extended_valid_elements を参照してください。 TinyMCE(Moxie)もホワイトリストを提案しています こちら を参照してください。

これは「非公開投稿」のためだけなので、私もこれについて心配する必要があります

特定の理由がない限り(非常にまれです)、常にHTMLをフィルタリングする必要があります。いくつかの理由:a)今日の内部ユーザー向けの機能、おそらく明日の一般向けの機能b)不正アクセスによる影響は少ない

それらをデータベースに任意の形式で保存するのに最適な方法ですが、適切にエンコードされ、不良タグを取り除いて表示するだけですか?

それが私が好む方法です。さまざまな理由で、データベースに挿入する前にユーザー入力を変更したくありません。

7
daremon